Terminal

BSD (& Linux) tput - 基本的可互操作顏色設置

  • July 30, 2020

任何人都可以在 * BSD 上使用 GUI確認以下是否在 BSD 系統上正確執行?

我試圖創建一個虛擬的 *BSD 測試盒,但沒有成功。所以,我為 *BSD 上的正確序列耗盡了一些可用資源tput……謝謝!


#!/bin/sh

if tput setaf > /dev/null 2>&1; then
   # Linux tput
   tput_number_of_colors=$(tput colors)
   tput_cmd_set_fg_color='tput setaf'
   tput_bold=$(tput bold)
   tput_reset=$(tput sgr0)
elif tput AF > /dev/null 2>&1; then
   # BSD tput
   tput_number_of_colors=$(tput Co)
   tput_cmd_set_fg_color='tput AF'
   tput_bold=$(tput smso)
   tput_reset=$(tput me)
else
   # black & white console, or no tput
   tput_number_of_colors=2
   tput_cmd_set_fg_color=
   tput_bold=
   tput_reset=
fi

tput_test ()
# this function uses the above to test tput capability of the terminal
{
   { command -v tput && [ "$tput_number_of_colors" -ge 8 ] && $tput_cmd_set_fg_color 1 && echo "$tput_bold"; } > /dev/null 2>&1
}

if tput_test; then
   # example of bold color definition
   color_red=$tput_bold$($tput_cmd_set_fg_color $color_red_id)
fi

否:s/smso/so/(termcap 名稱始終為 2 個字元)。terminfo(5)手冊頁是您回答問題的地方。

手冊頁顯示了這一點:

     enter_bold_mode             bold      md     turn on bold (extra
                                                  bright) mode

所以這**md將用於打開粗體模式。 smso(terminfo) 或so**(termcap) 開啟standout mode,稍後您可以在手冊頁中看到它不一定與粗體相同:

如果您的終端具有一種或多種顯示屬性,則可以用多種不同的方式表示這些屬性。您應該選擇一種顯示形式作為 突出模式,代表一種良好、高對比度、易於眼睛的格式,用於突出顯示錯誤消息和其他吸引註意力的格式。(如果你有選擇,反向影片半亮是好的,或者單獨的反向影片。)進入和退出 突出模式的序列分別 為**smsormso**。如果要進入或退出突出模式的程式碼 在螢幕上留下一個甚至兩個空格,就像 TVI 912 和 Teleray 1061 那樣,那麼 **xmc**應該給出告訴剩下多少空間。

引用自:https://unix.stackexchange.com/questions/601031