Pokud pracujete často s terminálem, určitě mnohé z Vás napadne, že by terminál mohl být přívětivější nebo barevnější, jako například v Linuxu. Protože i Mac je *nixový systém, lze využít stejné postupy jako pro linux. Stejně tak používáte-li například msysgit pro Windows, budete chtít dosáhnout identifikace stavu repozitáře i v terminálu OS X, pokud pracujete na obou platformách. Jak tedy na to?
Barevný terminál
K barevnému terminálu existuje v OS X několik cest. První, kde si vystačíme s konfigurací terminálu a druhá, kde využijeme produkty třetích stran. Zde popíšu první, čistší přístup. Máte-li zájem o druhý způsob, odkáži Vás na článek Customising Colours in Leopard Terminal .
Pro úpravu terminálu pro uživatele musíme vytvořit soubor .profile nebo .bash_profile v domovské složce uživatele (pokud už neexistuje). Např.
vim ~/.profile
Pro prvotní oživení barev vložíme do souboru příkaz
export CLICOLOR=1
Pokud chceme mít výstup ještě barevnější, lze přidat řádek
export LSCOLORS=ExFxCxDxBxegedabagacad
kde si nadefinujeme, jak má který typ souboru či adresáře být barevný. Více k tomuto např. zde. Osobně tuto druhou variantu nepoužívám, nepotřebuji ji.
Tímto jsme obarvili terminál. Mně ale nevyhovuje uspořádání automaticky vkládaného textu a proto upravím dle článku Prompt magic soubor s konfigurací z původního v souboru neuvedeného původní v souboru neuvedené
PS1="\h:\w \u$ PS2= > "
takto:
PS1='\[\e[1;31;40m\]\u \[\e[0m\]at \[\e[36;40m\]\h \[\e[0m\]in \[\e[1;32;40m\]\w\[\e[0m\]\n$ ' PS2=" > "
čímž dostanu tvar “uživatel na stroji v adresáři” a zároveň dle ANSI barev obarvím dle potřeb plus zalomím značku pro vstup na další řádek. Pokud chcete zvolit jiné barvy nebo jiný formát, vše s vysvětlením parametrů je popsáno v onom článku Prompt magic .
Uvedeným nastavením získáte barevné nastavení jako v úvodním obrázku na prvních dvou řádcích.
Terminál s Git repozitářem
Pro podporu zobrazení stavu repozitáře je třeba stáhnout ze stránky Customizing terminal’s PS1 with Git status and current branch soubor git-completion.bash, který obsahuje skript, který nám zajistí identifikace stavu repozitáře. V souladu s článkem je třeba vložit do konfigurace terminálu řádky
source ~/.git-completion.bash export GIT_PS1_SHOWDIRTYSTATE=true # '*' for unstaged changes, '+' for staged export GIT_PS1_SHOWSTASHSTATE=true # '$' if smth is stashed export GIT_PS1_SHOWUNTRACKEDFILES=true # '%' if un-tracked files
a stažený soubor přesunout do domovské složky jako .git-completion.bash. Tyto řádky musíme vložit před definici PS1 a PS2, neboť i ty musíme upravit, abychom získali popis repozitáře. Do PS1 musíme přidat řetězec
$(__git_ps1 " (%s)")
takže výsledný soubor .profile může vypadat například takto:
#git status source ~/.git-completion.bash export GIT_PS1_SHOWDIRTYSTATE=true # '*' for unstaged changes, '+' for staged export GIT_PS1_SHOWSTASHSTATE=true # '$' if smth is stashed export GIT_PS1_SHOWUNTRACKEDFILES=true # '%' if un-tracked files #promenne shellu PS1='\[\e[1;31;40m\]\u \[\e[0m\]at \[\e[36;40m\]\h \[\e[0m\]in \[\e[1;32;40m\]\w$(__git_ps1 " (%s)")\[\e[0m\]\n$ ' PS2=" > " #ostatni export CLICOLOR=1
Výsledkem je obrázek ze začátku článku.
Motivací pro mě ke změně byla stránka pro úpravu terminálu s verzovacím systémem hg (rtuťákem) hg-prompt.
EDIT 2020:
Moje současná konfigurace .profile k březnu 2020 pro bash shell:
# git to shell parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' } PS1='\[\e[1;31;49m\]\u \[\e[0m\]at \[\e[36;49m\]\h \[\e[0m\]in \[\e[1;32;49m\]\w\[\e[1;33;49m\]$(parse_git_branch)\[\e[0m\]\n$ ' PS2=" > " #aliases alias ll="ls -l" alias lla="ls -al" alias la="ls -a" # locale export LC_CTYPE=cs_CZ.UTF-8 export LC_ALL=cs_CZ.UTF-8 #others export CLICOLOR=1
a pro .bash_profile:
#shell variables with git parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' } PS1='\[\e[1;31;49m\]\u \[\e[0m\]at \[\e[36;49m\]\h \[\e[0m\]in \[\e[1;32;49m\]\w\[\e[1;33;49m\]$(parse_git_branch)\[\e[0m\]\n$ ' PS2=" > " #aliases alias ll="ls -l" alias lla="ls -al" alias la="ls -a" # locale export LC_CTYPE=cs_CZ.UTF-8 export LC_ALL=cs_CZ.UTF-8 #others export CLICOLOR=1 #brew user-installed binaries export PATH-/usr/local/bin:$PATH #load .bashrc if it exists test -f ~/.bashrc && source ~/.bashrc
Další způsob úpravy pro zobrazování změn v repozitáři je Informative git prompt for bash, který zobrazuje změny v repozitáři odlišně:
- (master↑3|✚1): ve větvi master, před vzdálenou větví o 3 revize, 1 soubor změně ale není připraven k zapsání
- (status|●2): ve větvi status, 2 soubory připraveny k zapsání
- (master|✚7…): ve větvi master, 7 souborů změněno, některé soubory nesledovány
- (master|✖2✚3): ve větvi master, 2 konflikty, 3 soubory změněny
- (master|⚑2): ve větvi master, 2 soubory odloženy
- (experimental↓2↑3|✔): ve větvi experimental; vaše větev se odlišuje 3 revizemi, vzdálená 2 revizemi, repozitář je jinak beze změn
- (:70c2952|✔): na žádné větvi; rodičovská revize má hash 70c2952; repozitář je jinak beze změn