WM_CLASSとWM_INSTANCE?

WM_CLASSとWM_INSTANCE?

実行すると、xprop2つの値を持つ文字列などの結果が表示されます。 1つはi3がanを呼び出し、instanceもう1つはaを呼び出しますclass。たとえば、chromium-browserユーティリティはxprop次の結果を返します。

WM_CLASS(STRING) = "chromium-browser", "Chromium-browser"

ウィンドウとこれら2つのフィールドの正式なガイドラインは何ですか?この点で、彼らは非常に似ています。彼らは違いますか?それでは、何を選ぶべきでしょうか。その理由は何ですか? GUI作成者は自分の名前をどのように分類してインスタンス化する必要がありますか?

答え1

実際の行動は次のように定義されます。仕様のタイトルは次のとおりです。クライアント間通信ルールマニュアル(ICCM)。デフォルトでは、クラス名は申請者が指定します。インスタンス名はユーザーが指定でき、インスタンス名で指定されたリソースはクラス名で指定されたリソースをオーバーライドする必要があります。

WM_CLASSこれがX11r6用ICCMv2が言う内容です。

WM_CLASS4.1.2.5.属性

このWM_CLASS属性(制御文字のないSTRING型)には、2つの連続したNULL終了文字列が含まれています。クライアントとウィンドウマネージャがアプリケーションリソースを検索するか、識別情報として使用するインスタンスとクラス名を指定します。このプロパティは、ウィンドウが「折りたたまれた」状態から離れたときに存在する必要があり、ウィンドウが「折りたたまれた」状態にある間にのみ変更できます。ウィンドウマネージャは、起動時とウィンドウが撤回状態から離れたときにのみこのプロパティを確認できますが、クライアントはその状態を動的に変更する必要はありません。

2つの文字列は次のとおりです。

  • このウィンドウを所有するアプリケーションの特定のインスタンスを命名する文字列です。インスタンス名で指定されたリソースクラス名で指定されたすべてのリソースをオーバーライドします。インスタンス名はユーザーが指定できます。オペレーティングシステム固有の方法で。 POSIX 互換システムでは、次の規則が使用されます。

    • -name NAMEコマンドラインで指定されている場合は、インスタンス名として使用されますNAME
    • それ以外の環境変数が設定されると、RESOURCE_NAMEその値がインスタンス名として使用されます。
    • それ以外の場合は、プログラムを呼び出すために使用された名前の末尾(argv[0]ディレクトリ名を除く)がインスタンス名として使用されます。
  • このウィンドウを所有するクライアントが属するアプリケーションの一般カテゴリを指定する文字列。クラス別に指定されたリソースは、同じクラス名を持つすべてのアプリケーションに適用されます。クラス名はアプリケーションの作成者によって指定されます。一般的に使用されるクラス名の例には、「Emacs」、「XTerm」、「XClock」、「XLoad」などがあります。

文字列はnullで終わるため、WM_CLASSnullで区切られた属性の一般的な規則とは異なります。STRINGこれらの不一致は、以前のバージョンとの互換性のために必要です。

(太字は私が追加したものです)

関連情報