Automatize o cd em um diretório de arquivo em ~/.avfs

Automatize o cd em um diretório de arquivo em ~/.avfs

eu usoavfspara examinar convenientemente os arquivos a partir de um prompt do shell. Isso cria uma visão de toda a árvore de diretórios ~/.avfs(portanto, se um arquivo /path/to/fooexistir, ele também será visível como ~/.avfs/path/to/foo) e, além disso, se /path/to/foofor um arquivo compactado, ~/.avfs/path/to/foo#será um diretório que é uma visualização do diretório de nível superior do conteúdo do arquivo.

Quando quero explorar o interior de um arquivo, é um pouco complicado: tenho que mudar para a ~/.avfshierarquia e a conclusão docd não me ajudapara digitar os nomes dos arquivos e adicionar um #no final.

Eu gostaria de poder correr acd foo.zipe /path/to/dircorrer cd ~/.avfs/path/to/dir#. Com conclusão decente para acd. Como posso fazer isso?

Responder1

Aqui está minha implementação do acd. Ele faz a coisa certa, quer o argumento seja um diretório ou um arquivo. acdsem argumento é 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'

E aqui está minha função de conclusão zsh:

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

informação relacionada