Автоматически переместиться в архивный каталог ~/.avfs

Автоматически переместиться в архивный каталог ~/.avfs

я используюavfsдля удобного просмотра содержимого архивов из командной строки. Это создает представление всего дерева каталогов ниже ~/.avfs(так что если файл /path/to/fooсуществует, то он также виден как ~/.avfs/path/to/foo), и, кроме того, если /path/to/fooэто файл архива, то ~/.avfs/path/to/foo#это каталог, который является представлением каталога верхнего уровня содержимого архива.

Когда я хочу исследовать внутреннюю часть архива, это немного обременительно: мне приходится переключаться на иерархию ~/.avfs, а завершениеcd мне не помогаетвведите имена этих архивов и добавьте #в конце.

Я хотел бы иметь возможность бежать 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

Связанный контент