¿Cómo puedo modificar el sistema de finalización de zsh para completar archivos "falsos" en algunas circunstancias?
Más precisamente, el sistema de archivos AVFS expone los archivos como directorios al crear un "directorio falso" al lado de cada archivo. Por defecto, replica toda la jerarquía de directorios bajo su punto de montaje ~/.avfs
. Además, debajo de ~/.avfs
, para cada archivo de archivado, como /tmp/foo.zip
, además del archivo de archivado ~/.avfs/tmp/foo.zip
, hay un directorio llamado ~/.avfs/tmp/foo.zip#
que expone el contenido del archivo. Sin embargo, este directorio adicional no aparece en la lista de ~/.avfs/tmp
: solo existe cuando se solicita explícitamente. (Esto es similar a cómo funcionan algunos montadores automáticos).
mountavfs
cd ~/.avfs/tmp/foo.zip\#
Cuando escribo un comando como el anterior, foo.zip#
no aparece como una finalización en ~/.avfs/tmp/
, ya que no existe ese directorio. ¿Cómo puedo decirle a zsh que siempre que haya un archivo cuya ruta completa $arc
coincida con ~/.avfs/**/*.(tgz|zip)
¹, debería pretender que hay un directorio llamado ${arc}#
?
(Tenga en cuenta que quiero que la finalización funcione con cada llamada _files
o _dirs
, no solo para el cd
comando. Preferiría no tener que duplicar el código de la _files
función, si es posible).
¹ y todo el resto de las extensiones
/path/to/foo
son visibles como ~/.avfs/path/to/foo
.
avfs
. Si presentara la #
entrada de directorio predeterminada para cualquier archivo que coincida con las cadenas que admite, o incluso probó mágicamente los archivos en un directorio para lo que necesitaba tener una #
entrada, entonces la finalización simplemente funcionaría. Supongo que habría un éxito en el rendimiento de algo como, find
ya que ahora rastrearía a través de archivos comprimidos.