Введение
Мой вопрос возникает из-за необходимости понять, почему у меня сейчас (после нескольких испытаний) Terminal и tmux, поддерживающий 256 цветов, и tput colors
сказано, что их всего 8.
Фон
Начнем с самого начала.
Я использую Ubuntu box, Guake , tmux , Vim и мне нравится тема Solarized . Они выглядели довольно ужасно, поэтому я решил включить поддержку 256 цветов и немного поиграть.
Посмотрим, что будет с моим терминалом . tput colors
говорит, что есть 8 цветов. Я лично установил их на фиолетовый, слева, и, конечно, справа у нас есть 2 разных оттенка синего. $TERM
говорит xterm
. (Чтобы покрасить ls
я eval
это по моему .bashrc
.)
Vim также выглядит хорошо, несмотря на то, что я вызываю его с 256
флагом в среде, где 256 цветов не поддерживаются.
set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized
Единственный парень, который жалуется на ограниченное цветовое пространство, это tmux . Вызов tmux
дает «неправильные» ожидаемые результаты.
Но колл tmux
с -2
флагом заставляет все работать как по волшебству .
Теперь единственное, что я понимаю, это то, что -2
эквивалентно export TERM=screen-256color
( источник ).
Guake ведет себя аналогично терминалу, и оба они отвечают xterm
на вопрос echo $TERM
.
Вопрос
В принципе, кто-нибудь понимает, почему все работает, даже если не должно?
- Я садист, что жалуюсь, почему все работает? Может быть.
- Есть ли лучшая причина? Конечно: я хотел бы исправить появление других коробок Ubuntu в моем офисе, и я хотел бы понять, почему все работает или не работает.
Дополнительные эксперименты
Запуск этого скрипта (слегка измененного) в my xterm
дает следующий результат: 256 цветов, но только 16 отображаются правильно.
Затем, меняя профиль терминала, меняются и эти 16 цветов.
Следующие тесты
Слева направо, сверху вниз, у нас есть цветовая тема Solarized , dircolor
ansi-dark
а 256dark
затем цветовая схема по умолчанию ( Tango ) dircolor
ansi-dark
и 256dark
.
Замечание : в теории цветовая гамма dircolor
ansi-dark
на соляризации должна соответствовать dircolor
256dark
. Это явно не происходит для конкретных перечисленных файлов. Вместо этого это происходит, когда в рабочем каталоге есть папки , текстовые файлы и символические ссылки . Вывод : не так много внимания уделено кодированию 256dark
цветов.
Предварительные выводы
xterm
поддерживает 256 цветов, несмотря на то, что tput colors
говорит. Программы могут ссылаться на ansi
палитру (настраиваемую пользователем) или определять свои цвета, выбирая в общей сложности 256 цветов.
tput colors
это ненадежный тест. Не могли бы вы проверить мои предварительные выводы ?tput colors
может возвращаться только одно значение, а в терминалах, которые поддерживают любой из 2,8,16,88 или 256 цветов, возвращается только первое значение (8 в вашем случае). Чтобы получить истинное значение, используйте скрипт из моего последнего комментария. Что это возвращает?Ответы:
В FAQ по tmux есть информация о поддержке 256 цветов .
Определить количество цветов, поддерживаемых терминалом, к сожалению, не так просто по историческим причинам. См. Проверка количества цветов, поддерживаемых моим эмулятором терминала, для объяснения. Это значит, что
Когда вы находитесь в tmux, терминалом, с которым вы взаимодействуете, является tmux. Он не поддерживает все управляющие последовательности xterm. В частности, он не поддерживает
OSC 4 ; …
управляющую последовательность для запроса или установки значений цвета. Вы должны использовать это при непосредственном запуске в xterm, вне tmux.Если вы запускаете
tmux -2
, то tmux запускается с поддержкой 256 цветов, даже если он не думает, что ваш терминал поддерживает 256 цветов (что довольно распространено).По умолчанию tmux рекламирует себя
screen
без поддержки 256 цветов. Вы можете изменить значениеTERM
в,.tmux.conf
чтобы указать поддержку 256 цветов:Вы можете использовать
TERM=xterm-256color
илиTERM=screen-256color
на Ubuntu. Эти значения вызовут проблемы только в том случае, если вы войдете на удаленный компьютер, у которого нет записей termcap / terminfo для этих имен. Вы можете скопировать записи в свой домашний каталог на удаленной машине; это работает с большинством современных реализаций terminfo.источник
xterm
мне удалось показать 256 цветов, хотяtput colors
он и говорил 8. Я думаю, что ответ на этот конкретный вопрос был адресован @terdon в его комментариях к самому вопросу.set -g default_terminal "screen-256color"
команды недостаточно для включения 256 цветов в tmux . Вам нужноalias tmux='export TERM=screen-256color; /usr/bin/tmux'
( ссылка ).tmux -2
в соответствии с моим предыдущим параграфом, если tmux не думает, что ваш текущий терминал поддерживает 256 цветов, поэтомуalias tmux='tmux -2'
имеет смысл.TERM=xterm-256color tmux
, что разумно, в отличие отTERM=screen-256color tmux
.tmux -2
лучше, потому что он работает, даже еслиscreen-256color
не находится в локальной базе данных terminfo.Я впечатлен тем, насколько богато отформатированы и подробны ответы (и вопрос!). Хотя они предоставляют ценную информацию и решения об инструментах, которые вы упомянули, они дают очень мало информации о том, что происходит , и, самое главное, почему (несколько) вещи работают для некоторых инструментов, когда они предположительно не должны.
Итак, вот несколько идей по вашим основным вопросам:
Что поддерживает терминал и что он сообщает, это разные вещи. Например, терминал Gnome способен отображать 256 цветов, но он объявляет себя (через
$TERM
переменную) в качествеxterm
эмулятора (8 цветов).Инструменты, подобные тому,
tput
чтоTERM
установлено:tput colors
могут печатать 8, аenv TERM=xterm-256color tput colors
печатать 256, независимо от того, поддерживает ли ваш терминал такие возможности.vim
также следуйтеTERM
по умолчанию, но, как вы сказали, чтобы использовать 256 цветов (через флаг илиset t_Co=256
), он будет использовать 256 цветов. И это работает, потому что ваш терминал на самом деле поддерживает это.tmux
Так же, как Gnome Terminal, также по умолчанию сообщает о себе как 8-цветный терминал. Но, в отличие от Gnome Terminal, он позволяет использовать только 256 цветов, если вы используете-2
флаг, что также позволяет ему сообщать о себе как оxterm-256color
совместимом эмуляторе.xterm
, как и в программном обеспечении эмулятора терминала для X11 , точно поддерживает 256 цветов. Но,xterm
как вTERM=xterm
8-цветном "стандарте". Это означает возможности оригиналаxterm
. Когда он был обновлен для поддержки 256 цветов, давным-давно он придумалxterm-256color
термин для этого.Итак, все сводится к:
Какие возможности ваш терминал на самом деле поддерживает (и включен для этого)
Как он сообщает о таких возможностях в окружающую среду через
TERM
Как инструменты интерпретируют
TERM
и корректируют себя соответственно.Как вы можете сделать из вышеизложенного, избегайте использования
export TERM=xterm-256color
ваших~/.bashrc
и подобных сценариев . Поскольку эти файлы выполняются независимо от того, какой терминал вы на самом деле используете, все ваши терминалы, включая удаленные соединения из Windows с Putty, консольный терминал Linux и т. Д., Будут сообщать о совместимости с xterm-256color. Что может быть правдой для некоторых, но, конечно, не для всех. Напримерgetty
, консоль linux, к которой вы обращаетесьCTRL+ALT+1..6
, этого не делает.Терминалы должны сообщать о себе как о «стандарте», с которым они наиболее совместимы. Если вы знаете, что они могут обрабатывать 256 цветов, настройте их для рекламы как таковой.
Последнее, но не менее важное, удивительное чтение
TERM
и 256 цветов:http://blog.sanctum.geek.nz/term-strings/
http://blog.sanctum.geek.nz/256-colour-terminals/
источник
Я предоставлю дополнительный ответ, который касается только ваших дополнительных экспериментов, если они связаны с цветами солнечного каталога .
Настроить
У нас такой же цветовой вывод из тестового скрипта. Единственное отличие состоит в том , что я использовал
lxterminal
на Openbox с тонким , xcompmgr и без СД. Поэтому я не могу легко установить пользовательскую палитру, как вы сделали, так как этот эмулятор терминала не предлагает эти настройки в графическом интерфейсе, и для него нет специальной темы (они существуют только для нескольких эмуляторов терминала). Поэтому я просто использую некоторые полупрозрачные, неокрашенные терминалы и этот синий в качестве цвета переднего плана на синем фоне Gentoo . Поскольку я не могу использовать ANSI- версии цветных файлов, я сосредоточился исключительно на получении результатов,dircolors.256dark
то есть на «ухудшенной» простой версии.Я использовал следующую соответствующую конфигурацию и средний шрифт inconsolata :
Dircolors
На рисунке ниже показано, что происходит внутри и снаружи tmux с этими настройками. Первая треть слева показывает неокрашенные внутренние оконные окна, сложенные вертикально (3). Справа у вас есть сборка tmux, показывающая те же идентичные программы. (3) Я также включил соляризованную
xterm
1, показывающую nano, используя файл .Xresources, включенный в полный пакет (и сэмплируя егоxrdb -load ~/.Xresources
):пожалуйста, щелкните правой кнопкой мыши / просмотрите изображение для проверки в полном разрешении
Первый терминал в верхнем левом углу демонстрирует цвета каталога по умолчанию. Чуть ниже - деградированная соляризованная версия. За исключением розового на синем фоне для
.c
файлов, которые я добавил, он идентичен тому, что ожидается от этого (см. Изображение ниже для справки). По сравнению со значениями по умолчанию, он основывается на расширенных атрибутах, таких как полужирный / светлый / обратный и т. Д., И цвета, очевидно, отличаются. Цвет по умолчанию для.txt
файлов во многих дистрибутивах зеленый, но вместо солнечного он должен быть серым . Файл ANSI, отображающий файл с расширением TXT зеленого цвета, либо неправильно отображается, либо не отображается вообще. Результаты с правой стороны, которые вы показали, являются правильными (256 dark) по отношению к следующей ссылке:соляризации «деградирует» dircolors ссылка на карту
наблюдения
В конфигурации, которую я использовал, результаты выглядят одинаково внутри и снаружи tmux (я перевернул комментарии (#) в vi, но в остальном плагин ведет себя так, как должен, и мультиплексор на это не влияет). Шрифты играют огромную роль в определении функций соляризации , и хороший шрифт необходим для максимального удобства . В соляризации цвета каталога с помощью 256dark файла соответствовать ссылке и не требует специальной настройки эмуляции терминала.
Заключение
На самом деле рендеринг ANSI цветов каталога просто полностью отличается от деградации соляризации (256 dark). Настолько, что под ANSI
.txt
файлы зеленые. Один не может быть использован для проверки рендеринга другого. Оба решения нуждаются в разной конфигурации и дают совершенно разные результаты.источник
ansi-dark
правильный вывод (так как он использует не деградированную версию). Затем, если вы берете в качестве ссылки результат256dark
, то у вас обратное мышление.