100%ポータブル端末カラーサポート総合検査

100%ポータブル端末カラーサポート総合検査

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

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

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

問題は、このコードがPOSIXで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

答え1

長い話を短く

推奨される検査は、特定のタイプのUnixシステムでは機能しません。

長い答え

  • POSIXはこれに対処しません。tput、でも読んでください移植性マニュアルページの一部。

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

  • たとえば、FreeBSD(デフォルトライブラリはncurses)ですが、次のようになります。tput名前のみtermcapサポートされます。 FreeBSDマニュアルページ確かではありませんが、一度見てくださいソースコード、これtgetstrtermcap)の代わりにtigetstrterminfo)。

  • これterminfoマニュアルページには、およびterminfo名前termcapがリストされています(例:setafおよび)AF。 2つを連続して試すことができます。終了コード関数が定義されているかどうかを示します。

    たとえば、次の方法で両方のケースを処理するようにテスト関数を変更できます。

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

関連情報