Python 意外诅咒前/背景256色初始对';惯性导航与制导

Python 意外诅咒前/背景256色初始对';惯性导航与制导,python,terminal,curses,python-curses,Python,Terminal,Curses,Python Curses,在正确的诅咒/窗口初始化之后,我可以对默认颜色对进行着色,例如使用前景、-1和-1背景色,但当我开始使用bg/fg颜色值>0x8的自定义对进行自定义时,我会得到意外或错误的结果 术语的环境$Term==“xterm-256color” Python的curses.COLORS==256 Python的curses.COLOR_PAIRS==32767 Python的版本==2.7.7,诅咒==2.2 检查上面的“?”号。我遗漏了什么概念?我希望每一个256色的颜色对加上一些自定义fg/bg?对于

在正确的诅咒/窗口初始化之后,我可以对默认颜色对进行着色,例如使用前景、-1和-1背景色,但当我开始使用bg/fg颜色值>0x8的自定义对进行自定义时,我会得到意外或错误的结果

术语的环境$Term==“xterm-256color”

Python的curses.COLORS==256

Python的curses.COLOR_PAIRS==32767

Python的版本==2.7.7,诅咒==2.2


检查上面的“?”号。我遗漏了什么概念?我希望每一个256色的颜色对加上一些自定义fg/bg?

对于ncurse5,您只能有256个颜色对,因为值存储在一个8位字段中。这在ncurses常见问题解答中。

我并没有完全做到这一点,但我是一个不耐烦的家伙。。。看来我的误解与颜色对关系最为密切。我从文件中看到的每一个迹象都告诉我,我最多可以定义这么多对。相反,您似乎最多只能定义curses.COLORS-1对,所以在我的例子中,0x01到0xff。32767(0x7ff)的其他位用于自动应用的属性(突出显示、下划线等)。因此,我似乎无法定义我想要的所有颜色(基本上是每种颜色fg、bg,再加上一些自定义颜色)…但我仅限于254种。
#!/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()