web-dev-qa-db-fra.com

Comment faire en sorte que l'invite iTerm s'affiche différemment lorsque je suis dans une branche Git?

J'essaie de configurer mon iTerm Prompt de la même manière que Paul Irish

Jusqu'à présent, j'ai les éléments suivants dans ~/.profile:

# Add git branch name to Prompt
parse_git_branch() {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/*\(.*\)/ on \1/'
}

PS1='\n\[\033[0:35m\]\u\[\033[0;32m\]\w\[033[0m\]$(parse_git_branch)\n\$\[\033[0m\] '

Je ne sais pas comment faire en sorte que la branche apparaisse dans une couleur différente et non la précédente "sur"

En plus de cela, il existe d'autres fonctionnalités telles que:

  • Afficher un "o" à l'invite quand il ne fait pas partie d'une branche git
  • Afficher un "±" dans une branche
  • Affichage de la date en fin de ligne

Toute aide serait appréciée

14
purinkle

Je viens d'écrire un article sur la façon de faire tout cela. J'ai couvert toutes les bases, mais je devais deviner plusieurs choses, par exemple. comment Paul utilise les symboles, etc. Si vous voulez le lire, consultez http://digitalformula.net/articles/pimp-my-Prompt-like-paul-irish .

Il y a aussi un article sur digitalformula.net qui montre quelques autres exemples de prompt - voir http://digitalformula.net/articles/a-couple-more-bash-Prompt-examples .

EDITED: La partie code est la suivante:

PATH=$PATH:~/Data/Scripts:~/Data/Utils/rar:~/_Applications:~/_Applications/lynx

# alias to quickly show if any Handbrake processes are running
alias hb='Sudo ps -aef | grep HandBrakeCLI'

# alias for quick DNS cache flushing
alias fc='Sudo dscacheutil -flushcache'

# enable the git bash completion commands
source ~/.git-completion

# enable git unstaged indicators - set to a non-empty value
GIT_PS1_SHOWDIRTYSTATE="."

# enable showing of untracked files - set to a non-empty value
GIT_PS1_SHOWUNTRACKEDFILES="."

# enable stash checking - set to a non-empty value
GIT_PS1_SHOWSTASHSTATE="."

# enable showing of HEAD vs its upstream
GIT_PS1_SHOWUPSTREAM="auto"

BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
Lime_YELLOW=$(tput setaf 190)
POWDER_BLUE=$(tput setaf 153)
BLUE=$(tput setaf 4)
Magenta=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BRIGHT=$(tput bold)
NORMAL=$(tput sgr0)
BLINK=$(tput blink)
REVERSE=$(tput smso)
UNDERLINE=$(tput smul)

# set the Prompt to show current working directory and git branch name, if it exists

# this Prompt is a green username, black @ symbol, cyan Host, Magenta current working directory and white git branch (only shows if you're in a git branch)
# unstaged and untracked symbols are shown, too (see above)
# this Prompt uses the short colour codes defined above
# PS1='${GREEN}\u${BLACK}@${CYAN}\h:${Magenta}\w${WHITE}`__git_ps1 " (%s)"`\$ '

# this is a cyan username, @ symbol and Host, Magenta current working directory and white git branch
# it uses the shorter , but visibly more complex, codes for text colours (shorter because the colour code definitions aren't needed)
# PS1='\[\033[0;36m\]\u@\h\[\033[01m\]:\[\033[0;35m\]\w\[\033[00m\]\[\033[1;30m\]\[\033[0;37m\]`__git_ps1 " (%s)"`\[\033[00m\]\[\033[0;37m\]\$ '

# return the Prompt prefix for the second line
function set_prefix {
    BRANCH=`__git_ps1`
    if [[ -z $BRANCH ]]; then
        echo "${NORMAL}o"
    else
        echo "${UNDERLINE}+"
    fi
}

# and here's one similar to Paul Irish's famous Prompt ... not sure if this is the way he does it, but it works  :)
# \033[s = save cursor position
# \033[u = restore cursor position

PS1='${Magenta}\u${WHITE} in ${GREEN}\w${WHITE}${Magenta}`__git_ps1 " on %s"`${WHITE}\r\n`set_prefix`${NORMAL}${CYAN}\033[s\033[60C (`date "+%a, %b %d"`)\033[u${WHITE} '
7
digitalformula

J'utilise git-aware-Prompt

Beaucoup de solutions que j’avais auparavant n’affichaient la branche git que si je me trouvais seulement dans ce répertoire lors du chargement du terminal. Si j'ai démarré iTerm dans un référentiel non-Git, cela ne fonctionnerait pas si je cd dans un répertoire avec un référentiel Git.

Ce projet github a résolu ce problème pour moi.

17
spong

Plutôt que d'utiliser des codes de terminal archaïques, utilisez plutôt tput, ce qui rend le code beaucoup plus facile à lire et beaucoup plus difficile à gâcher:

BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
Lime_YELLOW=$(tput setaf 190)
POWDER_BLUE=$(tput setaf 153)
BLUE=$(tput setaf 4)
Magenta=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BRIGHT=$(tput bold)
NORMAL=$(tput sgr0)
BLINK=$(tput blink)
REVERSE=$(tput smso)
UNDERLINE=$(tput smul)

# Set Titlebar and Prompt
TITLEBAR='\e]0;\h: ${PWD/$HOME/~}\a'
PS1="${TITLEBAR}${WHITE}[${POWDER_BLUE}\u@\h${WHITE}]${NORMAL}$ "

La définition de la barre de titre est facultative. Veillez simplement à utiliser ${NORMAL} à la fin pour désactiver le changement de couleur.

9
SiegeX

Ajoutez ceci à votre ~/.bashrc ou ~/.profile

PS1="\u@\h:\w on\e[0;35m$(__git_ps1)\e[m\$ "

Où,

$(__git_ps1) est utilisé pour imprimer le nom de la branche

\e définit le début du jeu de couleurs

[0;35m représente la couleur pourpre

\e[m définit la fin du schéma

Aussi , j'ai corrigé votre invite actuelle:

PS1='\n\[\033[0;35m\]\u\[\033[0;32m\]\w\[\033[0m\]$(__git_ps1)\n\$\[\033[0m\] '
7
karlphillip

Comme mentionné ci-dessus, j'utilise également git-aware-Prompt .

Exécutez ceci pour installer rapidement:

mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-Prompt.git

Ajoutez ceci en haut de votre ~/.bash_profile:

export GITAWAREPROMPT=~/.bash/git-aware-Prompt
source "${GITAWAREPROMPT}/main.sh"

Dans le même fichier ~/.bash_profile, voici l'invite que j'utilise:

export PS1="\n\[$txtpur\]\u\[$bldwht\]@\h\[$bldgrn\]:\[$bldblu\] \w \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ \[$txtwht\] "

export Sudo_PS1="\[$bakred\]\u@\h\[$txtrst\] \w\$ "

vous pouvez changer les couleurs comme bon vous semble

Voici ce que signifient certains des symboles de PS1:
\u - nom d'utilisateur
@ - symbole cool
\h - nom d'hôte
: - Symbole sympa pour séparer les objets
\w - chemin complet, utilisez\W pour le chemin court
\git_branch - nom de la branche actuelle
\git_dirty - show * quand il y a un changement de branche
$ - Symbole sympa pour indiquer, entrez la commande 

3
csebryam

Une solution très riche et très riche en fonctionnalités (non seulement pour iterm Shell, mais également pour Vim et autres) est Powerline .

0
Geert