Удобный для терминала вывод для IEx.Helper.h при выводе на что-то не TTY

Следуя этому сообщению Elixir Forum, я создал сценарий оболочки для просмотра документации Elixir, запустив IEx.Helpers.h:

elixir -e "require IEx.Helpers; IEx.Helpers.h($1)"

(где $1 — аргумент командной строки скрипта). (Например, команда

elixir -e "require IEx.Helpers; IEx.Helpers.h(List)"

дает документацию для модуля List.)

Это супер красиво. Больше не нужно запускать iex для просмотра документации. Форматирование по умолчанию для терминала работает хорошо и красиво. Но если я передаю вывод на пейджер (или, в более общем случае, если вывод не является устройством TTY), форматирование меняется — обычный вывод ASCII без цветов ANSI.

Вопрос: как мне настроить или указать IEx.Helper.h для предоставления идентичного вывода в случае отсутствия TTY?

(Похоже, есть функция IEx.configure, которую можно использовать для изменения форматирования, но я ничего не видел о выводе без TTY. Другой способ — использовать какую-нибудь подходящую крошечную внешнюю программу для создания псевдо-TTY, перенаправляя stdout на перед запуском команды elixir... но я бы предпочел решить проблему вывода со стороны Эликсира.)


person FooF    schedule 05.10.2018    source источник


Ответы (1)


Можно применить цвета независимо от того, какое устройство вывода используется, обманув IEx.Config.colors_enabled?/1 не использовать сложную проверку с IO.ANSI.enabled?/0:

elixir -e "
  Application.put_env(:iex, :colors, [enabled: true]);
  require IEx.Helpers;
  IEx.Helpers.h(List)"
person Aleksei Matiushkin    schedule 08.10.2018