作者 主題: [git] 在命令列提示字串顯示目前分支  (閱讀 1727 次)

0 會員 與 1 訪客 正在閱讀本文。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
無意間在網路上看到 terminal 提示字串上顯示 git 分支名
哇!!這個好,這樣就不用常常打指令確認目前所在分支
於是就撈了起來再加工,不同狀態用不同顏色顯示...

$ vim ~/.bashrc
代碼: [選擇]
parseGitBranch() {
  BNAME1=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\[\1\]/')
  BNAME2=$(git branch 2>&1 | sed -n -e '1 s/^\(fatal\: Not a git repository\).*/\1/p')
  # BNAME2 == "" is git && no branch
  if [ ! -z "$BNAME1" -a -z "$BNAME2" ]; then
    echo $BNAME1
  elif [ -z "$BNAME1" -a ! -z "$BNAME2" ]; then
    # Not a git repository
    echo ""
  else
    # 未曾 commit 沒有 master
    echo "[*]"
  fi
}

parseGitStatus() {
  git status -s 2> /dev/null | tail -1 | awk 'END {if (NR==0) print 70} /^\?/ {print 201;next} /^.*/ {print 1;next}'
}

color_prompt=yes
if [ "$color_prompt" = yes ]; then
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    PS1='${debian_chroot:+($debian_chroot)}\[\033[38;5;208m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[38;5;$(parseGitStatus)m\] $(parseGitBranch)\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

看起來像這樣

xxxxx@xxxxx:~/local/pl [master]$


parseGitBranch() 是抓分支名
parseGitStatus() 設定分支名顏色,目前我只分3種顏色
測試半天,還算可以正常顯示 ^__^
« 上次編輯: 2016-05-31 18:14 由 Yamaka »

zelda

  • 憂鬱的高中生
  • ***
  • 文章數: 92
    • 檢視個人資料
Re: [git] 在命令列提示字串顯示目前分支
« 回覆 #1 於: 2016-05-31 17:34 »
感謝分享
有機會來試一下
 :)

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
Re: [git] 在命令列提示字串顯示目前分支
« 回覆 #2 於: 2016-06-02 01:22 »
小弟用 centos ...

您是使用 debain , 不知有沒有 PROMPT_COMMAND 環境變數
http://phorum.study-area.org/index.php/topic,71732.0.html
這事件雖知道了那個變數可以改變視窗標題
PROMPT_COMMAND='echo -ne \033]0;"$PWD""\007"'
但還不知原理

好奇的是 .. 加上 \033]0; 才有作用
控制終端這些代碼不知去哪查 ?

另外 .. 一般會用到的終端控制 , 大多可從 tput 指令找
例如 :
echo -e "\033[031m" ya "\033[037m"
等於
tput setf 4 ; echo ya ; tput setf 7

(tput setf 4 ; echo ya ; tput setf 7) > /tmp/xxx
用 vi 開啟就能看出代碼 , cat more 會套用終端
^[[31mya^[[37m

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: [git] 在命令列提示字串顯示目前分支
« 回覆 #3 於: 2016-06-02 02:38 »
控制碼 man console_codes 就有囉  ;D

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
Re: [git] 在命令列提示字串顯示目前分支
« 回覆 #4 於: 2016-06-02 02:47 »
原來 man 還有這類文件喔 ... ;D