Ligne PS1 avec la branche courante de Git et les couleurs

voici ma PS1 actuelle:

export PS1='[u@h W$(__git_ps1 " (%s)")]$ '

Comment afficher la branche courante dans une couleur différente?

48
demandé sur Peter Mortensen 2010-11-09 16:01:03

12 réponses

vous pouvez envelopper la partie que vous voulez en couleur avec ce qui suit:

\e[0;32m - définit la couleur (dans ce cas, en vert)

\e[m - renvoie la couleur à la valeur par défaut

par exemple, cela permet de régler l'invite sur le dernier jeton du chemin courant, en vert, suivi de $ dans la couleur par défaut:

export PS1='\e[0;32m\w\e[m $'

d'Autres couleurs sont également disponibles. Regardez cet article sous colorisation pour une liste complète des alternatives.

30
répondu Simon Whitaker 2017-01-11 01:54:59

ici, partie par partie (et pas de rubis):

function color_my_prompt {
    local __user_and_host="\[3[01;32m\]\u@\h"
    local __cur_location="\[3[01;34m\]\w"
    local __git_branch_color="\[3[31m\]"
    #local __git_branch="\`ruby -e \"print (%x{git branch 2> /dev/null}.grep(/^\*/).first || '').gsub(/^\* (.+)$/, '() ')\"\`"
    local __git_branch='`git branch 2> /dev/null | grep -e ^* | sed -E  s/^\\\*\ \(.+\)$/\(\\\)\ /`'
    local __prompt_tail="\[3[35m\]$"
    local __last_color="\[3[00m\]"
    export PS1="$__user_and_host $__cur_location $__git_branch_color$__git_branch$__prompt_tail$__last_color "
}
color_my_prompt

ressemble à ceci (avec ma propre palette de terminal):

Colored prompt

voir Aussi ce et ce de l'article.

100
répondu shaman.sir 2018-09-13 20:40:47

voici ma ligne PS1:

\n\[\e[1;37m\]|-- \[\e[1;32m\]\u\[\e[0;39m\]@\[\e[1;36m\]\h\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]--|\[\e[0;39m\]\n$

alt text

20
répondu cmcginty 2010-11-09 20:56:44
function pc {
  [ -d .git ] && git name-rev --name-only @
}
PS1='\e];\s\a\n\e[33m\w \e[36m$(pc)\e[m\n$ '

ps1

Source

14
répondu Steven Penny 2014-12-22 08:51:08

c'est ma solution PS1.

il semble grand sur un Mac avec le thème Roman. Désolé, mais mon indentation s'est un peu émoussée. Hack jusqu'à ce que vous l'aimez.

function we_are_in_git_work_tree {
    git rev-parse --is-inside-work-tree &> /dev/null
}

function parse_git_branch {
    if we_are_in_git_work_tree
    then
    local BR=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD 2> /dev/null)
    if [ "$BR" == HEAD ]
    then
        local NM=$(git name-rev --name-only HEAD 2> /dev/null)
        if [ "$NM" != undefined ]
        then echo -n "@$NM"
        else git rev-parse --short HEAD 2> /dev/null
        fi
    else
        echo -n $BR
       fi
    fi
}

function parse_git_status {
    if we_are_in_git_work_tree
    then
    local ST=$(git status --short 2> /dev/null)
    if [ -n "$ST" ]
    then echo -n " + "
    else echo -n " - "
    fi
    fi
}

function pwd_depth_limit_2 {
    if [ "$PWD" = "$HOME" ]
    then echo -n "~"
    else pwd | sed -e "s|.*/\(.*/.*\)||"
    fi
}

COLBROWN="\[3[1;33m\]"
COLRED="\[3[1;31m\]"
COLCLEAR="\[3[0m\]"

# Export all these for subshells
export -f parse_git_branch parse_git_status we_are_in_git_work_tree pwd_depth_limit_2
export PS1="$COLRED<$COLBROWN $(pwd_depth_limit_2)$COLRED$(parse_git_status)$COLBROWN$(parse_git_branch) $COLRED>$COLCLEAR "
export TERM="xterm-color"

si vous êtes enregistré dans une succursale, vous obtenez le nom de la succursale.

si vous êtes dans un projet juste init'd Git, vous obtenez juste '@'.

si vous êtes sans tête, vous obtenez un joli nom humain relatif à une branche ou une étiquette, avec un ' @ ' précédant nom.

si vous êtes sans tête et pas un ancêtre d'une branche ou d'une étiquette, vous obtenez juste le SHA1 court.

En outre, un rouge '-' signifie un environnement de travail propre répertoire et index, et un rouge '+' signifie le contraire.

11
répondu polypus74 2018-09-13 20:37:37

mon Uber-puissant multi-ligne Linux prompt!

mettez-le dans votre .bashrc ou mieux: de l'enregistrer dans /etc/bash-invite et la source de votre .bashrc.

Utiliser tput est censé être la bonne façon de faire les couleurs.

#!/bin/bash

set_prompt()
{
   local last_cmd=$?
   local txtreset='$(tput sgr0)'
   local txtbold='$(tput bold)'
   local txtblack='$(tput setaf 0)'
   local txtred='$(tput setaf 1)'
   local txtgreen='$(tput setaf 2)'
   local txtyellow='$(tput setaf 3)'
   local txtblue='$(tput setaf 4)'
   local txtpurple='$(tput setaf 5)'
   local txtcyan='$(tput setaf 6)'
   local txtwhite='$(tput setaf 7)'
   # unicode "✗"
   local fancyx='247'
   # unicode "✓"
   local checkmark='243'
   # Line 1: Full date + full time (24h)
   # Line 2: current path
   PS1="\[$txtbold\]\[$txtwhite\]\n\D{%A %d %B %Y %H:%M:%S}\n\[$txtgreen\]\w\n"
   # User color: red for root, yellow for others
   if [[ $EUID == 0 ]]; then
       PS1+="\[$txtred\]"
   else
       PS1+="\[$txtyellow\]"   
   fi
   # Line 3: user@host
   PS1+="\u\[$txtwhite\]@\h\n"
   # Line 4: a red "✗" or a green "✓" and the error number
   if [[ $last_cmd == 0 ]]; then
      PS1+="\[$txtgreen\]$checkmark \[$txtwhite\](0)"
   else
      PS1+="\[$txtred\]$fancyx \[$txtwhite\]($last_cmd)"
   fi
   # Line 4: green git branch
   PS1+="\[$txtgreen\]$(__git_ps1 ' (%s)')\[$txtwhite\]"
   # Line 4: good old prompt, $ for user, # for root
   PS1+=" \$ "
}
PROMPT_COMMAND='set_prompt'
7
répondu cylgalad 2015-06-21 09:55:50

il suffit d'invoquer tput avec les paramètres appropriés. Voir les pages de manuel tput(1) et terminfo(5) .

2
répondu Ignacio Vazquez-Abrams 2010-11-09 13:02:40

regardez liquidprompt:

https://github.com/nojhan/liquidprompt

peut-être un peu trop lourd pour vos besoins, mais vous pouvez désactiver les fonctions en activant

LP_ENABLE_...=0

voir la documentation ci-dessus.

2
répondu botkop 2014-03-07 11:41:46

, Voici la mienne

export PS1="\n\[3[1;30m\][$$:$PPID - \j:\!\[3[1;30m\]]\[3[0;36m\] \T \
\[3[1;30m\][\[3[1;34m\]\u@\H\[3[1;30m\]:\[3[0;37m\]${SSH_TTY:-o} \
\[3[0;32m\]+${SHLVL}\[3[1;30m\]] \[3[1;37m\]\w\[3[0;37m\]\[3[1;34m\]$(__git_ps1 \" (%s)\") \[3[0;37m\] \n$ "
1
répondu Tony Lâmpada 2014-03-20 15:37:15

pour mon Mac avec le thème Homebrew, cela fonctionne vraiment bien. Entièrement débogué et très rapide, et complètement autonome

# Color prompt for git
reset=$(tput sgr0)
boldgreen=$(tput setaf 2)$(tput bold)
cyan=$(tput sgr0)$(tput setaf 6)
boldred=$(tput setaf 1)$(tput bold)
boldwhite=$(tput setaf 7)$(tput bold)
boldyellow=$(tput setaf 3)$(tput bold)

PARENCLR=$'"151900920"1\e[0;36m"151900920"2'
BRANCHCLR=$'"151900920"1\e[1;33m"151900920"2'

alias branchname="git branch 2>/dev/null | sed -ne 's/^* \(.*\)/ ${PARENCLR}(${BRANCHCLR}${PARENCLR}\)/p'"

GIT_STATUS='$(branchname)'

PROMPT_CHAR="$"
PS1="\[$boldgreen\]\u\[$cyan\]::\[$boldred\]\h \[$cyan\]{\[$boldwhite\].../\W\[$cyan\]}\[$reset\]$GIT_STATUS\[$reset\]$PROMPT_CHAR "

voilà à quoi ça ressemble: Mac + Homebrew + Couleur Invite Git

Si vous voulez avoir le chemin complet (ou supprimer le .../ ), puis il suffit de changer le-W en-w (et de supprimer le .../).

1
répondu Dan L 2016-02-09 01:45:00

Voici une solution Windows/Cygwin/Bash.

ajoutez ce qui suit à votre fichier ~/.bashrc .

xxx est l'emplacement de votre dépôt Git local.

GetBranch()
{
    cat /cygdrive/c/xxx/.git/HEAD | sed 's+^ref: refs/heads/++'
}
export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[36m\]$(GetBranch) \[\e[33m\]\w \[\e[0m\] \n$ "
1
répondu Ellis 2018-09-13 20:38:14

pour le statut plus compliqué de Git, vous pouvez utiliser un script plus grand .

0
répondu mpapis 2018-09-13 20:39:48