1

Я создаю пользовательские точечные файлы (.bash_profile и т. П.) Для использования с терминалами OS X Terminal.app и iTerm.app.

Я хотел бы настроить некоторые параметры в зависимости от того, поддерживает ли активное приложение 256 цветов или нет. (iTerm.app поддерживает его, а Terminal.app - нет.) Это было бы возможно с помощью оператора if (псевдокод):

if 256_COLOR_SUPPORT; then
  # Make use of all available colors (iTerm.app)
else
  # Fall back to 16-color mode (Terminal.app)
fi

Проблема в том, что я не знаю, как написать условие для оператора if .

Отсюда мой вопрос: можно ли обнаружить поддержку 256 цветов? Если так, то как?


Обновление: я узнал, как определить, в каком терминальном приложении я сейчас нахожусь:

iTerm.app:

$ echo $TERM_PROGRAM
iTerm.app

Terminal.app:

$ echo $TERM_PROGRAM
Apple_Terminal

Итак, сейчас я использую следующую проверку:

if [ $TERM_PROGRAM == "iTerm.app" ]; then
  # Groovy 256-color stuff
fi

Я все еще хотел бы знать, возможно ли определить количество доступных цветов в активном приложении. Я пробовал tput colors но это кажется бесполезным, поскольку Terminal.app лжет и возвращает 256 .

3 ответа3

2

Это можно сделать с помощью переменной TERM. Обычно это будет "xterm", но в терминале с 256 цветами вы можете установить «xterm-256color». Для этого в базе данных terminfo есть соответствующая запись, и многие программы автоматически переключаются в режим 256 цветов, когда видят «xterm-256color».

(Действительно ли Terminal.app не поддерживает 256 цветов?)

1

У меня возникла та же проблема, и я думаю, что способ принудительно установить Terminal.app в 8 бит - это перейти к:

  1. Предпочтения;
  2. Настройки;
  3. Подобрать цветовую гамму;
  4. Продвинутая вкладка.
  5. Затем установите "объявить терминал как" в xterm-color вместо xterm-256color
0

tput colors возвращает количество цветов, поддерживаемых текущим типом терминала:

matt@dell:~$ tput colors
8

Таким образом, вы можете записать это в переменную:

COLORS=$(tput colors)

и сравните эту переменную с известными / ожидаемыми значениями

if [ $COLORS -eq 256 ]; then
   ... do your 256 colour stuff
else
   ... just 16 or 8 colours (16 is 8 colours in normal and bright mode)
fi

Обновить

Ваше обновление произошло, когда я писал этот ответ.

Вы должны заставить Terminal.app использовать 8-цветный тип терминала (не знаю как)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .