~/.avfs 下のアーカイブディレクトリに cd を自動化する

~/.avfs 下のアーカイブディレクトリに cd を自動化する

私が使うavfsシェルプロンプトからアーカイブ内を簡単に見ることができます。これにより、 の下にディレクトリツリー全体のビューが作成されます~/.avfs(ファイルが/path/to/foo存在する場合は としても表示されます~/.avfs/path/to/foo)。さらに、/path/to/fooがアーカイブファイルの場合は は~/.avfs/path/to/foo#ディレクトリであり、これはアーカイブのコンテンツの最上位ディレクトリのビューです。

アーカイブの内部を探索したいときは、少し面倒です。階層に切り替えて~/.avfscd 役に立たないアーカイブ名を入力し、#最後に を追加します。

acd foo.zipから/path/to/dir実行して を実行できるようにしたいと思いますcd ~/.avfs/path/to/dir#。 を適切に完了しますacd。 どうすればこれが実現できますか?

答え1

これが の私の実装ですacd。引数がディレクトリでもアーカイブでも、正しく動作します。acd引数なしの は と同等です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'

これが私の zsh 補完関数です:

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

関連情報