7 apr. 2011

Cum mi-am customizat linia de comandă sub linux...

   Salut! Astăzi voi scrie despre felul în care mi-am "construit" linia de comandă după gusturile și necesitățile mele.

1 .bashrc

   Așa cum, probabil știți că sunt iubitor de chestiuțe colorate în terminal, mi-am configurat promptul cu mai multe culori. Aici puteți găsi o listă de variabile și culori accesibile în bash, foarte util post pe archwiki. Spre exemplu, eu am inclus lista de variabile cu culori în .bashrc, și acum e mult mai simplu și lizibil codul, cu variabile în loc de secvențe escaped:
prompt_command ()
{
    local st=$?
    [ $st -eq 0 ] && \
    local p="${BBlack}>${Green}>${BGreen}>${Color_Off}" || \
    local p="${BBlack}>${Red}>${BRed}>${Color_Off}"
    PS1="\n   ${IPurple}(\t) ${Yellow}\u@\h ${IYellow}\w\n${Color_Off}${p} "
}
PROMPT_COMMAND=prompt_command
În secvența de mai sus, variabila $p e un string (>>>) ce ia culoare roșie (gradient improvizat) dacă comanda precedentă s-a executat cu vreo eroare și culoare verde dacă a mers ok. Controlul se face după variabila $?. În rest e usual stuff, colorat :]

2 git, git-completion și viață frumoasă

   De ceva vreme încoace, am descoperit și utilizez git-ul destul de activ. Primele impresii au fost pozitive, și totuși ceva mai lipsea... Fiind deprins cu subversion și în lipsă de autocomplete a comenzilor lui git, am făcut niște aliasuri, de genul: git co (git checkout, co luat din SVN), git ci (git commit) etc... Și totuși mai lipsea ceva... Spre exemplu, pentru a face checkout la un alt branch, trebuia întâi să listez toate branch-urile ca abia apoi să găsesc ceea ce-mi trebuie și să fac checkout etc.
   La un moment dat, m-am gândit că pot să-mi fac un script care să se ocupe de asta, și să facă aceste lucruri pentru mine, și, când colo, am dat de un lucru gata făcut! git-completion! bingo! Tot ce trebuie să faci e:
wget http://github.com/git/git/raw/master/contrib/completion/git-completion.bash -O ~/.git-completion.bash
și apoi să adaugi în .bashrc linia:
source $HOME/.git-completion.bash
Tadam! Acum ai autocompletion! (apropo, fraza asta mi-a adus aminte de sloganul de anul trecut de la PublikaTV, și anume: "Moldova, acum ai televiziune!". Ei da evenimentul nostru e mai important.)

   Odată cu autocompletion, a venit și colorarea la git diff, și câteva funcții predefinite. Una din ele, o să o examinăm aici. Funcția dată are numele de __git_ps1(), și se poate include în $PS... eu am pus-o înainte de newline, și dacă sunt în directorie cu repozitorie git, îmi arată, branch-ul curent, și starea lui, dacă e modificat și nu e făcut commit îmi marchează cu * branc-ul. Până la urmă, după diverse șlefuiri, command prompt-ul îmi arată așa:
PS. ce-mi mai trebuie? un GNU screen, vim, htop, moc, mc, mplayer, rtorrent(color) și sunt sigur că terminalul nu o să se plictisească... ;D