2015-04-09 2 views
0

После правильной инициализации проклятий/окон я могу использовать цветные пары color_pair, например. используя передние, -1 и -1, цвета фона, но когда я начинаю настраивать пары, используя пользовательскую пару #s с значениями цветов bg/fg> 0x8, я получаю неожиданные или неправильные результаты.Неожиданные проклятия fore/background 256 color init_pair'ing

термин окр $ TERM == 'Xterm-256-цветные'

Пайтон curses.COLORS == 256

Пайтон curses.COLOR_PAIRS == 32767

Пайтон версия == 2.7.7 , проклинает == 2,2

#!/usr/bin/env python 
"""Dumbed down code to follow:""" 

import curses 

# init 
window = curses.initscr() 
curses.start_color() 
curses.use_default_colors() 

# assign 'default' pairs, pairs are assigned +1 MORE than the color value! 
for each in range(curses.COLORS): 
    curses.init_pair(each + 1, each, -1) 
for each in range(curses.COLORS): 
    curses.init_pair(each + 1 + curses.COLORS, -1, each) 

# custom/non-default pair 
curses.init_pair(1 + 2*curses.COLORS, 0x0f, 0x15) # white on cobalt according to colors above ??? 
curses.init_pair(4321, 0xd5, 0x81) # hot pink on violet according to colors above ??? 

# setup 
curses.meta(1) 
curses.noecho() 
curses.cbreak() 
window.leaveok(1) 
window.scrollok(0) 
window.keypad(1) 
window.refresh() 

# print all pairs in their colors 
for each in range(1 + 2*curses.COLORS): 
    window.addstr(hex(each).join(' '), curses.color_pair(each)) # these are all perfect 
window.addstr(hex(1 + 2*curses.COLORS).join(' '), curses.color_pair(1 + 2*curses.COLORS)) # nope: this prints 0,-1: black on default ??? 
window.addstr(hex(4321).join(' '), curses.color_pair(4321)) # nope: this prints 0xe1,-1: pinkish on default ??? 

# update 
window.noutrefresh() 
curses.doupdate() 

# pause 
window.getch() 

# teardown 
window.leaveok(0) 
window.scrollok(1) 
window.keypad(0) 
curses.echo() 
curses.nocbreak() 
curses.endwin() 

Проверьте "???" S выше. Какую концепцию мне не хватает? Я хотел бы иметь цветовую пару для каждого цвета singe 256 плюс несколько пользовательских fg/bg?

+0

Я не совсем туда, но я нетерпеливый человек ... Похоже, мое недопонимание наиболее тесно связано с COLOR_PAIRS. Каждое показание, которое я читал в документах, мне подсказывало, что я могу определить до многих пар. Вместо этого кажется, что вы можете определить только до curses.COLORS-1 пары, поэтому в моем случае 0x01 через 0xff. Другие биты 32767 (0x7ff) предназначены для атрибутов (подсветка, подчеркивание и т. Д.), Которые автоматически применяются. Поэтому я не могу, по-видимому, определить все цвета, которые я хочу (по существу, каждый цвет fg, bg, а также некоторые пользовательские) ... но ограничено 254. – 5upa

ответ