Automatiza cd en un directorio de archivo en ~/.avfs

Automatiza cd en un directorio de archivo en ~/.avfs

yo sueloavfspara mirar cómodamente dentro de los archivos desde un símbolo del shell. Esto crea una vista de todo el árbol de directorios ~/.avfs(por lo que, si /path/to/fooexiste un archivo, también es visible como ~/.avfs/path/to/foo) y, además, si /path/to/fooes un archivo comprimido, entonces ~/.avfs/path/to/foo#es un directorio que es una vista del directorio de nivel superior del contenido del archivo.

Cuando quiero explorar el interior de un archivo, es un poco engorroso: tengo que cambiar a la ~/.avfsjerarquía y la finalización decd no me ayudapara escribir esos nombres de archivo y agregar un #al final.

Me gustaría poder huir acd foo.zipy /path/to/dircorrer cd ~/.avfs/path/to/dir#. Con terminación decente para acd. ¿Cómo puedo hacer esto?

Respuesta1

Aquí está mi implementación de acd. Hace lo correcto ya sea que el argumento sea un directorio o un archivo. acdsin argumento es equivalente a acd ..

avfs_cd () {
  case "$2" in
    "$HOME/.avfs/"*) :;;
    /*) set -- "$1" "$HOME/.avfs$2";;
    *) set -- "$1" "$HOME/.avfs$PWD/$2"
  esac
  if ! [ -d "$2" ]; then
    set -- "$1" "${2}#"
  fi
  "$1" "$2"
}
alias acd='avfs_cd cd'
alias apushd='avfs_cd pushd'

Y aquí está mi función de finalización de zsh:

_acd () {
  _dirs
  _files -g "*.(7z|rar|tar.bz2|tar.gz|tar.xz|tbz2|tgz|zip)(e\\''REPLY=\${REPLY}\\#'\\')"
}
compdef _acd acd apushd

información relacionada