19 de março de 2012

Encurtar URL pelo shell

Para quem gosta do shell do Linux, aí vai um encurtador de URL via linha de comando usando o serviço is.gd:
#!/bin/bash
# URL shortener using bash
U=$(python -c "import urllib; print urllib.quote('''$1''')") # urlencode long url
SHORT="`curl --data-urlencode --get is.gd/create.php?format=simple\&url=\"$U\" 2>/dev/null`"
echo -n $SHORT
Note o urlencode em Python. É para que os parâmetros da url longa não sejam confundidos com os parâmetros do próprio is.gd

Para complementar esse script, troque a última linha por:
echo -n $SHORT | xsel -i -b
Ela vai jogar a url já encurtada direto para o seu clipboard. Aí, é só colar aonde for necessário.

5 de março de 2012

Branch no prompt do shell

Uma das coisas que me incomodam quando uso git ou mercurial, é saber em qual branch estou trabalhando no momento.

Eu tenho alguns projetos no git e outros no mercurial. Aqui, mais uma fonte de confusão. Qual controle de versão eu uso em determinado projeto?

Para evitar ficar dando git branch ou hg branch toda hora, eis uma solução. Coloque isso no seu arquivo .bash_aliases:
function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(git \1) /'
}

function parse_hg_branch {
  hg branch 2> /dev/null | sed -e 's/\(.*\)/(hg \1) /'
}

export PS1="\[\e[36m\]>\W \[\e[0m\]\$(parse_hg_branch)\$(parse_git_branch)\$\[\e]2;\w\a\] "

O resultado é mostrado na imagem abaixo:



Qual o segredo para isso funcionar? Pipelining, sed e um pouquinho de regex.

Atenção: a última linha do código mostrado acima modifica seu prompt do shell. Por isso, atenção ao mexer com ele.