Мій курсор знаходиться на початку мого баш-підказки. Будь-які ідеї чому?


2

Я використовую трохи модифіковану версію Gary Bernhardt's (killallsoftware.com) .bashrc з домашньою мовою 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. Якісь ідеї?


Можливо, ви могли б прокоментувати фрагменти файлу .bashrc, щоб знайти винуватця. Чи можете ви також розмістити вміст файлів, які надходять з вашого .bashrc?
mtak

Як @glennjackman помітив у своїй відповіді, ви здійснюєте другий непотрібний дзвінок, minutes_since_last_commitякий можна замінити вмістом змінної $MINUTES_SINCE_LAST_COMMIT. Це повинно вдвічі зменшити час відгуку вашого підказки.
Lqueryvg

Відповіді:


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}")"

Усі кольорові коди повинні бути оточені індивідуально \[...\]


1
Зверніть увагу , що @glenn Джекман змінений , $(minutes_since_last_commit)щоб ${MINUTES_SINCE_LAST_COMMIT}в своїй відповіді. Це гарна річ. Це повинно покращити швидкий час реагування.
Lqueryvg

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 Я не впевнений, чи мої фактичні кольорові цифри правильні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.