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 $arccorrespond ~/.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, _filesou _dirspas uniquement pour la cdcommande. Je préférerais ne pas avoir à dupliquer le code de la _filesfonction, si possible.)
¹ et tout le reste des extensions
/path/to/fooest 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 findque les fichiers compressés.