Некоторые ссылки:
- Код выхода Xterm:
COLORFGBG
переменная окружения (используется Rxvt, но не многими другими ...):
Он установлен как <foreground-color>:[<other-setting>:]<background-color>
,
(<other setting>:
необязательно), а если <background-color>
в {0,1,2,3,4,5,6,8}, то у нас есть темный фон.
- Vim:
- Emacs ... (background-mode) (я думаю, что он использует escape-код)
- Смежные вопросы / доклады / обсуждения:
например. некоторый связанный фрагмент из Neovim Issue 2764 :
/*
* Return "dark" or "light" depending on the kind of terminal.
* This is just guessing! Recognized are:
* "linux" Linux console
* "screen.linux" Linux console with screen
* "cygwin" Cygwin shell
* "putty" Putty program
* We also check the COLORFGBG environment variable, which is set by
* rxvt and derivatives. This variable contains either two or three
* values separated by semicolons; we want the last value in either
* case. If this value is 0-6 or 8, our background is dark.
*/
static char_u *term_bg_default(void)
{
char_u *p;
if (STRCMP(T_NAME, "linux") == 0
|| STRCMP(T_NAME, "screen.linux") == 0
|| STRCMP(T_NAME, "cygwin") == 0
|| STRCMP(T_NAME, "putty") == 0
|| ((p = (char_u *)os_getenv("COLORFGBG")) != NULL
&& (p = vim_strrchr(p, ';')) != NULL
&& ((p[1] >= '0' && p[1] <= '6') || p[1] == '8')
&& p[2] == NUL))
return (char_u *)"dark";
return (char_u *)"light";
}
О COLORFGBG
env, от Gnome BugZilla 733423 :
Из нескольких терминалов, которые я только что попробовал на linux, только urxvt и konsole установили его (те, которые не: xterm, st, терминология, pterm). Konsole и Urxvt используют разные синтаксис и семантику, т.е. для меня konsole устанавливает его на «0; 15» (хотя я использую цветовую схему «Черный на светло-желтом» - так почему бы не «по умолчанию» вместо «15»?), тогда как мой urxvt устанавливает его в «0; по умолчанию; 15» (на самом деле он черный на белом - но почему три поля?). Так что ни в одном из этих двух значений значение не соответствует вашей спецификации.
Это некоторый собственный код, который я использую ( через ):
def is_dark_terminal_background():
"""
:return: Whether we have a dark Terminal background color, or None if unknown.
We currently just check the env var COLORFGBG,
which some terminals define like "<foreground-color>:<background-color>",
and if <background-color> in {0,1,2,3,4,5,6,8}, then we have some dark background.
There are many other complex heuristics we could do here, which work in some cases but not in others.
See e.g. `here </1473847/est-li-sposob-opredelit-tsvet-fona-terminala>`__.
But instead of adding more heuristics, we think that explicitly setting COLORFGBG would be the best thing,
in case it's not like you want it.
:rtype: bool|None
"""
if os.environ.get("COLORFGBG", None):
parts = os.environ["COLORFGBG"].split(";")
try:
last_number = int(parts[-1])
if 0 <= last_number <= 6 or last_number == 8:
return True
else:
return False
except ValueError: # not an integer?
pass
return None # unknown (and bool(None) == False, i.e. expect light by default)