urxvt - 強制列幅

urxvt - 強制列幅

私はurxvtとタイリングウィンドウマネージャ(すばらしい)を使用しており、ウィンドウサイズに関係なく端末が80列に保たれることを望みます。

それで、urxvtに特定の列幅を維持するためにフォント/間隔のサイズを変更するように強制する方法があるかどうか疑問に思います。

端末を作成してもurxvtc -g 80問題は解決しません。見たがman 7 urxvt運がなかった…

答え1

これは2つの問題のようです。

  • はじめに80列を使用しているurxvt場合は、適切なフォントサイズを自動的に選択し、urxvtそして
  • urxvtウィンドウのサイズを変更するときに80列を引き続き使用し、フォントサイズを自動的に調整するにはどうすればよいですか?

Xアプリケーションは尋ねる与えられたウィンドウサイズに対して、ウィンドウマネージャは言うアプリケーションが使用するサイズです。ターミナルエミュレータでは、通常、ウィンドウサイズはフォントの高さ(行)とフォントの幅(列)の倍数でなければなりません。これにより、ウィンドウのサイズを変更するときにウィンドウマネージャが協力し(少し...)、ウィンドウに視覚的なフィードバックを提供できます。いいね-そして-リスト掲示されたもの。

urxvtTrueTypeフォントを使用する場合(原則として)任意のサイズ変更を使用できます。フォントを開くと、文字セルの高さと幅を取得します。あなたできる同じ値と画面サイズを使用し、ウィンドウの幅を80列以下に保つために必要な適切な割合を計算します。

しかし、難しいのは、ウィンドウマネージャが同意しない場合は、その要求を変更してウィンドウの高さと幅を変更できることです。各ディメンションは、他のディメンションとは独立して増減できます。タイリングウィンドウマネージャは、適切なアスペクト比を維持するためにウィンドウを縮小することが許可されると仮定することもできない。最終的な結果は、urxvtウィンドウサイズを取得し、それを文字単位に分割する方法を決定する必要があることです。

ウィンドウマネージャの初期レイアウト変更は通常ターミナルエミュレータによって検出され、それをウィンドウサイズ変更イベントとして(おそらくまだ起動していない)シェルに渡します。SIGWINCH

同様に、リリース後のウィンドウのサイズ変更は次のように渡されます。SIGWINCH

これを考慮すると、できるキャプチャするアプリケーションをシェルに作成するSIGWINCH使用されているフォントサイズを変更しますurxvt。これにより、ウィンドウマネージャにより良いレイアウトを要求できます。

これは実現可能ただし、基本的にurxvtこれを行う直接的な方法は提供されていません。これには少しのスクリプト/プログラミングが必要です。

ユーザーが現在アクティブな色とフォントを決定できるように、動的色制御シーケンスを拡張します。

に記録された機能をいいます。XTerm制御シーケンス:

もし「?」名前またはRGB仕様の代わりに指定された場合、xtermはその動的色を設定するために使用できる同じ形式の制御シーケンスで応答します。 1対以上の色番号と仕様を制御順序で提供できるため、xtermは複数の応答を実行できます。

そして

       Ps = 5 0  -> Set Font to Pt.

だからアプリはできます

printf '\033]50;?\007'

現在のフォントを取得します。最大250文字です(とにかく最大250文字)。ソースコード)

  • 適切な計算を行った後、アプリケーションはフォントを更新できます(同じ制御順序)。

奇妙なことに、クイックチェック(Debian 7)のコピーはurxvtそうではありません。働く~のためテストスクリプトは次のとおりです。xtermこの機能のために。ただし、この機能が適切な場合は、この機能を使用して自動フォントサイズ変更を実行できます。

関連情報