Zshのオーバーライド可能な機能

Zshのオーバーライド可能な機能

次の2つの機能を考えてみましょう。

function slow_git_prompt_info() {
  if [[ "$(command git config --get oh-my-zsh.hide-status 2>/dev/null)" != "1" ]]; then
    ref=$(command git symbolic-ref HEAD 2> /dev/null) || \
    ref=$(command git rev-parse --short HEAD 2> /dev/null) || return 0
    echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX"
  fi
}

そして:

function branch_name_only_git_prompt_info() {
  ref=$(git symbolic-ref HEAD 2> /dev/null) || return
  echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$ZSH_THEME_GIT_PROMPT_SUFFIX"
}

私は定義したいその他3番目の機能は電話したとき、デフォルトの「名前空間」の関数をgit_prompt_info()「指すように」オーバーライド/定義します。fast_git_prompt_info

たとえば、

# Pseudo-code:
function redefine_git_prompt_info() {
   git_prompt_info = branch_name_only_git_prompt_info
}

Zshでこれは可能ですか?それでは、どうすればいいですか?

答え1

どこでも関数を定義できます。他の関数をリンクするには、同じパラメータを使用して呼び出すだけです。

redefine_git_prompt_info () {
  git_prompt_info () { branch_name_only_git_prompt_info "$@"; }
}

後でオーバーライドされると、branch_name_only_git_prompt_info呼び出しはredefine_git_prompt_info新しい定義を呼び出します。現在の定義をコピーするには、zshで次のおかげで簡単にできます。functions大量に

redefine_git_prompt_info () {
  functions[git_prompt_info]=$functions[branch_name_only_git_prompt_info]
}

関連情報