Renomeie a função autodefinida

2

Tendo um precmd () que faz bastante, como a verificação de informações de VCS, eu quero desabilitá-lo quando estou navegando em unidades de rede montadas lentas.

Eu propus o seguinte com o qual eu posso dizer slow antes de mudar para uma unidade lenta e fast para mudá-lo de volta, estou me perguntando se há algo mais fácil?

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

precmd() {
    precmd_fast
}

slow() {
    precmd() {
        precmd_slow
    }
}

fast() {
    precmd() {
        precmd_fast
    }
}
exic
fonte

Respostas:

0

Não é a solução mais bonita, mas eu usaria apenas um simples condicional dentro do precmd função verificar se o diretório atual está montado ou não. Agora, fazer isso depende do tipo de montagem que é. Se os diretórios são conhecidos, algo como isto deve funcionar.

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

}

O que isto faz é testar se o diretório atual começa com (está dentro), ou se é, um dos diretórios listados no slowdirs variável. Se não for um dos diretórios "lentos", executa os "comandos lentos", caso contrário, ele os ignora.

Martín Canaval
fonte
0

eu gostei esta solução dada por chepner no StackOverflow, que citarei diretamente:

Além da função precmd, existe também um array chamado   precmd que contém uma lista de funções para chamar ao mesmo tempo. Você   pode manipulá-lo sozinho, mas zshcontrib tem uma função add-zsh-hook   para simplificar as coisas.

Código:

# 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
}
joeytwiddle
fonte