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

3

Eu uso o avfs para olhar convenientemente dentro dos arquivos a partir de um prompt do shell. Isso cria uma exibição de toda a árvore de diretórios em ~/.avfs (portanto, se houver um arquivo /path/to/foo , também é visível como ~/.avfs/path/to/foo ) e, além disso, se /path/to/foo for um archive, ~/.avfs/path/to/foo# será um diretório que é uma visão do diretório de nível superior do conteúdo do arquivo.

Quando eu quero explorar o interior de um arquivo, é um pouco complicado: eu tenho que mudar para a hierarquia ~/.avfs , e a conclusão de cd não me ajuda a digitar esses nomes de arquivos e adicionar # no final.

Gostaria de poder executar acd foo.zip de /path/to/dir e executar cd ~/.avfs/path/to/dir# . Com conclusão decente para acd . Como posso fazer isso?

    
por Gilles 20.05.2017 / 01:46

1 resposta

2

Aqui está minha implementação de acd . Faz a coisa certa se o argumento é um diretório ou um arquivo. acd sem 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á a minha função de conclusão do zsh:

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