【问题标题】:How to colorize Elixir iex prompt?如何为 Elixir iex 提示着色?
【发布时间】:2016-10-21 02:05:26
【问题描述】:

是否可以在iex 提示符中添加颜色和其他效果? iex 是否有资源文件(如 Ruby 的 irb.irbrc)?是否有允许即时定制的定制 API(如 Ruby 的IRB.conf)?

【问题讨论】:

    标签: elixir elixir-iex


    【解决方案1】:

    是的,是的,是的!

    要自定义提示,您需要做几件事:

    • 您的主目录中有一个.iex.exs 文件。如果此文件不存在,请创建此文件。它将在iex 启动时执行。
    • [可选] 调用 Application.put_env 以启用 ANSI。如果您的平台(例如 Windows 10)上的 iex 未检测到 ANSI 支持,您可能需要此功能。
    • 调用IEx.configure 以启用颜色并设置提示。
    • ANSI escape codes 修正光标位置。如果没有这个,使用向上/向下箭头循环浏览命令历史会将光标向右移动。 IO.ANSI 目前并未公开所有光标移动代码,但原始代码将适用于支持它们的终端。
    • IO.ANSI 格式化函数。
    • 提示文字。
    • IO.ANSI.reset 关闭所有剩余的格式。
    • 使用IO.chardata_to_string 转换为字符串。

    以下是我在终端中使用 iex 1.3.0 和在 OS X 10.11.5 和控制台中使用 iTerm2 3.0.3,在 Windows 10 上使用 GitBashConEmu 时的效果:

    # ~/.iex.exs
    Application.put_env(:elixir, :ansi_enabled, true)
    IEx.configure(
      colors: [enabled: true],
      default_prompt: [
        "\e[G",    # ANSI CHA, move cursor to column 1
        :magenta,
        "%prefix", # IEx prompt variable
        ">",       # plain string
        :reset
      ] |> IO.ANSI.format |> IO.chardata_to_string
    )
    

    此代码运行良好,但我的提示仅在第一次交互后生效:当iex 第一次启动时,它会显示其内置提示。如果我点击返回,那么我的提示就会生效。如果有人知道如何解决这个问题,请分享。

    [更新:修改为在 Windows 上更好地工作。]

    【讨论】:

    • IEx.configure colors: [ eval_result: [ :green, :bright ] ] # 我想知道为什么绿色显示为黄色?
    • @sheriffderek ANSI 颜色名称映射到在别处(例如,在终端程序中)定义的颜色表中的索引。许多终端程序支持颜色方案(例如,github.com/lysyi3m/osx-terminal-themes
    • 在 Windows 10 上配置文件的位置是 %USERPROFILE%\.iex.exs
    • %USERPROFILE% 的替代品是什么??
    • 以防万一,使用多个 Windows 终端,例如ConEmu/Cmder 和普通 cmd/VSCode,不能做 ANSI,配置可以是有条件的,例如if System.get_env("ConEmuANSI") == "ON" do ... end
    猜你喜欢
    • 2021-12-03
    • 2021-06-27
    • 2012-08-17
    • 2018-06-06
    • 2015-06-14
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多