Comment puis-je modifier le système d'achèvement de zsh pour terminer les «faux» fichiers dans certaines circonstances?
Plus précisément, le système de fichiers AVFS expose les archives en tant que répertoires en créant un «répertoire factice» à côté de chaque archive. Par défaut, il réplique la totalité de la hiérarchie des répertoires sous son point de montage ~/.avfs
. En outre, sous ~/.avfs
, pour chaque fichier d'archive tel que /tmp/foo.zip
, outre le fichier d'archive lui ~/.avfs/tmp/foo.zip
- même , il existe un répertoire appelé ~/.avfs/tmp/foo.zip#
qui expose le contenu de l'archive. Cependant, ce répertoire supplémentaire n'apparaît pas dans la liste de ~/.avfs/tmp
: il n'existe que sur demande explicite. (Ceci est similaire à la façon dont certains monteurs automatiques fonctionnent.)
mountavfs
cd ~/.avfs/tmp/foo.zip\#
Lorsque je tape une commande comme celle ci-dessus, foo.zip#
n'apparaît pas comme une complétion sous ~/.avfs/tmp/
, car il n'y a pas de tel répertoire. Comment puis-je dire à zsh que chaque fois qu'il y a un fichier dont le chemin complet $arc
correspond ~/.avfs/**/*.(tgz|zip)
¹, il doit prétendre qu'il existe un répertoire appelé ${arc}#
?
(Notez que je souhaite que l'achèvement fonctionne avec chaque appel de, _files
ou _dirs
pas uniquement pour la cd
commande. Je préférerais ne pas avoir à dupliquer le code de la _files
fonction, si possible.)
¹ et tout le reste des extensions
/path/to/foo
est visible en tant que ~/.avfs/path/to/foo
.
avfs
. Si elle présentait l' #
entrée de répertoire par défaut pour tous les fichiers correspondant aux chaînes prises en charge, ou même si Magic testait les fichiers d'un répertoire pour déterminer #
s'il était nécessaire d'avoir une entrée, la finalisation fonctionnerait simplement. J'imagine que les performances pourraient être affectées de la même manière find
que les fichiers compressés.