Renomeia a função autodefinida

2

Tendo um precmd () que faz bastante, como verificar as informações do VCS, quero desabilitá-lo quando estiver navegando em unidades de rede montadas lentas.

Eu criei o seguinte, com o qual posso dizer slow antes de mudar para uma unidade lenta e fast para alterá-la novamente. Estou pensando 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
    }
}
    
por exic 16.02.2013 / 22:43

2 respostas

0

Não é a solução mais bonita, mas eu usaria apenas um condicional simples dentro da função precmd , verificando 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 isso faz é testar se o diretório atual começa com (está dentro) ou se é um dos diretórios listados na variável slowdirs . Se não for um dos diretórios "lentos", executa os "comandos lentos", caso contrário, ele os ignora.

    
por 18.02.2013 / 10:22
0

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

In addition to the precmd function, there is also an array called precmd that contains a list of functions to call at the same time. You can manipulate it yourself, but zshcontrib has a function add-zsh-hook to simplify matters.

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
}
    
por 21.12.2014 / 07:40

Tags