Jak mogę ulepszyć system kompletacji zsh, aby w niektórych okolicznościach uzupełniać „fałszywe” pliki?
Dokładniej, system plików AVFS udostępnia archiwa jako katalogi, tworząc „fałszywy katalog” obok każdego archiwum. Domyślnie replikuje całą hierarchię katalogów pod punktem montowania ~/.avfs
. Ponadto pod ~/.avfs
każdym plikiem archiwum, takim jak /tmp/foo.zip
sam plik archiwum ~/.avfs/tmp/foo.zip
, znajduje się katalog o nazwie, ~/.avfs/tmp/foo.zip#
który ujawnia zawartość archiwum. Jednak ten dodatkowy katalog nie pojawia się na liście ~/.avfs/tmp
: istnieje tylko na wyraźne żądanie. (Jest to podobne do działania niektórych automounterów.)
mountavfs
cd ~/.avfs/tmp/foo.zip\#
Kiedy wpisuję polecenie takie jak powyższe, foo.zip#
nie pojawia się jako uzupełnienie pod ~/.avfs/tmp/
, ponieważ nie ma takiego katalogu. Jak mogę powiedzieć zsh, że ilekroć jest plik, którego pełna ścieżka jest $arc
zgodna ~/.avfs/**/*.(tgz|zip)
¹, powinien udawać, że istnieje katalog o nazwie ${arc}#
?
(Zauważ, że chcę, aby zakończenie działało z każdym wywołaniem _files
lub _dirs
nie tylko dla cd
polecenia. Wolę nie kopiować kodu _files
funkcji, jeśli to możliwe.)
¹ i wszystkie pozostałe rozszerzenia
/path/to/foo
jest widoczny jako ~/.avfs/path/to/foo
.
avfs
. Jeśli przedstawiłby domyślną #
pozycję katalogu dla dowolnych plików, które pasowałyby do obsługiwanych przez nią łańcuchów, a nawet magicznie przetestował pliki w katalogu pod kątem tego, co wymagało posiadania #
pozycji, wówczas zakończenie byłoby po prostu działać. Wydaje mi się, że byłby to hit wydajnościowy dla czegoś takiego, find
jak gdyby teraz przeszukiwał skompresowane pliki.