Come posso modificare il sistema di completamento di zsh per completare i file "falsi" in alcune circostanze?
Più precisamente, il filesystem AVFS espone gli archivi come directory creando una "directory falsa" accanto a ogni archivio. Per impostazione predefinita, replica l'intera gerarchia di directory sotto il suo punto di montaggio ~/.avfs. Inoltre, sotto ~/.avfs, per ogni file di archivio come /tmp/foo.zip, oltre al file di archivio stesso ~/.avfs/tmp/foo.zip, c'è una directory chiamata ~/.avfs/tmp/foo.zip#che espone il contenuto dell'archivio. Tuttavia questa directory extra non compare nell'elenco di ~/.avfs/tmp: esiste solo quando esplicitamente richiesto. (Questo è simile a come funzionano alcuni automounter.)
mountavfs
cd ~/.avfs/tmp/foo.zip\#
Quando digito un comando come quello sopra, foo.zip#non appare come un completamento sotto ~/.avfs/tmp/, poiché non esiste tale directory. Come posso dire a zsh che ogni volta che c'è un file il cui percorso completo $arccorrisponde ~/.avfs/**/*.(tgz|zip)¹, dovrebbe fingere che ci sia una directory chiamata ${arc}#?
(Nota che voglio che il completamento funzioni con ogni chiamata a , _fileso _dirsnon solo per il cdcomando. Preferirei non dover duplicare il codice della _filesfunzione, se possibile.)
¹ e tutto il resto delle estensioni
/path/to/fooè visibile come ~/.avfs/path/to/foo.
avfs. Se presentasse la #voce di directory predefinita per tutti i file che corrispondevano alle stringhe supportate, o persino magic testasse i file in una directory per ciò che era necessario avere una #voce, il completamento avrebbe funzionato. Immagino che si verificherebbe un calo delle prestazioni per qualcosa di simile findin quanto ora si trascinerebbe tra i file compressi.