太字のフォントレンダリングを制御するターミナルエミュレータの設定

太字のフォントレンダリングを制御するターミナルエミュレータの設定

太字のフォント(ANSI:)の効果は、CSI 1 mターミナルエミュレータによって異なります。たとえば、他の端末エミュレータで次のスクリプトを実行します。

#!/bin/sh
echo "TERM = $TERM"
for mode in 0 2 1 '1;2'; do
    printf '\033[%s;38;5;%dm\033[48;5;%dm%s\033[0m\n' "$mode" 0 15 "testing ($mode)"
done

次の出力を提供します

ここに画像の説明を入力してください。

テストされた端末エミュレータでは、太字のxtermテキストのみが正しくレンダリングされました(モード= 1)。他の端末エミュレータは、太字のフォントに対してより明るい色を選択するようです(しばしば太字のフォントと組み合わせることもできます)。奇妙なことstに、引数が与えられると、対応する1;2正しい色の太字のテキストが生成されますbold;faint

これらの端末エミュレータには他の太い制御シーケンスが必要かもしれないと思いましたが、確認しましたが、一貫性があることがわかりましたterminfo

$ for term in xterm-256color st-256color rxvt-unicode-256color tmux-256color; do printf "%-24s" "$term"; TERM=$term tput bold | cat -v; echo; done
xterm-256color          ^[[1m
st-256color             ^[[1m
rxvt-unicode-256color   ^[[1m
tmux-256color           ^[[1m

これは、どのターミナルエミュレータパラメータが太字フォントの効果を制御するかについて質問をします。より明るい色への切り替えを防ぐ方法は?カスタマイジングで解決できますかXresourcesterminfo(しかし、対応するパラメータはありますかvim?同様の動作を示しますが、それを実行している端末エミュレータの動作と必ずしも一致しません。)

ベストアンサー1

CSI 1 mご存知のように、太字のフォントを表示するエスケープシーケンスは1つだけです。

このためダメ本物vimterminfo 定義のような構成を経ずにアプリケーション(例)側で動作を変更する方法です。 (この声明は後で修正いたします。)

所望の動作を達成する方法は、それに応じて端末エミュレータを構成することである。xterm +pcまたは、urxvt +isマニュアルに示すように適切なXresource設定を探しています。stそのようなオプションがあるかどうかはわかりません。

tmux私はグラフィックエミュレータの実際の動作を制御しないそのようなオプションが本当にないと思います。理論的には、後で言及するトリックを試すこともできますが、実際にはそうではありません。


いくつかの歴史的背景を説明すると、次のようになります。

基準によるとCSI 1 m「大胆で強盗を高める」という意味なので、厳密に言えば両方の行為ともに正しい行動だ。歴史的に、グラフィックターミナルエミュレータは両方の機能をサポートしてきました。

これは伝統的な8/16パレットには少し意味があります。これは、広く使用されている256色の拡張パレット、または今日のほとんどのグラフィック端末エミュレータでサポートされているRGBの場合には当てはまりません。本当に悪いことは、上位8つのパレットの色(実際にはユーザーが好きな8つの色)を太字で安定して生成するエスケープシーケンスがないことです。

これを見て、最近、いくつかのターミナルエミュレータは、色を明るくするのではなく、フォントを太くすることに切り替えました(欲しいもの)。あなたが言及した端末のうち、デフォルト設定がこのように変更された端末はないと思います。しかし、これについて私が知っている情報は簡単です。


そこに言及しました。可能アプリケーションの動作を変更する方法です。

最初の8つのパレットの色の1つを要求する2つのエスケープシーケンスがあります。既存の色(CSI 30..37 m)と対応するインデックスを持つ256色の色(CSI 38;5;0..7 m)。太字/明るい属性と組み合わせて使用​​すると、一部の端末エミュレータの一部のバージョンが2つありますCSI 1 m。たとえば、私が正確に覚えている場合、いくつかのバージョンはxterm古い色のエスケープを使用している場合にのみ明るい色に変わりますが、256色のエスケープを使用している場合は変更されません。私が正しく覚えている場合、xtermは後でこの動​​作を変更しました。

とにかく、これらのターミナルエミュレータを使用している場合、回避策は古いsetafコードの代わりに最初の8色の256色シーケンスをエクスポートするようにterminfoを変更することです。

これはデフォルトの前景色の太字/明るさの動作を変更せず、CSI 1 mこのterminfoハッキングを使用する代わりにターミナルエミュレータを設定することをお勧めします。


もっと面白くて毛皮の細部に興味がある場合は、次のリンクとそこにリンクされている他のページに興味があるかもしれません。
https://bugzilla.gnome.org/show_bug.cgi?id=762247
https://bugzilla.gnome.org/show_bug.cgi?id=791596

おすすめ記事