Есть 3 способа включить 24-битный цвет в emacs:
(код взят из term.c
emacs)
(Примечание: простой способ проверить, работают ли цвета, — это проверить M-x list-colors-display
)
Правильный метод — установить для TERM
значение, которое поддерживает прямой цвет (через возможность RGB
terminfo), если он доступен для вашего терминала (или просто попробуйте xterm-direct).
Обычно они называются (terminalName)-direct (xterm-direct
, vte-direct
и т. д.)
например: TERM=xterm-direct emacs
, или правильно установите TERM, настроив свой терминал.
Редактировать:< /strong> В реализации xterm-direct (и связанных с ней) есть изъян. Некоторые оттенки синего обрабатываются как индексированные цвета (из-за использования одних и тех же последовательностей для rgb и индексированного цвета) и не будут отображаться правильно. Я рекомендую использовать второй способ.
/* Standard support for 24-bit colors. */
else if (tigetflag ("RGB") > 0)
{
/* ... */
tty->TN_max_colors = 16777216;
}
Другой вариант — использовать файл terminfo с нестандартными возможностями terminfo setf24
и setb24
(см. ответ https://stackoverflow.com/a/50577683/6232794). Возможно, этот метод поддерживается в более старых версиях emacs, чем два других.
const char *fg = tigetstr ("setf24");
const char *bg = tigetstr ("setb24");
/* Non-standard support for 24-bit colors. */
if (fg && bg
&& fg != (char *) (intptr_t) -1
&& bg != (char *) (intptr_t) -1)
{
tty->TS_set_foreground = fg;
tty->TS_set_background = bg;
tty->TN_max_colors = 16777216;
}
В крайнем случае вы можете установить переменную среды COLORTERM
в значение truecolor, что может работать с вашим терминалом.
/* Fall back to xterm+direct (semicolon version) if requested
by the COLORTERM environment variable. */
else if ((bg = getenv("COLORTERM")) != NULL
&& strcasecmp(bg, "truecolor") == 0)
{
tty->TS_set_foreground = "\033[%?%p1%{8}%<%t3%p1%d%e38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%d%;m";
tty->TS_set_background = "\033[%?%p1%{8}%<%t4%p1%d%e48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%d%;m";
tty->TN_max_colors = 16777216;
}
person
12Me21
schedule
27.12.2020