Как использовать {env_name} условно в приглашении xonsh

В xonsh Оболочка, как я могу использовать имя виртуальной среды, которую я использую в качестве условия в определении $PROMPT?

(Подробнее: у меня есть виртуальная среда под названием 'xonsh' для самой оболочки xonsh, но я не хочу, чтобы этот venv показывался в приглашении, но любой другой активированный venv должен отображаться в приглашении.)

1 ответ

Решение

Начните с просмотра xonsh/prompt/env.py чтобы увидеть, как мы определяем env_name функция - так как вы используете virtualenv, вы можете сделать что-то вроде следующего в вашем xonshrc:

import os.path

def env_name_cust(pre_chars="(", post_chars=")"):
    """Extract the current environment name from $VIRTUAL_ENV 
    """
    env_path = __xonsh__.env.get("VIRTUAL_ENV", "")
    env_name = os.path.basename(env_path)
    if env_name and env_name != 'xonsh':
        return pre_chars + env_name + post_chars

Затем добавьте эту функцию к $PROMPT_FIELDS толковый словарь:

$PROMPT_FIELDS['env_name_cust'] = env_name_cust

Тогда вы можете использовать {env_name_cust} в вашем $PROMPT форматирование строки вместо значения по умолчанию {env_name}

Вы также можете использовать ${...} в качестве замены __xonsh__.env если хочешь.

Другие вопросы по тегам