/offlineimap/head: changeset 351

Fixed color on FreeBSD, and exceptions for non-color terminals
This commit is contained in:
jgoerzen 2003-01-11 00:47:35 +01:00
parent 9f76bac96f
commit 897e93700d
2 changed files with 39 additions and 11 deletions

View File

@ -1,3 +1,12 @@
offlineimap (3.99.8) unstable; urgency=low
* This is a 4.0 TRACK release, and may be unstable or in flux!
* Fixed several problems with the Curses interface: colors showing
up very weird on FreeBSD and exceptions when running on non-color
terminals.
-- John Goerzen <jgoerzen@complete.org> Fri, 10 Jan 2003 11:46:24 -0600
offlineimap (3.99.7) unstable; urgency=low
* This is a 4.0 TRACK release, and may be unstable or in flux!

View File

@ -29,12 +29,18 @@ acctkeys = '1234567890abcdefghijklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-=;/.,'
class CursesUtil:
def __init__(self):
self.pairs = {self._getpairindex(curses.COLOR_WHITE,
curses.COLOR_BLACK): 0}
self.start()
self.nextpair = 1
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()
@ -63,6 +69,8 @@ class CursesUtil:
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:
@ -96,6 +104,7 @@ class CursesUtil:
self.stdscr.clear()
self.stdscr.refresh()
(self.height, self.width) = self.stdscr.getmaxyx()
self.initpairs()
def stop(self):
if not hasattr(self, 'stdscr'):
@ -200,7 +209,10 @@ class CursesThreadFrame:
def display(self):
def lockedstuff():
self.window.addstr(self.y, self.x, '.', self.color)
if self.getcolor() == 'black':
self.window.addstr(self.y, self.x, ' ', self.color)
else:
self.window.addstr(self.y, self.x, '.', self.color)
self.c.stdscr.move(self.c.height - 1, self.c.width - 1)
self.window.refresh()
self.c.locked(lockedstuff)
@ -406,9 +418,12 @@ class Blinkenlights(BlinkenBase, UIBase):
s.c.unlock()
def setupwindow_drawbanner(s):
s.bannerwindow.bkgd(' ', curses.A_BOLD | \
s.c.getpair(curses.COLOR_WHITE,
curses.COLOR_BLUE))
if s.c.has_color:
color = s.c.getpair(curses.COLOR_WHITE, curses.COLOR_BLUE) | \
curses.A_BOLD
else:
color = curses.A_REVERSE
s.bannerwindow.bkgd(' ', color) # Fill background with that color
s.bannerwindow.addstr("%s %s" % (version.productname,
version.versionstr))
s.bannerwindow.addstr(0, s.bannerwindow.getmaxyx()[1] - len(version.copyright) - 1,
@ -417,7 +432,11 @@ class Blinkenlights(BlinkenBase, UIBase):
s.bannerwindow.noutrefresh()
def setupwindow_drawlog(s):
s.logwindow.bkgd(' ', s.c.getpair(curses.COLOR_WHITE, curses.COLOR_BLACK))
if s.c.has_color:
color = s.c.getpair(curses.COLOR_WHITE, curses.COLOR_BLACK)
else:
color = curses.A_NORMAL
s.logwindow.bkgd(' ', color)
for line, color in s.text:
s.logwindow.addstr("\n" + line, color)
s.logwindow.noutrefresh()
@ -501,7 +520,7 @@ if __name__ == '__main__':
x = Blinkenlights(None)
x.init_banner()
import time
time.sleep(10)
time.sleep(5)
x.c.stop()
fgs = {'black': curses.COLOR_BLACK, 'red': curses.COLOR_RED,
'green': curses.COLOR_GREEN, 'yellow': curses.COLOR_YELLOW,
@ -536,7 +555,7 @@ if __name__ == '__main__':
win4.refresh()
x.stdscr.refresh()
import time
time.sleep(40)
time.sleep(5)
x.stop()
print x.has_color
print x.height