Как раскрасить подсказку Elixir iex?

Можно ли добавить цвет и другие эффекты к приглашению iex? Есть ли у iex файл ресурсов (например, _ 3_ для irb Ruby)? Есть ли API настройки, который позволяет настраивать запросы (например, Ruby _ 5_)?


person jwfearn    schedule 19.06.2016    source источник


Ответы (1)


Да, да и да!

Чтобы настроить подсказку, вам понадобится несколько вещей:

Вот что у меня работает с iex 1.3.0 в Терминале и iTerm2 3.0.3 в OS X 10.11 .5, а в консоли - GitBash и ConEmu в Windows 10:

# ~/.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 отображается его встроенное приглашение. Если я нажму «Return», мое приглашение вступит в силу. Если кто-нибудь знает, как это исправить, поделитесь, пожалуйста.

[ОБНОВЛЕНО: модифицировано для лучшей работы в Windows.]

person jwfearn    schedule 19.06.2016
comment
IEx.configure colors: [eval_result: [: green,: bright]] # Интересно, почему зеленый цвет отображается как желтый? - person sheriffderek; 26.08.2016
comment
@sheriffderek Названия цветов ANSI сопоставляются с индексами в таблице цветов, определенной в другом месте (например, в терминальной программе). Многие терминальные программы поддерживают цветовые схемы (например, github.com/lysyi3m/osx-terminal-themes) - person jwfearn; 27.08.2016
comment
в Windows 10 расположение файла конфигурации %USERPROFILE%\.iex.exs - person Dmitry Ledentsov; 28.02.2017
comment
Что заменяет% USERPROFILE% ?? - person whoadityanawandar; 27.08.2017
comment
на всякий случай используется несколько оконных терминалов, например ConEmu / Cmder и простой cmd / VSCode, которые не могут выполнять ANSI, конфигурация может быть условной, например if System.get_env("ConEmuANSI") == "ON" do ... end - person Dmitry Ledentsov; 13.12.2019