Как переопределить встроенную команду в xonsh? - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь переопределить команду 'ls', чтобы отображать точечные файлы в каталоге "dotfiles".

Вот мой код.

def _ls():
    if $(pwd).rstrip(os.linesep) == $DOTFILES:
        ls -Ga
    else:
        ls -G
aliases['ls'] = _ls

Этот код входит в бесконечный цикл, потому что_ls функция вызывает ls команду и вызывает _ls функцию.

Есть идеи?

1 Ответ

0 голосов
/ 08 июня 2019

Бесконечный вызов псевдонима не должен произойти - не могли бы вы открыть проблему на github.com/xonsh/xonsh/issues?

Тем временем, вот способ структурировать ваш псевдоним, который будет работать без каких-либо исправлений:

def _ls(args):
    args = args[0].replace('-', '') if args else ''
    if $(pwd).rstrip(os.linesep) == $DOTFILES:
        $(which -s ls) @(f"-{''.join(set(args + 'aG'))}")
    else:
        $(which -s ls) @(f"-{''.join(set(args + 'G'))}")
aliases['ls'] = _ls

Аргумент -s для which пропускает разрешение псевдонима, поэтому возвращает путь к фактическому ls исполняемому файлу. Тогда логика set состоит в том, чтобы убедиться, что аргументы не дублируются (хотя я не уверен, что это строго необходимо).

...