Wie überprüfe ich die Terminal-Farbfähigkeit von der Kommandozeile aus?

0

Ich schreibe:

  $ infocmp -1 xterm
        ...
    farben # 8,
    fett = \ E [1m,
    Blinken = \ E [5m,
        ...
  $ tput -Txterm colors && echo OK || echo err
8
okay
  $ tput -Txterm blinken && echo OK || echo err
^ [[5mOK

Ich kann tput also verwenden , um die Netzhautfähigkeiten zu überprüfen.

Ist diese Sauce tragbar? Gibt es noch andere Lösungen?

Oder kann ich mit Lösung stecken bleiben:

  $ [$ TERM = xterm] && echo ok || echo err
okay

Eine Verwendung besteht darin, PS1 in .bashrc zu setzen. Eine weitere für die Hervorhebung von Ausgaben, um die Aufmerksamkeit von sh script auf sich zu ziehen. Ich kann eine solche Lösung verwenden:

PS1 = 'bash #'
case "$ TERM" in
  xterm *) PS1 = '\ [\ 033 [35m \] bash # \ [\ 033 [0m \]'
  ;;
esac

die verwendet nur eingebaute befehle von bash (so effizient) und funktioniert für alle meine fälle aber leider nicht portabel.

gavenkoa
quelle

Antworten:

1

Die Verwendung tputist auf eine große Anzahl von Betriebssystemen übertragbar.

Wenn Sie jedoch den Rückkehrcode überprüfen, erfahren Sie nur, ob die terminfo-Datenbank der Plattform eine Definition dieser Funktion im Eintrag für 'xterm' enthält.

Der Rückkehrcode sagt Ihnen nicht, ob der aktuell verwendete 'xterm'-Client diese Funktion tatsächlich unterstützt.

Beachten Sie, dass es eine Vielzahl von Softwareprogrammen gibt, die behaupten, "xterm" -kompatibel zu sein . Es ist sicherlich wahrscheinlich, dass nicht alle von ihnen alle 'xterm'-Funktionen unterstützen, insbesondere wenn man bedenkt, dass es mehrere aufeinanderfolgende Versionen der Referenzimplementierung von xterm und wahrscheinlich einige Forks gibt. Der xterm-Betreuer sagt: "Keine implementiert die Hälfte der xterm-Steuerelemente."

Soweit mir bekannt ist, hat keine der üblichen Normungsorganisationen (ANSI, ECMA, The Open Group) eine Norm veröffentlicht, die xterm definiert. Der aktuelle Betreuer von xterm unterhält auch ein vt100-Testprogramm (vttest) , um seine xterm-Arbeit zu unterstützen.

Es gibt also wahrscheinlich keine Möglichkeit, dass eine Anwendung selbst den TERM-Wert verwendet, um sicherzustellen, dass ein Terminal, das als xterm bezeichnet wird, tatsächlich eine bestimmte xterm-Funktion unterstützt. Zumindest nicht für eine willkürliche Wahl der xterm-Funktion. Wenn Sie einen Menschen einbeziehen (wie ich mich erinnere), haben Sie möglicherweise eine bessere Chance.

RedGrittyBrick
quelle
OKAY. Terminals können nichts über ihre Fähigkeiten aussagen, so dass die Heuristik von $ TERM ~ = xterm * ziemlich gut ist.
Gavenkoa
5

Ja, es ist tragbar. Wie wäre es damit:

# BASH : Configure things differently if current terminal has >= 8 colors.
if which tput > /dev/null 2>&1 && [[ $(tput -T$TERM colors) -ge 8 ]]; then
    echo "Configure stuff to use colors here!"
else
    echo "No tput or less than 8 colors, default to no coloring"
fi
jblaine
quelle