Atualizando uma variável git no prompt do Shell em todos os comandos

1

Estou executando o TCSH e gostaria de atualizar meu prompt toda vez que eu executar um comando. Acho que atualmente posso fazer isso via backticks.

 set tmpstr = 'git status --untracked-files=no --porcelain'

 set prompt="%{\e[35;1m%} $tmpstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} " 

Mas eu realmente não quero ter a lista completa de arquivos todas as vezes. Então, basta dizer se o diretório GIT está limpo é o suficiente.

 set tmpstr1 = 'git status --untracked-files=no --porcelain'

if ("$tmpstr" == "") then 
    set gitstr = 'Git: Clean'
else 
    set gitstr = 'Git: Uncommitted GIT ' 
endif 

 set prompt="%{\e[35;1m%} \$gitstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "

Mas o gitstr não será atualizado, pois não é um comando. Alguém tem alguma outra ideia? Ou alguma forma mágica de chamar uma declaração if completa toda vez que eu executo um comando?

    
por cripp 13.01.2016 / 01:07

1 resposta

2

Acabei usando precmd

Eu coloquei alias precmd 'source ~/.tcsh/precmd.tcsh' no meu arquivo .cshrc e movi o meu conjunto de mensagens para esse arquivo.

Origem do .tcsh

set tmpstr = '(git status --untracked-files=no --porcelain >! ~/out ) >&! ~/out1'
#echo $tmpstr #for debugging
    if !( -s ~/out )  then 
        if !( -s ~/out1 ) then
            set gitstr = "Git: Clean"
            set prompt="%{\e[35;1m%} \$gitstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
        else
            #echo "not in GIT"
            set prompt="%{\e[35;1m%} %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
        endif
    else 
        set gitstr = "Git: Uncommitted GIT "
        set prompt="%{\e[35;1m%} \$gitstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
    endif 

Isso me permitiu verificar quando estou em get e relatar o status de volta à linha cmd. Quando fora da pasta GIT, ele simplesmente não informa o status do GIT. As travessuras acontecendo no tmpstr é remover o stderror do konsole.

    
por 13.01.2016 / 22:19