Uma resposta falsa parece insuficiente para essa pergunta falsa; o suporte interno ao zsh para diretórios automontados opera em diretórios ( fake-files dir:names
) e não em padrões de arquivo. Isso é útil para adicionar arquivos nomeados específicos a um diretório, o que pode ser adequado para automount
ou sshfs
ou NetApp .snapshot
type setups em que o diretório a ser montado é um nome estático conhecido, ALAS
.
autoload -U compinit
compinit
zstyle ':completion:*' fake-files $HOME/.avfs:'ALAS POOR YORICK'
zshall(1)
diz que "nomes" são strings e experimentos indicam metacaracteres (por exemplo, #
ou \#
ou '*(e:"echo hi":)'
) "não funcionam" de várias maneiras, então não há como saber coloque um glob na porção de nomes da instrução fake-files
. (Descobrir Src/Zle/computil.c
pode revelar exatamente o que os nomes podem ser, mas isso seria mais trabalho.) (Além disso, usar globs recursivos na posição do diretório para nomear os arquivos archive não voou, mas, novamente, será necessário o mergulho C para ver quanto fake-files
permite que você se dê bem.)
Com compdef
, pode-se listar as conclusões do diretório .avfs
:
compdef '_files -g $HOME/.avfs/\*' -p \^
function andthehash {
reply=($REPLY $REPLY\#)
}
compdef "_files -g $HOME/.avfs/'*(+andthehash)'" -p \^
Exceto que isso falhará, pois só mostrará os arquivos #
quando isso não for relevante e, portanto, não poderá ser concluído neles. (Há usos produtivos para este formulário, embora não para este caso.)
Usar zstyle
aproxima você, com o seguinte .zshrc
:
autoload -U compinit
compinit
function UnderAVFS {
local pdir
[[ -z $1 ]] && return 1
pdir=$1:a
[[ ! -d $pdir ]] && pdir=$pdir:h
[[ ! -d $pdir || $pdir == . ]] && return 1
while [[ $pdir != / ]]; do
[[ $pdir == $HOME/.avfs ]] && return 0
pdir=$pdir:h
done
return 1
}
function AVFSExtras {
if UnderAVFS $REPLY; then
reply=($REPLY)
# TODO embiggen list of archive suffixes
[[ $REPLY == *.(bz2|tbz2) ]] && reply+=($REPLY\#)
fi
}
# Try to match avfs, otherwise the default pattern. Probably could greatly
# benefit from caching, to avoid hits on UnderAVFS function.
zstyle ':completion:*' file-patterns '*(+AVFSExtras):avfs-files' '%p:all-files'
No entanto, ele só pode completar até o \#/
bit (em um squeeze debian virt com uma configuração avfs padrão), mas não no sistema de arquivos virtual para um archive, portanto será necessário um trabalho adicional para aba completa no arquivos. Eu estou supondo via _call_program ... ls
ou algo ao longo dessas linhas para conclusões no \#
bit, a menos que haja uma maneira mais elegante de con zsh
em acreditar que diretórios que não existem fazem.
Más notícias! A conclusão não passa de _path_files
para os diretórios falsos; Eu suspeito que isso seja relacionado a globalização de zsh. Tanto o zsh 4.something on quanto o zsh 5.0.8 exibem o problema. Portanto, suspeito que uma correção completa exigiria patches para _path_files
ou para escrever algo diferente que, de outra forma, seria concluído nesses diretórios falsos. Um rastreamento de depuração de conclusão pode ser gerado digitando ls /root/.avfs/root/sometar.gz\#/
e, em seguida, no final dessa digitação, control-x
e, em seguida, ?
, assumindo bindkey -e
e _complete_debug
vinculado ao dito keycombo, se alguém quiser se aprofundar por que isso está falhando.