Configurando um segmento customizado para o zsh Powerlevel10k para o sdk ESP-IDF

By on 21 Mar 2023 | 01:00 .

Categories | | |

Tempo de leitura: #

Visualizações: #

O Powerlevel10k é um tema para a shell zsh muito utilizado por usuários unix/linux e powershell no windows para dar um ar mais cool na hora de utilizar o terminal, e este mesmo possibilita de forma livre a configuração da linha de prompt, onde veremos que é muito fácil adicionar informações visuais condicionalmente.

Sumário

Pré passos

Instalar Powerlevel10k

Como em: https://github.com/romkatv/powerlevel10k#installation

Instalar esp-idf

Como em: https://docs.espressif.com/projects/esp-idf/en/v5.0.1/esp32/get-started/linux-macos-setup.html#get-started-get-esp-idf

Segmento ESP-IDF

Como pode se ver este será o objetivo, mostrar a versão e o nome do framework quando estivermos dentro de um repositório que utiliza o framework. Para isto vamos primeiro dar um jeito de pegar a versão do framework:

$ git -C "$IDF_PATH" branch 2> /dev/null | sed -E -n 's/.+ (v[0-9\.]+).*/\1/p')

Onde utilizamos o git para pegar a branch atual do framework, dado em IDF_PATH após o script IDF_PATH/export.sh ser executado, e realizar um regex com o uso do sed para retirar somente a versão no formato v0.0.0.

Pode se também utilizar:

$ idf.py --version

Mas eu vi que este processo é lento e como o comando de versão será executado toda vez que a prompt atualizar isso se tornará chato e lento para quem usar o terminal, sendo o comando git assim mais viável.

Agora editando o arquivo:

~/.p10k.zsh:

...
  ####################################[ esp-idf: esp idf sdk prompt ]####################################
  
  function prompt_espidf(){
   # check for .git dir on dir
    if ! zstat -A size +size ".git" 2>/dev/null; then
        return
    fi

   # check for sdk file on dir
    if ! zstat -A size +size "sdkconfig" 2>/dev/null; then
        return
    fi

    # check for idf path env var
    if [[ ! -v IDF_PATH ]]; then
        p10k segment -b 124 -f 15 -i "✘ " -t "esp-idf"
    else
        local version=$(git -C "$IDF_PATH" describe)
        p10k segment -b 124 -f 15 -i " " -t "esp-idf $version"
    fi
  }
...

Onde checamos usando zstat se o arquivo sdkconfig existe, sendo este arquivo criado pelo sdk esp-idf e identificando assim uma pasta como desejável para apresentação do prompt, se este não existir, retornamos, assim o segmento não será exibido.

Sendo este código podendo ser localizado em qualquer lugar no arquivo após a definição:

...
  typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
	...
  )
...

Se o script export.sh, que exporta as variáveis de ambiente do esp-idf, for executado, IDF_PATH será definido e a prompt normal com versão será exibida.

  • O ícone é o ícone de microchip visto na figura mais acima

Caso IDF_PATH não existir, um será exibido sem versão, indicando assim para você que o script deve ser executado, ou seja, um indicador visual para facilitar sua vida.

Falta ainda adicionar a nossa configuração para ser exibida a direta do prompt, para isso basta adicionar as seguintes linhas:

...
  typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
    # =========================[ Line #1 ]=========================
	...
    espidf                  # esp-idf framework
	# =========================[ Line #2 ]=========================
    newline
	...
  )
...
  • Lembrando que que nossa função deve se chamar function prompt_NOME() e a definição em POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS deve ser apenas NOME.

Rápidex este, para maiores informações utilize o seguinte comando:

$ p10k help segment

E leia o próprio arquivo ~/.p10k.zsh, bem como as referências que eu segui abaixo. Valeu gurizada até a próxima.

Referências