LoginSignup
3
5

More than 5 years have passed since last update.

bashのプロンプトをいい感じにしていい感じの色をつける

Posted at

zshだとちょー簡単にいい感じにできるみたいだけど、bashでもプロンプトをいい感じにしたいと思った。
最終的にこんな感じにできた。
正常に終了した場合は黄色のゆのっち、エラーがあった場合は赤のゆのっち。

image

【環境】
macOS Mojave v10.14.4
GNU bash, version 3.2.57

もっとうまく書けると思うけど、見よう見まねであんまり詳しくないので。。。

source ~/.git-prompt.sh

GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM="auto"

# define for PS1
black=$'\e[30m' # Black - Regular
red=$'\e[31m' # Red
green=$'\e[32m' # Green
yellow=$'\e[33m' # Yellow
blue=$'\e[34m' # Blue
purple=$'\e[35m' # Purple
cyan=$'\e[36m' # Cyan
white=$'\e[37m' # White
gray=$'\e[90m' # Gray
reset=$'\e[m'

# add new line after the output
function add_line {
  if [[ -z "${PS1_NEWLINE_LOGIN}" ]]; then
    PS1_NEWLINE_LOGIN=true
  else
    printf '\n'
  fi
}
PROMPT_COMMAND='add_line'

function check_result_yunocchi {
  if [ $? -eq 0 ]; then
    face="\001${yellow}\002 ✖╹◡╹✖"
  else
    face="\001${red}\002 xX_Xx"
  fi

  echo -e "${face}\001${reset}\002 < "
}

# output prompt
prefix="\u \[$purple\]\w\[$reset\]\[$cyan\] "'$(__git_ps1 "(%s)")'"\[$reset\]\n"
PS1="${prefix}"'$(check_result_yunocchi)'

ハマったところ

\[色\]でくくる

くくらないと上下キーでのhistory選択したときの表示がバグる。。
友人のターミナルではくくらなくとも発生しなかったらしいので何かしらのバージョン依存の問題みたい

image

echo -e でのエスケープコード?

ゆのっちを出し分けるところを関数にしてechoしてもうまくエスケープされない問題があった。

\[\]✖╹◡╹✖\[\] <

よくわかってないけど、どうやらecho -e、というよりはreadlineを用いるとき?の非表示文字のシーケンスは\001\002にする必要があるらしい。
大変ハマった。。。
https://superuser.com/questions/301353/escape-non-printing-characters-in-a-function-for-a-bash-prompt

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5