Ligne PS1 avec la branche courante de Git et les couleurs

voici ma PS1 actuelle:

export PS1='[\[email protected]\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
la source

12 ответов

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 04:54:59
la source

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

function color_my_prompt {
    local __user_and_host="\[3[01;32m\]\[email protected]\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 23:40:47
la source

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 23:56:44
la source
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 11:51:08
la source

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 23:37:37
la source

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: [email protected]
   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 12:55:50
la source

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 16:02:40
la source

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 15:41:46
la source

, Voici la mienne

export PS1="\n\[3[1;30m\][$$:$PPID - \j:\!\[3[1;30m\]]\[3[0;36m\] \T \
\[3[1;30m\][\[3[1;34m\]\[email protected]\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 19:37:15
la source

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 04:45:00
la source

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\]\[email protected]\h \[\e[36m\]$(GetBranch) \[\e[33m\]\w \[\e[0m\] \n$ "
1
répondu Ellis 2018-09-13 23:38:14
la source

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

0
répondu mpapis 2018-09-13 23:39:48
la source

Autres questions sur