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 $arc
corrisponde ~/.avfs/**/*.(tgz|zip)
¹, dovrebbe fingere che ci sia una directory chiamata ${arc}#
?
(Nota che voglio che il completamento funzioni con ogni chiamata a , _files
o _dirs
non solo per il cd
comando. Preferirei non dover duplicare il codice della _files
funzione, 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 find
in quanto ora si trascinerebbe tra i file compressi.