
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/foo
existir, ele também será visível como ~/.avfs/path/to/foo
) e, além disso, se /path/to/foo
for 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 ~/.avfs
hierarquia 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.zip
e /path/to/dir
correr 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. 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á 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