Funções substituíveis no Zsh

3

Considere as duas funções a seguir:

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
}

e:

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"
}

Gostaria de definir outra terceira função que, quando chamada , substitui / define a função git_prompt_info() no "namespace" principal para torná-la "point" para fast_git_prompt_info

Por exemplo algo como:

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

Isso é possível com o Zsh? Se sim, como?

    
por Amelio Vazquez-Reina 01.06.2015 / 16:25

1 resposta

1

Você pode definir uma função em qualquer lugar. Para encadear outra função, apenas chame-a com os mesmos parâmetros.

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

Se branch_name_only_git_prompt_info for redefinido posteriormente, uma chamada para redefine_git_prompt_info chamará a nova definição. Se você quiser copiar a definição atual, em zsh, você pode fazê-lo facilmente graças ao functions array .

redefine_git_prompt_info () {
  functions[git_prompt_info]=$functions[branch_name_only_git_prompt_info]
}
    
por 02.06.2015 / 02:40

Tags