Как использовать цветовую палитру терминала с проклятиями
Я не могу заставить палитру цветов терминала работать с проклятиями.
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 script выводит следующий экран:
![enter image description here]()
Однако у меня больше цветов в моей палитре гномов. Как я могу получить к ним доступ в проклятиях?
Ответы
Ответ 1
Ниже я понял эксперимент на своем собственном компьютере (Ubuntu 14.04, python 3).
- Существует 256 цветов (определяемых с помощью первых 8 бит).
- Другие биты используются для дополнительных атрибутов, например выделения.
- Передача числа -1, когда цвет возвращается к цветам фона по умолчанию и переднего плана.
- Цветовая пара 0 (mod 256) фиксирована на (-1, -1).
- Цвета с 0 по 15 - это цвета палитры терминала.
Рассмотрим следующий тестовый код.
Добавьте это в свой .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)
Запуск будет выдавать следующий результат.
![screenshot]()
Как вы видите, пары цветов 1-16 являются цветовой палитрой терминала для цветов переднего плана.
Ответ 2
Терминальная "цветовая палитра" устанавливается самим терминальным приложением, чтобы отображать цвета проклятий по умолчанию для "интерпретаций", специфичных для приложения. Если вы используете красный цвет, терминал может отображать это как бордовый или вишневый красный, или если пользователь так желает, что-то совершенно другое.
Другими словами, просто используйте цвета проклятий (в сочетании с или без ярких или мигающих модификаторов), и вещи должны просто работать.
Я считаю, что вызов curses.use_default_colors()
просто делает прозрачность доступной; это прямой вызов функции use_default_colors()
ncurses API. цвета ncurses в противном случае основаны на палитре; вам нужно установить свои собственные атрибуты цвета на пару чисел с помощью curses.init_pair()
вызовов, затем выберите цветную пару с curses.color_pair()
из палитры, чтобы отобразить текст с этой конкретной парой; или создавать текстовые атрибуты непосредственно для данного вызова addstr()
.
Ответ 3
В настоящее время я помещаю эти строки перед моим script.
curses.use_default_colors()
for i in range(0, curses.COLORS):
curses.init_pair(i, i, -1);
Я не знаю, является ли это лучшим решением, но, по крайней мере, он дает некоторые цветовые пары, которые согласуются с цветовой палитрой терминала.
Ответ 4
У меня нет комментариев, чтобы представить это как комментарий к
Chiel ten Brinke отличный ответ, поэтому я предложу здесь более полезную версию своего цвета script:
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)
Ответ 5
Вы можете использовать пакет culour
, установив с помощью:
pip install culour
И затем вы можете использовать его для печати с цветом к проклятиям:
culour.addstr(window, "colored string")