xprop は X サーバ内のウィンドウとフォントのプロパティを表示するためのユーティ リティである。 xprop においては、コマンド行の引き数を使ってウィンドウまたはフォントを1 つ選択する。ウィンドウの場合にはウィンドウをクリックして選択することも できる。これにより、プロパティのリストと(たぶん)フォーマット情報が与え られる。
これらのプロパティのそれぞれについて、選択されたウィンドウやフォントが 持つ値は、フォーマット情報が与えられていればそれを使って表示される。 フォーマット情報が与えられていなければ、内部的なデフォルト値が使用され る。選択されたウィンドウやフォントにおいてプロパティが定義されていなけ れば、そのプロパティに対しては "not defined" が表示される。プロパティ のリストが与えられていない場合には、選択されたウィンドウやフォントが所 有している全てのプロパティが表示される。
ウィンドウは次の4つの方法のうちのいずれかで選択することができる。第一 に、ルートウィンドウを選択したい場合には -root オプションが利用できる。 選択したいウィンドウがルートウィンドウでない場合、コマンド行から選 択する方法は2つある。すなわち、xwininfo 等で得られる ウィンドウ ID を使う方法と、ウィンドウが持っている名前を使う方法である。-id オプ ションは10進数か16進数の ID 番号でウィンドウを使って選択する(16進数の 場合は0x で始めなければならない)。-name オプションは名前を使ってウィン ドウを選択する。
ウィンドウを選択する最後の方法は、コマンド行とは全く関係がない。 -font, -id, -name, -root のいずれも指定されていない場合、十字形のカー ソルが表示され、ユーザは選択したいウィンドウ上でポインタのボタンをクリッ クすることで表示されている任意のウィンドウを選択することができる。ウィ ンドウではなくフォントのプロパティを表示したい場合には、-font オプショ ンを使ってコマンド行から選択するしかない。
上記の4つのオプションとヘルプを見るための -help オプション、コマンドラ インの詳しい文法を表示するための -grammer オプションを除いた コマンド行での引き数は全て、表示されるプロパティのフォーマットとプ ロパティの表示の仕方を指定するために使われる。 -len n オプションは、与えられたプロパティのうち長くても n バイトだけが読み込み、表示されるように指定する。例えば、全部表示させる と何ページになるかもしれないルートウィンドウのカットバッファを表示させ るような場合には、このオプションが有効である。
通常はプロパティ名のそれぞれに対して、プロパティ名が最初に表示され、次 に(もしあれば)そのタイプが括弧付きで表示され、それから値が表示される。 -notype オプションを指定するとプロパティのタイプは表示されない。-fs オ プションはプロパティのフォーマットを記述したファイルを指定するために使 われ、-f オプションはプロパティ1つに対してフォーマットを指定するために 使われる。
プロパティに対するフォーマット情報は具体的には2つの部分、すなわち format と dformat から構成される。format はプロパティ の実際のフォーマット(つまり、word, byte, long 等からなる)を指定し、 dformat はプロパティをどのように表示するかを指定する。
以降の段落においては、format と dformat の記述方法を説明す る。しかし、ほとんどのユーザとその使用目的に対しては必要がないであろう。 なぜなら、デフォルトで組み込まれているフォーマットには全ての標準プロパ ティを表示するために必要な format と dformat が含まれてい るからである。
format は、0, 8, 16, 32 のいずれかの後に1つ以上のフォーマット文 字を続けたものである。0, 8, 16, 32 の数字はプロパティにおいてフィール ドごとにいくつビットがあるかを指定する。0 は特別な場合で、プロパティそ のものに対応するフィールドサイズ情報を使うことを意味する。(これは、プ ロパティのフィールドのサイズによって3つの異なるタイプとなるタイプ INTEGER のような、特別な場合にのみ必要となる。)
値が 8 の場合には、プロパティはバイト列であり、16の場合にはプロパティ はワード列である。この2つの違いは、プロパティを出力した元のマシンとは 逆のバイト順を持つマシンでプロパティを読みだした場合、ワード列ではバイ ト交換が行われるが、バイト列ではバイト列が行われないという点である。 プロパティのフォーマットや格納の方法に関する詳しい情報については、Xlib のマニュアルを参照すること。
フィールドのサイズが指定されると、それぞれのフィールドのタイプを指定す る必要がある(つまり、整数、文字列、アトムなど)。 これはフィールドごとのフォーマット文字1文字を使って指定する。 プロパティが与えたフォーマット文字よりも多くフィールドを持っている場合、 フォーマット文字の数を越えた分のフィールドに対しては、最後のフォーマッ ト文字が必要なだけ繰り返される。フォーマット文字列とその意味を以下に示 す:
プロパティが各32ビットのフィールドを3つ持ち、その最初のフィールドが符 号付き整数、2番目のフィールドが符号無し整数、3つめのフィールドがアトム であるもののformat は32ica である。
format とは異なり、dformat のフォーマットはあまり厳密では ない。 dformat の制限は、文字とダッシュで始まってはならないことだけであ る。これは、プロパティ名やオプションと区別できるようにするためである。 dformat は、printf で使われているフォーマット文字列と同様の方法 で様々なフィールドに様々な場所に表示させるための、特別な文字列を含むテ キスト文字列である。例えば dformat が " is ( $0, $1 \)\n" であ る場合、フォーマットが 32ii である POINT 3, -4 に対しては " is ( 3, -4 )\n" と表示される。
dformat に含まれる $, ?, \, ( 以外の文字はそのまま表示される。 $, ?, \, ( を表示するにはその文字の前に \ を付けること。例えば、$ を 表示するには \$ とする。バックスラッシュを使った特殊シーケンスの中に はショートカットとして使われるものがある。例えば、\n は改行文字を表示 させ、 \t はタブ文字を表示させる。また、\o (oは10進数)は、 文字コードが o である文字を表示させる。
$ の後に数字 n を続けると、番号 n のフィールドが表示される。 表示されるフィールドのフォーマットは、対応する format でフォーマッ トを記述するために使われているフォーマット文字によって決まる。つまり、 基数が 'c' で記述されている場合は10進数で表示され、'x' で記述されてい る場合には16進数で表示される。
フィールドがプロパティに含まれていない場合(このようなプロパティがいく つかある)、その代わりに <field not available> が表示される。$n+ は、番号 n のフィールド、コンマ、番号 n+1 のフィールド、コ ンマ、... のような表示を、定義されている最後のフィールドまで続ける。 フィールド n が定義されていない場合には、何も表示されない。 これは値のリストになっているプロパティを表示する際に便利である。
? は条件式、つまり if-then 分のようなものを始めるときに使う。 ?exp(text)は、exp を評価した値がゼロ以外の時に限って text を表示する。これは次の2点において有効である。第一に、フラグ がセットされている時に限って表示を行うことが可能になる。第二に、状態数 を単なる数字としてではなく、名前として表示することが可能になる。 exp の文法を以下に示す:
! 演算子は論理演算の「not(否定)」であり、0 を 1 に変化させ、0でない値 を0に変化させる。= は等値演算子である。内部的には全ての式は32ビットの 数として表現されるため、-1 と 65535 は異なる値である点に注意すること。 = は2つの値が等しい場合には 1 を返し、異なる場合には 0 を返す。 n は定数 n を表し、$n は番号 n のフィールドの 値を表す。 mn は、対応する format においてフォーマット文字が 'm' であ る最初のフィールドが持つ番号 n のフラグが 1 ならば 1 を返し、そ うでなければ 0 を返す。
例: ?m3(count: $3\n) は、(0から数えて)番号3のフラグが立っている場合に のみフィールド 3 に count というラベルを付けて表示する。 ?$2=0(True)?!$2=0(False) は、フィールド2 の真偽値の反対の値を表示する。
プロパティを表示するには、xprop は format と dformat の両方を表示する。xprop は、format のデフォルト値 32x と dformat のデフォルト値 " = { $0+ }\n" を使う前に、より細かいフォー マットの検索を試み、いくつかの場所を調べる。まず、プロパティ名を使って 検索が行われる。これが失敗するとプロパティのタイプを使って検索が行われ る。これにより、あるフォーマットのセットを使ってタイプ STRING を定義す る一方で、タイプ STRING である プロパティ WM_NAME をこれと異なるフォー マットで定義することができる。このようにして、特定のプロパティに対して は与えられたタイプの表示フォーマットを上書きすることができる。
検索は次の順序で行われる: (もしあれば)プロパティ名で指定されたフォーマッ ト(WM_NAME では 8x)、-f オプションで指定されたフォーマット(最後の指定 から最初の指定への順)、(もしあれば)-fs オプションで指定したファイルの 内容、(もしあれば)環境変数 XPROPFORMATS で指定したファイルの内容、 xprop に組み込みのフォーマットのファイル。
-fs オプションや環境変数 XPROPFORMATS で参照されるファイルのフォーマッ トは、以下の形式の行を1つ以上持つものである。
name format [dformat]
name はプロパティ名かタイプ名であり、format は name と共に使われる format であり、dformat は name と共に使われる dformat である。dformat を省略し た場合には、" = $0+\n" が指定されたものとして処理される。
ルートウィンドウの名前を表示: xprop -root WM_NAME
clock に対するウィンドウマネージャヒントを表示: xprop -name xclock WM_HINTS
カットバッファの先頭部分を表示: xprop -root -len 100 CUT_BUFFER0
固定幅フォントのポイントサイズを表示: xprop -font fixed POINT_SIZE
ID 0x200007 のウィンドウの全てのプロパティを表示: xprop -id 0x200007