Como incluir a saída de um script no prompt zsh

1

Gostaria de adicionar a saída de um script Python ao meu prompt zsh , mas não tenho certeza de como fazer isso?

Isso é feito pelo que é chamado de "PROMPT EXPANSION" nas man pages?

Por favor, alguém me colocou no caminho certo, ou seja, postar alguns links úteis que eu não consegui encontrar com o Google.

    
por Cutú Chiqueño 26.09.2014 / 12:36

2 respostas

6

Existem duas formas principais:

  1. Expansão de parâmetro ativando PROMPT_SUBST
  2. O psvar array

1. Expansão de parâmetro no prompt

Se PROMPT_SUBST estiver ativado

setopt PROMPT_SUBST

o prompt é submetido a expansão de parâmetro, substituição de comandos e expansão aritmética antes de ser avaliado.

Dessa forma, a saída de um script pode ser incluída via substituição de comando. Por exemplo:

PROMPT='Look at this: $(python yourscript.py) >'

Se a saída contiver seqüências de escape ( %~ , %M , %F{red} etc.), elas serão avaliadas antes que o prompt seja impresso.

2. O array psvar

Um dos primeiros nove valores da matriz psvar pode ser definido para a saída do script. Ele pode ser recuperado usando %Xv , onde X é um número entre 1 e 9 (o padrão é 1 se X for omitido).

psvar[5]=$(python yourscript.py)
PROMPT='Look at this: %5v >'

Para atualizar o valor toda vez que o prompt é impresso, a função de gancho precmd precisa ser definida:

precmd() {
    psvar[5]=$(python yourscript.py)
}

Se já houver uma função precmd , ou se mais de uma função for usada, é uma boa idéia usar add-zsh-hook .

# load add-zsh-hook, need to be done only once
autoload -Uz add-zsh-hook

pyscript() {
    psvar[5]=$(python yourscript.py)
}

add-zsh-hook precmd pyscript

Isso adiciona pycript à lista de funções que precisam ser executadas antes de imprimir o prompt.

    
por 26.09.2014 / 15:42
3

Você pode fazer isso configurando um precmd hook, que pegará a saída do comando e formatará como desejar, e então disponibilizará para o seu PROMPT. Minimamente, você precisa:

autoload -U add-zsh-hook
add-zsh-hook precmd my_precmd_hook_function

Defina my_precmd_hook_function para chamar seu script python e capturar sua saída em uma variável. Você pode então usar essa variável em seu $ PROMPT:

my_precmd_hook_function() {
  python_says=$(myPythonScript arg1 arg2)
}

PROMPT='$python_says'

Você pode definir quantas variáveis precisar no seu precmd hook e usá-las para criar um PROMPT bastante complexo. Apenas tenha em mente que quanto mais você fizer no precmd hook, mais tempo levará zsh para desenhar o prompt e retornar o controle para você. Se o seu script python for mais do que trivialmente simples, você notará, sem dúvida, um atraso.

Você pode ver toda a gama de possibilidades na seção SIMPLE PROMPT ESCAPES da página zshmisc man.

    
por 26.09.2014 / 13:29