web-dev-qa-db-ja.com

オールラウンドな100%ポータブル端末のカラーサポートチェック

tputを使用して端末の色のサポートをテストします

#!/bin/sh
colors_supported()
{
    command -v tput > /dev/null 2>&1 && tput setaf 1 > /dev/null 2>&1
}

現在、このコードを使用して、tput端末の色がサポートされているかどうかを確認しています。

うまく機能しているようですが、問題は次のとおりです。このコードはPOSIX-ly 100%移植可能で、あらゆる種類のUnixベースのシステムで使用できますか? Linux、* BSDなどを意味します。


現時点ではどこでも試すことができないのでお願いします。


どの色:

tput setaf 1
tput setaf 2
tput setaf 3
tput setaf 4
tput setaf 5
tput setaf 6
tput setaf 7
2

TL; DR

推奨されるチェックは、一部の種類のUnixシステムでは機能しません。

長い答え

  • POSIXは、tputのこの側面については説明していませんが、マニュアルページの Portable セクションを読んでください。

  • ほとんどのシステムはterminfo名(setafなど)を使用します。

  • たとえば、FreeBSD(基礎となるライブラリはncursesですが)は、tput名のみをサポートするtermcapを提供します。 FreeBSD マニュアルページ は明確ではありませんが、 tgetstr を使用する ソースコード を参照してください。 (termcap)ではなく tigetstrterminfo)。

  • terminfo マニュアルページには、terminfoおよびtermcapの名前が一覧表示されます(例:setafおよびAF)。 exit code は機能が定義されているかどうかを示すため、両方を連続して使用してみることができます。

    たとえば、次のいずれかの場合を処理するようにテスト関数を変更できます。

    colors_supported()
    {
        command -v tput > /dev/null 2>&1 && ( tput setaf || tput AF ) > /dev/null 2>&1
    }
    
3
Thomas Dickey