端末プログラムに奇妙に見える右と下の境界線が表示されます。

端末プログラムに奇妙に見える右と下の境界線が表示されます。

かなり長い間、私は下の画像に提示したい問題のために「苦労」しました。

問題は、端末エミュレータで開くプログラムの周りに奇妙な境界線があることです。ただし、デフォルトではVimまたは同様のプログラム(背景を不透明に設定した場合)を使用している場合にのみこれがわかります。

そのため、mpv、rangerなどを使用すると同じ問題が発生しますが、背景とTEの背景はすべて透明であるため、気づきにくいのに対し、Vimのような場合には作業するのが好きです。不透明な背景を使用すると、この違いを見るのは面倒です。

私は現在Manjaroを使用しています。以前はXFCEをDEとして使用していましたが、役に立つかどうかを調べるためにi3をWMに切り替えました。ヒントヒント、いいえ。

私はこの問題を解決するためにさまざまな方法を試しました。私は試した:

  1. 下の図に示すように、さまざまな端末エミュレータを試してみました。私は現在xfce-256colorを使用していますが、この問題の回避策としてurxvtを試してみましたが、「運がありません」。
  2. 他のTEも使ってみました。私は試しました:Kitty、Alacritty、xterm、dwm、名前を付けてみましたが、何も変わりませんでした。だからTEではないと思います。
  3. "-u NONE -X"オプションを使用してVimを実行してみましたが、すぐに背景をcolorscheme = darkblueに設定して、境界がそのままであるかどうかを確認できました。
    残念ながら、すべてが同じです。
  4. 私は実行してみました。urxvt -b 0これは何か効果がありましたが、ベゼルが薄くなったにもかかわらず(下の3番目の図に示すように)、まだ維持されました。
  5. また、i3の構成では、境界を0に設定しました。 for_window [class="^.*"] border Pixel 0ですが、話は同じです。

xterm-256color i3 間隔なし xterm-256colorにはi3間隔があります。

urxvt i3 間隔なし urxvtとi3の間隔

urxvt -b 0 i3 間隔なし urxvt -b 0(i3間隔を含む)

私が指摘したいのは私の背景が私のTEと同じ色になることを望まない。この問題に対する「修正」として。これは、本質的にRanger、MPVなどを使用して暗黙的に行うことです。これも迷惑ですが、Vimは私が最も多くの時間を過ごす場所であり、Vimの背景色を透明に設定して「これ以上問題が発生しないように」したくありません。 highlight Normal ctermbg=none

xterm-256colorのフォントサイズを変更してみました。デフォルトでは、上記の画像ではSource Code Pro Regular 9に設定されています。

2枚の写真を撮りました。

  1. 左端末フォントサイズ:10、右端末フォントサイズ:11 ここに画像の説明を入力してください。

  2. 左端末フォントサイズ:10、右端末フォントサイズ:8 ここに画像の説明を入力してください。

ご覧のように、目に見える「奇妙な罫線」の部分は、サイズが増減するがまだ存在しています。

読んでくれてありがとう。

私のシステムに関するいくつかの情報(何が必要かわからないので):
Distro:Manjaro
WM:i3
TE:xterm-256colors / urxvt

lspci -vnn | grep VGA出力:
00:02.0 VGA互換コントローラ [0300]: Intel Corporation Mobile 4シリーズ チップセット統合グラフィックコントローラ [8086:2a42] (改訂07) (prog-if 00 [VGAコントローラ])

何が必要なのかよく分からない。追加情報を提供する必要がある場合はお知らせください。

ベストアンサー1

端末エミュレータは文字セルの矩形格子を使用し、各セルのサイズは同じです。

「一般」ウィンドウマネージャを使用すると、ほとんどの端末エミュレータがピクセル単位でサイズをスムーズに調整するのではなく、突然サイズ変更を行うことがわかります。これは、内部で実行されているアプリケーションに見やすい形状を提供するために、右端と下端の使用できない領域を避けたいからです。

これはいわゆる「幾何学的ヒント」によって達成される。文字単位が10×20ピクセルのフォントを選択し、ターミナルエミュレータがターミナルエミュレーション領域全体に1ピクセルの枠線を追加するとします。単純化のためにタブバー、スクロールバーなどがないとしましょう。つまり、デフォルトのウィンドウ幅は12、22、32、42 ...ピクセル、デフォルトウィンドウの高さは22、42、62、82 ...ピクセルです。ほとんどの端末エミュレータにはジオメトリヒントがあり、一部の整数の場合、幅はピクセル単位で、高さはピクセル単位でなければなりません10*w+2(明らかに正確な数字は常に実際のセルサイズ、デフォルトの境界線幅、スクロールバーの幅、その他の計算する追加機能に基づいています) )。 )精神)。20*h+2wh

名前が示すように、これらはヒント、ルールではありません。ウィンドウマネージャは必要に応じてそれを尊重したり無視したりできます。一般的なウィンドウマネージャは、ウィンドウを最大化してフルスクリーンで表示するときは無視しますが、それ以外は尊重します。私はタイリングウィンドウマネージャに慣れていませんが、常にこれらのヒントを無視しているようです。タイリングウィンドウマネージャは、ウィンドウを移動できる場所をより厳密に制御したいと考えています。これは、ウィンドウマネージャがアプリケーションを調整する必要があることを知らせるものであり、その逆ではありません。

それでは、ウィンドウサイズがプロンプトと一致しない場合、ターミナルエミュレータはどうすればよいですか?右と下にw*h文字セルの数に含まれていない未使用の領域を残しました。そこでは本当に何もできません。 (まあ、いくつかのトリックがあります。たとえば、VTE(GNOMEターミナルや他のターミナルで使用)は、スクロール時に下部の追加領域を使用します。Kittyはセル間に追加のスペースを割り当てるため、セルのサイズはすべて同じです。ではありませんが、一般的にその地域は利用できません。)

ここで何ができますか?

1つの方法は、残りの領域がないことを確認することです。つまり、ウィンドウマネージャはジオメトリヒントを尊重します。 Manjaroまたはi3がこれを行うことを許可するかどうかはわかりません。

もう1つのことは:多くの端末エミュレータには動的に(つまりランタイム)変更する方法があるということです。基本背景色このデフォルトの背景色は、通常、w*h文字セル(背景色が明示的に設定されていないセル)だけでなく、幾何学的手がかりが尊重されない場合はより大きくなる可能性がある周囲の境界線にも使用されます。

サポートされている端末エミュレータでは、OSC 11エスケープシーケンスを使用してデフォルトの背景色(したがって境界線の色)を設定するか、OSC 111を使用してデフォルト値に戻します。例:

printf '\e]11;#abcdef\e\\'
printf '\e]111\e\\'

スタート/終了vimと友達とつながり、そのコンテキストで目的の色でボーダーをペイントします。

おすすめ記事