def __init__(self): self.pairlock = Lock() self.iolock = MultiLock() self.start()
class CursesUtil: def __init__(self): self.pairlock = Lock() self.iolock = MultiLock() self.start() def initpairs(self): self.pairlock.acquire() try: self.pairs = {self._getpairindex(curses.COLOR_WHITE, curses.COLOR_BLACK): 0} self.nextpair = 1 finally: self.pairlock.release() def lock(self): self.iolock.acquire() def unlock(self): self.iolock.release() def locked(self, target, *args, **kwargs): """Perform an operation with full locking.""" self.lock() try: apply(target, args, kwargs) finally: self.unlock() def refresh(self): def lockedstuff(): curses.panel.update_panels() curses.doupdate() self.locked(lockedstuff) def isactive(self): return hasattr(self, 'stdscr') def _getpairindex(self, fg, bg): return '%d/%d' % (fg,bg) def getpair(self, fg, bg): if not self.has_color: return 0 pindex = self._getpairindex(fg, bg) self.pairlock.acquire() try: if self.pairs.has_key(pindex): return curses.color_pair(self.pairs[pindex]) else: self.pairs[pindex] = self.nextpair curses.init_pair(self.nextpair, fg, bg) self.nextpair += 1 return curses.color_pair(self.nextpair - 1) finally: self.pairlock.release() def start(self): self.stdscr = curses.initscr() curses.noecho() curses.cbreak() self.stdscr.keypad(1) try: curses.start_color() self.has_color = curses.has_colors() except: self.has_color = 0 self.oldcursor = None try: self.oldcursor = curses.curs_set(0) except: pass self.stdscr.clear() self.stdscr.refresh() (self.height, self.width) = self.stdscr.getmaxyx() self.initpairs() def stop(self): if not hasattr(self, 'stdscr'): return #self.stdscr.addstr(self.height - 1, 0, "\n", # self.getpair(curses.COLOR_WHITE, # curses.COLOR_BLACK)) if self.oldcursor != None: curses.curs_set(self.oldcursor) self.stdscr.refresh() self.stdscr.keypad(0) curses.nocbreak() curses.echo() curses.endwin() del self.stdscr def reset(self): self.stop() self.start()
class CursesUtil: def __init__(self): self.pairlock = Lock() self.iolock = MultiLock() self.start() def initpairs(self): self.pairlock.acquire() try: self.pairs = {self._getpairindex(curses.COLOR_WHITE, curses.COLOR_BLACK): 0} self.nextpair = 1 finally: self.pairlock.release() def lock(self): self.iolock.acquire() def unlock(self): self.iolock.release() def locked(self, target, *args, **kwargs): """Perform an operation with full locking.""" self.lock() try: apply(target, args, kwargs) finally: self.unlock() def refresh(self): def lockedstuff(): curses.panel.update_panels() curses.doupdate() self.locked(lockedstuff) def isactive(self): return hasattr(self, 'stdscr') def _getpairindex(self, fg, bg): return '%d/%d' % (fg,bg) def getpair(self, fg, bg): if not self.has_color: return 0 pindex = self._getpairindex(fg, bg) self.pairlock.acquire() try: if self.pairs.has_key(pindex): return curses.color_pair(self.pairs[pindex]) else: self.pairs[pindex] = self.nextpair curses.init_pair(self.nextpair, fg, bg) self.nextpair += 1 return curses.color_pair(self.nextpair - 1) finally: self.pairlock.release() def start(self): self.stdscr = curses.initscr() curses.noecho() curses.cbreak() self.stdscr.keypad(1) try: curses.start_color() self.has_color = curses.has_colors() except: self.has_color = 0 self.oldcursor = None try: self.oldcursor = curses.curs_set(0) except: pass self.stdscr.clear() self.stdscr.refresh() (self.height, self.width) = self.stdscr.getmaxyx() self.initpairs() def stop(self): if not hasattr(self, 'stdscr'): return #self.stdscr.addstr(self.height - 1, 0, "\n", # self.getpair(curses.COLOR_WHITE, # curses.COLOR_BLACK)) if self.oldcursor != None: curses.curs_set(self.oldcursor) self.stdscr.refresh() self.stdscr.keypad(0) curses.nocbreak() curses.echo() curses.endwin() del self.stdscr def reset(self): # dirty walkaround for bug http://bugs.python.org/issue7567 in python 2.6 to 2.6.5 (fixed since #83743) if (sys.version_info[0:3] >= (2,6) and sys.version_info[0:3] <= (2,6,5)): return self.stop() self.start()
def init_banner(s): s.availablethreadframes = {} s.threadframes = {} s.tflock = MultiLock()