Почему эмуляторы терминала Linux не поддерживают полные цвета?

12

Я только что обновил свой gnome-терминал, чтобы он использовал 256 цветов, но я немного озадачен тем, почему эмулятор терминала не может поддерживать полную палитру, которую обеспечивает любая современная среда рабочего стола. Я предполагаю, что есть техническая причина для этого, но я не знаю об этом.

Стефано Борини
источник
2
«Терминал» немного двусмысленный ... Вы говорите о « виртуальных терминалах» («VT»), встречающихся в F1 - F6 во многих Linux / Unix-системах, « эмуляторе терминала », который вы используете в X, так что Вам не нужно использовать VT, или вы имеете в виду настоящий «терминал» - простую комбинацию экрана с клавиатурой (без или с минимальной вычислительной мощностью), которая подключена к реальному компьютеру через кабель?
Баард Копперуд
17
И виртуальные терминалы, и эмуляторы терминалов эмулируют устаревшие терминалы со стандартизованными возможностями (например, vt100). Когда эти терминалы были рядом, память была гораздо более серьезной проблемой; так что вы можете выбирать между большими пикселями / большими буквами и многими цветами, или маленькими пикселями / маленькими буквами и несколькими цветами - любая комбинация займет небольшую память, выделенную для представления точек на экране. Они предназначались для текстовых программ, и было гораздо важнее разместить много текста (много длинных строк), чем много цветов. Вам не нужно много цветов, чтобы «кодировать» различные типы текста (например, полужирный / курсив).
Баард Копперуд
3
@BaardKopperud Это должен быть ответ.
CVn
2
Да, я бы предложил Baard опубликовать этот комментарий как ответ, потому что это в основном то, о чем просил OP. В конечном счете, однако, кто-то мог разработать vt100 + (или что-то еще) и поддержать все, что он хотел. Полагаю, никто этого не делал, потому что если вам нужна впечатляющая графика, вам, вероятно, будет интереснее запускать ее под X, чем под терминалом.
Братчли
3
Как вопросы, спрашивая "как я ...?" вместо "почему бы и нет ...?" имеет больше смысла для меня. Ответ на вопрос "почему не так?" может быть «вы не смогли сделать это».

Ответы:

7

Нет никаких технических причин, по которым это невозможно. Однако не так много причин, почему это не практично. С ограниченным количеством экранного пространства, которое символы представляют на экране, вам будет трудно найти более 256 одновременных цветов на экране.

Насколько я знаю, терминальные клиенты используют индексированное цветовое пространство. Одна из причин этого заключается в том, что в простейшей форме 256 индексированных цветов можно описать одним байтом. В то время как цветовое пространство RGB требует двух или трех байтов. Учитывая, как цвета кодируются в терминальном потоке, каждый цвет будет по крайней мере два байта + любая интеллектуальная разметка. Это может не быть большой проблемой памяти, однако, когда в сетевом потоке в реальном времени это может привести к задержке, особенно (поправьте меня, если я ошибаюсь), каждый символ отправляется в своем собственном пакете.

Фредрик Андерссон
источник
2

Там действительно нет текущей причины. Кроме, возможно, коды перехода были добавлены только несколько лет назад, чтобы поддержать истинный цвет. Многие терминалы теперь поддерживают 24-битные цвета, см. Https://gist.github.com/XVilka/8346728.

Кевин Тиндалл
источник