端末のカラーパレットをcursesで動作させることができません。
import curses
def main(stdscr):
curses.use_default_colors()
for i in range(0,7):
stdscr.addstr("Hello", curses.color_pair(i))
stdscr.getch()
curses.wrapper(main)
このpythonスクリプトにより、次の画面が表示されます。
しかし、私はgnome-terminalパレットにもっと色があります。 curses内でそれらにアクセスするにはどうすればよいですか?
以下は、自分のPCでの実験によってわかりました(Ubuntu 14.04、python 3)。
次のテストコードを検討してください。これをあなたの.bashrc
に追加してください:
# Set proper $TERM if we are running gnome-terminal
if [ "$COLORTERM" == "gnome-terminal" ]
then
TERM=xterm-256color
fi
これをpythonファイルに入れて実行します。
import curses
def main(stdscr):
curses.start_color()
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i + 1, i, -1)
try:
for i in range(0, 255):
stdscr.addstr(str(i), curses.color_pair(i))
except curses.ERR:
# End of screen reached
pass
stdscr.getch()
curses.wrapper(main)
実行すると、次の出力が生成されます。
ご覧のとおり、色のペア1〜16は、前景色のターミナルカラーパレットです。
端末の「カラーパレット」は、端末アプリケーション自体によって設定され、デフォルトのcurses色をアプリケーション固有の「解釈」にマップします。赤を使用する場合、端末はそれをバーガンディまたはチェリーレッドとして表示するか、ユーザーが望む場合はまったく異なるものを表示するように選択できます。
言い換えれば、cursesの色(brightモディファイアとblinkモディファイアの有無にかかわらず)を使用するだけで、問題なく機能するはずです。
curses.use_default_colors()
を呼び出すと、透過性が利用可能になるだけだと思います。 use_default_colors()
ncurses API関数 への直接の呼び出しです。それ以外の場合、ncursesの色はパレットベースです。 curses.init_pair()
Calls でペア番号ごとに独自のカラー属性を設定し、次に curses.color_pair()
でカラーペアを選択する必要があります特定のペアのテキストを表示するパレット。または、指定されたaddstr()
呼び出しのテキスト属性を直接作成します。
現在、これらの行をスクリプトの前に配置しています。
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i, i, -1);
それが最善の解決策かどうかはわかりませんが、少なくとも、ターミナルのカラーパレットと一致するいくつかのカラーペアが得られます。
Chiel ten Brinkeの素晴らしい答えに対するコメントとしてこれを送信するための担当者がいないので、ここで彼のカラースクリプトのより便利なバージョンを提供します。
import curses
def main(stdscr):
curses.start_color()
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i + 1, i, -1)
stdscr.addstr(0, 0, '{0} colors available'.format(curses.COLORS))
maxy, maxx = stdscr.getmaxyx()
maxx = maxx - maxx % 5
x = 0
y = 1
try:
for i in range(0, curses.COLORS):
stdscr.addstr(y, x, '{0:5}'.format(i), curses.color_pair(i))
x = (x + 5) % maxx
if x == 0:
y += 1
except curses.ERR:
pass
stdscr.getch()
curses.wrapper(main)
culour
パッケージを使用するには、次のようにインストールします。
pip install culour
そして、あなたはそれを呪いに色で印刷するために使うことができます:
culour.addstr(window, "colored string")