昨天已經幫 Prompt 加上了 username 跟 hostname 等等資訊,但還是不夠漂亮,所以今天要來幫 Shell 加上一點顏色
因為要在終端機內顯示顏色需要用到跳脫序列,這邊稍微說明一下
大家應該都知道 \n
是換行而 \t
是 Tab,這類型 \
開頭的字元被稱做跳脫序列,\n
並不是字面上的 \
跟 n
兩個字元,而是有特別的功能,所以如果在終端機裡面 echo -e "Hello\nWorld"
會得到這樣的結果
但除了 \n
、\t
之外其實還有很多跳脫序列,像下面這個例子 \033[1;36m
可以把之後的字變成青色(Cyan),\033[0m
則是把之後的字恢復原狀,所以只有中間的 Hello\nWorld
被上色
像 \033[1;36m
跟 \033[0m
這種格式被稱作 CSI 序列,他都是 \033[
開頭、m
結尾,中間填的是 SGR 參數,可以調整字體的粗細、底線、顏色、背景色等等,比較常用的 SGR 參數 有這幾個
所以 \033[ 33 m
意思是黃色(33)、\033[ 0 m
的意思是是重置(0)
如果有很多個的話中間用分號隔開,所以 \033[ 1;33 m
意思就是粗體(1)、黃色(33)
\033[ 1;33;44 m
則是粗體(1)、黃色(33)、藍色背景(44)
很神奇吧~這些懂了之後就能幫 Shell 上色了
// blue 負責把文字著上藍色
func blue(str string) string {
return "\033[1;34m" + str + "\033[0m"
}
// yellowWithBlueBG 負責把文字變成藍底黃字
func yellowWithBlueBG(str string) string {
return "\033[1;33;44m" + str + "\033[0m"
}
func showPrompt() {
u, _ := user.Current()
host, _ := os.Hostname()
wd, _ := os.Getwd()
// 把 user 跟 host 著成藍色
userAndHost := blue(u.Username + "@" + host)
// 把 Working Directory 變成藍底黃字
wd = yellowWithBlueBG(wd)
fmt.Printf("%s %s > ", userAndHost, wd)
}
這樣就完成我們的超酷炫彩色 Prompt 了,酷吧!!!
原來可以用跳脫序列幫文字上色啊!有沒有覺得長知識了呢?今天的 commit 放在這裡,有什麼問題歡迎提出來,沒問題的話就明天見囉