IEx.Helper.h的终端友好输出,同时输出到非TTY

时间:2018-10-05 17:49:20

标签: elixir iex

在这篇Elixir Forum之后,我创建了一个Shell脚本,通过运行IEx.Helpers.h来查看Elixir文档:

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

(其中$1是脚本的命令行参数)。 (例如,命令

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

提供了模块List的文档。)

这太好了。无需再运行iex来查看文档。终端的默认格式效果很好。但是,如果我将输出通过管道传送到寻呼机(或更普遍的是,如果输出不是TTY设备),则格式会发生变化-不带ANSI颜色的纯ASCII输出。

问题:在非TTY情况下,如何配置或指示IEx.Helper.h提供相同的输出?

(看起来好像有一个函数IEx.configure可用于更改格式,但是我看不到有关非TTY输出的任何信息。另一种方法是使用一些合适的微型外部程序来创建一个伪TTY,在运行stdout命令之前将elixir重定向到该命令,但是我更愿意从Elixir方面解决输出问题。)

1 个答案:

答案 0 :(得分: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)"