Как я могу настроить систему завершения zsh для завершения «поддельных» файлов при некоторых обстоятельствах?
Точнее говоря, файловая система AVFS представляет архивы как каталоги, создавая «поддельный каталог» рядом с каждым архивом. По умолчанию он реплицирует всю иерархию каталогов в своей точке монтирования ~/.avfs. Кроме того, ~/.avfsдля каждого файла архива, такого как /tmp/foo.zip, помимо самого файла архива ~/.avfs/tmp/foo.zip, есть каталог, ~/.avfs/tmp/foo.zip#который отображает содержимое архива. Однако этот дополнительный каталог не отображается в списке ~/.avfs/tmp: он существует только при явном запросе. (Это похоже на работу некоторых автомонтировщиков.)
mountavfs
cd ~/.avfs/tmp/foo.zip\#
Когда я набираю команду, подобную приведенной выше, foo.zip#она не отображается как завершение ~/.avfs/tmp/, поскольку такой директории нет. Как я могу сказать zsh, что всякий раз, когда существует файл, полный путь которого $arcсовпадает с ~/.avfs/**/*.(tgz|zip)should, он должен делать вид, что существует каталог с именем ${arc}#?
(Обратите внимание, что я хочу, чтобы завершение работало с каждым вызовом _filesили _dirs, а не только с cdкомандой. Я бы предпочел не дублировать код _filesфункции, если это возможно.)
¹ и все остальные расширения
/path/to/fooвиден как ~/.avfs/path/to/foo.
avfs. Если он представляет #запись каталога по умолчанию для любых файлов, которые соответствуют строкам, которые он поддерживает, или даже магически проверяет файлы в каталоге на предмет того, что нужно для #записи, тогда завершение будет просто работать. Я полагаю, что это может привести к снижению производительности примерно так же, findкак это теперь происходит при сжатии сжатых файлов.