Bashのヒント - バックスペースは右揃えのテキストを削除します(停止できますか?)

Bashのヒント - バックスペースは右揃えのテキストを削除します(停止できますか?)

非常に迷惑な問題があります。私はbash PS1を作成するためのすべてのプロトコルに従いました。\[または\]またはを\001含む印刷できない文字について知っていますが、\002表示されるテキストに問題があります。後ろにカーソルの位置です。バックスペースキーを押すと、すべてが消えます。

bash PS1を見てください(これをbashrcにしてテストすると便利です。bashrcのコピーを保存してください)。

## GRML
# grml battery?
GRML_DISPLAY_BATTERY=1

# battery dir
if [ -d /sys/class/power_supply/BAT0 ]; then
    _PS1_bat_dir='BAT0';
else
    _PS1_bat_dir='BAT1';
fi

# ps1 return and battery
_PS1_ret(){
    # should be at beg of line (otherwise more complex stuff needed)
    RET=$?;

    # battery
    if [[ "$GRML_DISPLAY_BATTERY" == "1" ]]; then
        if [ -d /sys/class/power_supply/$_PS1_bat_dir ]; then
            # linux
            STATUS="$( cat /sys/class/power_supply/$_PS1_bat_dir/status )";
            if [ "$STATUS" = "Discharging" ]; then
                bat=$( printf ' v%d%%' "$( cat /sys/class/power_supply/$_PS1_bat_dir/capacity )" );
            elif [ "$STATUS" = "Charging" ]; then
                bat=$( printf ' ^%d%%' "$( cat /sys/class/power_supply/$_PS1_bat_dir/capacity )" );
            elif [ "$STATUS" = "Full" ] || [ "$STATUS" = "Unknown" ] && [ "$(cat /sys/class/power_supply/$_PS1_bat_dir/capacity)" -gt "98" ]; then
                bat=$( printf ' =%d%%' "$( cat /sys/class/power_supply/$_PS1_bat_dir/capacity )" );
            else
                bat=$( printf ' ?%d%%' "$( cat /sys/class/power_supply/$_PS1_bat_dir/capacity )" );
            fi;
        fi
    fi

    if [[ "$RET" -ne "0" ]]; then
        printf '\001%*s%s\r%s\002%s ' "$(tput cols)" ":( $bat " "[0;31;1m" "$RET"
    else
        printf '\001%*s%s\r\002' "$(tput cols)" "$bat "
    fi;
}

# ps1 git branch
_PS1_git(){
    if ! type 'git' &> /dev/null; then
        return 1;
    fi;
    if [ ! "$( git rev-parse --is-inside-git-dir 2> /dev/null )" ]; then
        return 2;
    fi
    branch="$( git symbolic-ref --short -q HEAD 2> /dev/null )"

    if [ "$branch" ]; then
        printf ' \001%s\002(\001%s\002git\001%s\002)\001%s\002-\001%s\002[\001%s\002%s\001%s\002]\001%s\002' "[0;35m" "[39m" "[35m" "[39m" "[35m" "[32m" "${branch}" "[35m" "[39m"
    fi;
}

# grml PS1 string
PS1="\[\e[0m\]\$(_PS1_ret)\[\e[34;1m\]${debian_chroot:+($debian_chroot)}\u\[\e[0m\]@\h \[\e[01m\]\w\$(_PS1_git) \[\e[0m\]% "

あなたは次のようなものを見なければなりません

user@host ~ % █                                                             v87%

あなたはそれを見ることができませんv87%。それは問題ではありません。これにより、Ctrlc左右:(に赤いエラーコードが表示されます。

だからあなたは見るでしょう

130 user@host ~ % █                                                       :( v87%

または

130 user@host ~ % █                                                            :(

どちらにしてもカーソルの右側に何かがあります。

今を入力すると(バッテリー情報も)消えることがBackspaceわかります!:(up次に押すとdown同じ動作になります。)

これがわかれば、あなたは私のヒーローです!簡単ではないかもしれませんが、スマートなソリューションがある場合...床はあなたのものです。

ベストアンサー1

一つでもない直接プログラミングの回答ですが、インストールで目的の効果を得ることができます。液体のヒント$PS1、バッテリー統計、および他のさまざまな種類の有用な診断データを表示できます。デフォルト設定を調整するには、自動的に作成された~/.config/liquidpromptrc

メインプログラムliquidprompt_activateとそれが呼び出すスクリプトはすべてシェルスクリプト、どのように動作するかを研究するための素晴らしいソースになります。

おすすめ記事