завершение zsh: использовать пути из определенного каталога, а не из текущего

У меня есть пользовательская функция, и zsh дает мне завершение табуляции по умолчанию для нее. Он завершает пути из текущего рабочего каталога. Это здорово, но я бы хотел, чтобы завершение (только для этой конкретной функции) вело себя немного иначе: как если бы я всегда находился в определенном каталоге.

Можно ли этого достичь с минимальными усилиями? Я бы хотел что-нибудь вроде compdef myfunc="cd /my/dir"...

Чтобы добавить контекст, моя функция выглядит так:

play() {
    (
        cd ~/Music/mp3 &&
        do-sth $1 &&
        open -a itunes $1
    )
}

и я хотел бы иметь возможность делать такие вещи, как:

$ ls ~/Music/mp3
Slayer
$ cd ~
$ play S<tab>  # expands to "Slayer"

person Maciej Konieczny    schedule 07.11.2011    source источник


Ответы (1)


У меня есть аналогичное решение для переключения каталогов на мои проекты кода. Что-то вроде этого может помочь вам:

play() { open -a itunes ~/Music/mp3/$@; }
compctl -/ -W ~/Music/mp3 play
person Frost    schedule 06.12.2011