Prompt colorido e com git branch
Autor: Hugo Lopes Tavares | Publicado: 2010-05-26T18:34:00-07:00

Meu terminal (gnome-terminal + bash) está assim no meu Ubuntu 9.10:Eu alterei a fonte para Monaco 12px, troquei as cores e adicionei ao prompt o branch do repositório que eu estou (caso a pasta seja um repositório git).E como isso foi feito?Instalando a Fonte Monaco no UbuntuA instalação da fonte Monaco no Ubuntu pode ser feita da seguinte maneira:sudo mkdir /usr/share/fonts/macfontssudo wget http://jorrel.googlepages.com/Monaco_Linux.ttf -O /usr/share/fonts/macfonts/Monaco_Linux.ttfsudo fc-cache -f -vO diretório /usr/share/fonts/macfonts será criado, a fonte Monaco_Linux.ttf será colocada em tal diretório e as configurações de fontes do sistema serão atualizadas. Muito simples!(Créditos do post http://jorrel.blogspot.com/2007/11/monaco-on-ubuntu.html)Como Adicionar o git branch ao PromptNo terminal há uma variável de ambiente chamada PS1, ela guarda a mensagem que será apresentada ao usuário do terminal. Imagine a seguinte situação:hugo@hugo-laptop:~$ echo $PS1\u@\h:\w$Isso significa que será mostrado na mensagem o usuário do sistema, um arroba, o hostname, dois pontos, o diretório atual e um cifrão. Em outras palavras, significa dizer que o usuário é identificado por \u, enquanto o hostname é \h e o diretório é \w.Para personalizar as mensagens é simples, basta alterar o valor da variável PS1! Por exemplo:hugo@hugo-laptop:~$ pwd/home/hugohugo@hugo-laptop:~$ export PS1="prompt do \u:\w$ "prompt do hugo:~$ pwd/home/hugoprompt do hugo:~$A idéia é adicionar à mensagem o nome do branch do repositório git. Para saber o nome do branch no git basta um `git branch` e olhar a linha que começa com asterisco. Por exemplo:hugo@hugo-laptop:~/should-dsl$ git branchmaster* matchers-as-functionsnew_matchers_based_on_hamcrestnsigustavo_masterrodrigomanhesseparate-matchershugo@hugo-laptop:~/should-dsl$Se for desejado saber apenas o branch atual, podemos usar o grep pra fazer isso:hugo@hugo-laptop:~/should-dsl$ git branch | grep ^\** matchers-as-functionshugo@hugo-laptop:~/should-dsl$E se quisermos apenas o nome do branch, sem o asterisco, podemos usar o sed pra remove-lo:hugo@hugo-laptop:~/should-dsl$ git branch | grep ^\* | sed 's/\* //'matchers-as-functionshugo@hugo-laptop:~/should-dsl$Agora já podemos adicionar o nosso branch à mensagem do terminal:hugo@hugo-laptop:~/should-dsl$ branch=`git branch 2>/dev/null| grep ^\* | sed 's/\* //'`hugo@hugo-laptop:~/should-dsl$ export PS1="\u@\h:\w($branch)$ "hugo@hugo-laptop:~/should-dsl(matchers-as-functions)$O redirecionamento de erros é pra tratar o caso do comando `git branch` dar um erro, ou seja, a pasta atual não ser um repositório git.Mas o interessante é ter cores, não!?Cores no TerminalÉ possível usar cores nos terminais unix através de algumas sequências ASCII de cores. Há uma biblioteca, termcolor, que traz esse recurso pro python. Assim, é possível usá-la pra colorir o terminal. Mas no nosso caso vamos ser mais hardcores e lidarmos com as nossas sequências manualmente (porque queremos ser independentes!).O padrão das sequências de cores é basicamente o seguinte: uma sequência dizendo que se inicia a sequencia, um modificador opcional, a cor, o texto e o finalizador de cor. O que eu quero dizer por modificador é um negrito, por exemplo.A cor verde, por exemplo, é identificada pelo número 32. A sequência de cores se inicia sempre com um \033[ e sempre termina com um \033[m. Um texto colorido de verde no terminal pode ser feito assim:Para quem não conseguir visualizar a imagem, o texto no terminal é:hugo@hugo-laptop:~$ echo -e "\033[32mHello World (verde)\033[m"Hello World (verde)hugo@hugo-laptop:~$Agora chegou a hora de juntar tudo num lugar só!Mostrando o git branch colorido no promptOs comandos aqui usados já foram explicados, então o código segue:function git_branch_name() {   git branch 2>/dev/null | grep -e '^*' | sed -E 's/^\* (.+)$/(\1) /'}function show_colored_git_branch_in_prompt() {   PS1="\[\033[01;32m\]\u@\h:\[\033[01;34m\]\w\[\033[31m\]\$(git_branch_name)\[\033[m\]$ "}show_colored_git_branch_in_promptAdicione este trecho ao ~/.bashrc e seja feliz!Caso você queira ver as modificações sem ter que abrir outro terminal, use o comando source:$ source ~/.bashrcPeguei a dica nesse post: http://asemanfar.com/Current-Git-Branch-in-Bash-Prompt e alterei algumas coias. Os comentários são excelentes!Espero que tenham gostado da dica ;-)Updates:Corrigido PS1 pra ser dinâmico, e não estáticoCorrigida duplicação de `function`. Valeu Siminino!