自己定義関数の名前を変更する


2

VCSの情報をチェックするのと同じように、非常に多くのことを行うprecmd()があるので、低速マウントのネットワークドライブをナビゲートしているときは無効にしたいと思います。

私は私が言うことができる次のことを思いついた slow 遅いドライブに変更する前に fast 元に戻すには、何かもっと簡単な方法があるのか​​と思いますか。

precmd_slow() {
    not_much
}
precmd_fast() {
    precmd_slow
    somemore1
    somemore2
}

precmd() {
    precmd_fast
}

slow() {
    precmd() {
        precmd_slow
    }
}

fast() {
    precmd() {
        precmd_fast
    }
}

回答:


0

最もきれいな解決策ではありませんが、私は内部で単純な条件式を使うでしょう precmd カレントディレクトリがマウントされているかどうかをチェックします。今それを行うことはそれがどんな種類のマウントであるかに依存します。ディレクトリがわかっていれば、このようなものでうまくいくはずです。

slowdirs="/home/joe/slowdir1:/home/joe/slowdir2:/mnt/slowdir3"
precmd() {
  isslow=0
  echo $slowdirs | tr \: \\n |
    while read line; do
      if [[ $PWD == $line* ]]; then
        isslow=1
        break
      fi
    done
  if [[ $isslow == 0 ]] ; then
     # do slow stuff

  fi
  # do non slow stuff

}

これが何をしているのかは、現在のディレクトリがで始まる(中にある)か、そうでないのかをテストすることです。 slowdirs 変数。もしそれが "slow"ディレクトリのひとつでなければ、 "slow commands"を実行し、そうでなければそれらをスキップします。


0

好きだった この解決策 StackOverflowのchepnerによって与えられ、それは私が直接引用します:

precmd関数に加えて、次のような配列もあります。   同時に呼び出す関数のリストを含むprecmd。君は   自分で操作できますが、zshcontribには関数add-zsh-hookがあります。   問題を単純化するため。

コード:

# precmd_slow and precmd_fast defined as before

autoload add-zsh-hook
add-zsh-hook precmd precmd_fast

fast () {
    add-zsh-hook -d precmd precmd_slow
    add-zsh-hook precmd precmd_fast
}

slow () {
    add-zsh-hook -d precmd precmd_fast
    add-zsh-hook precmd precmd_slow
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.