2

Я использую слегка модифицированную версию Гэри Бернхардта (destroyallsoftware.com) .bashrc с homebrew bash 3.2.51.

    #  . ~/bin/bash_colors.sh
    . ~/bin/colorize.sh

[... snipped ...]

    # Git prompt components
    function minutes_since_last_commit {
        now=`date +%s`
        last_commit=`git log --pretty=format:'%at' -1`
        seconds_since_last_commit=$((now-last_commit))
        minutes_since_last_commit=$((seconds_since_last_commit/60))
        echo $minutes_since_last_commit
    }
    grb_git_prompt() {
        local g="$(__gitdir)"
        if [ -n "$g" ]; then
            local MINUTES_SINCE_LAST_COMMIT=`minutes_since_last_commit`
            if [ "$MINUTES_SINCE_LAST_COMMIT" -gt 30 ]; then
                local COLOR=${txtred}
            elif [ "$MINUTES_SINCE_LAST_COMMIT" -gt 10 ]; then
                local COLOR=${txtylw}
            else
                local COLOR=${txtgrn}
            fi
            local SINCE_LAST_COMMIT="${COLOR}$(minutes_since_last_commit)${reset}"
            # The __git_ps1 function inserts the current git branch where %s is
            # *** richard -- added purple to branch name


             local GIT_PROMPT=`__git_ps1 "[\033${txtgrn}%s\033${reset}|\033${SINCE_LAST_COMMIT}]"`
            echo ${GIT_PROMPT}
        fi
    }
    PS1="\[${txtblu}\u\[${txtmag}@\h\[${reset}:\[\W\]\[\$(grb_git_prompt)\$ "

[... snipped ...]

По какой-то причине моя подсказка делает это:

Пока я не сделаю:

$ bash

в этот момент он делает это:

Этот точно такой же .bashrc и связанные скрипты отлично работают на моем арочном блоке.

$ echo $PS1
\[\u\[@\h\[:\[\W\]\[$(grb_git_prompt)$

То же самое происходит в Terminal.app и iTerm2. Есть идеи?

2 ответа2

0

Не зная точно содержания ваших цветовых переменных, я думаю, что вам нужно изменить это

PS1="\[${txtblu}\u\[${txtmag}@\h\[${reset}:\[\W\]\[\$(grb_git_prompt)\$ "

к этому

PS1="\[\033${txtblu}\]\u\[\033${txtmag}\]@\h\[\033${reset}\]:\W\$(grb_git_prompt)\$ "

И изменить это

local SINCE_LAST_COMMIT="${COLOR}$(minutes_since_last_commit)${reset}"
local GIT_PROMPT=`__git_ps1 "[\033${txtgrn}%s\033${reset}|\033${SINCE_LAST_COMMIT}]"`
echo ${GIT_PROMPT}

в

local SINCE_LAST_COMMIT="\[\033${COLOR}\]${MINUTES_SINCE_LAST_COMMIT}\[\033${reset}\]"
echo "$(__git_ps1 "\[\033${txtgrn}\]%s\[\033${reset}\]|${SINCE_LAST_COMMIT}")"

Цветовые коды должны быть индивидуально окружены \[...\]

0

Я подозреваю, что ваши определения цвета (которые я не вижу в вашем вопросе) уже содержат окружающие символы \[ и \] . Т.е. твой желтый это что-то вроде этого:

txtylw="\[\033[0;37m\]"

И это то, что вызывает путаницу и проблемы.

Приглашение PS1 нуждается в этих окружающих символах, но цвета, возвращаемые вашей grb_git_prompt() не должны, потому что эта функция вызывается каждый раз, когда вы нажимаете Enter и ее вывод будет вставлен буквально в ваше приглашение.

Поместите их в верхнюю часть функции grb_git_prompt() чтобы увидеть, прав ли я:

local txtred="\033[0;31m"
local txtylw="\033[0;37m"
local txtgrn="\033[0;32m"
local reset="\033[0m"

PS Я не уверен, что мои действительные номера цветов верны.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .