XPROP(1) General Commands Manual XPROP(1)

xprop - نمایش‌دهنده ویژگی‌ها برای X

xprop [-help] [-grammar] [-id id] [-root] [-name name] [-frame] [-font font] [-display display] [-len n] [-notype] [-fs file] [-remove property-name] [-set property-name value] [-spy] [-version] [-f atom format [dformat]]* [format [dformat] atom]*

ابزار xprop برای نمایش ویژگی‌های پنجره و قلم در کارساز X به کار می‌رود. یک پنجره یا قلم با استفاده از آرگومان‌های خط فرمان یا در مورد پنجره، احتمالاً با کلیک بر روی پنجرهٔ مورد نظر انتخاب می‌شود. سپس فهرستی از ویژگی‌ها، احتمالاً همراه با اطلاعات قالب‌بندی ارائه می‌شود.

چاپ خلاصه‌ای از گزینه‌های خط فرمان.
چاپ دستور زبان (grammar) تفصیلی برای تمام گزینه‌های خط فرمان.
این آرگومان به کاربر اجازه می‌دهد پنجرهٔ id را در خط فرمان انتخاب کند، به‌جای آن‌که از نشانگر برای انتخاب پنجرهٔ هدف استفاده نماید. این گزینه در اشکال‌زدایی برنامه‌های کاربردی X که در آن‌ها پنجرهٔ هدف روی صفحه نگاشت نشده است (mapped نیست) یا مواردی که استفاده از نشانگر غیرممکن است یا با برنامه تداخل ایجاد می‌کند، بسیار مفید است.
این آرگومان به کاربر امکان می‌دهد به‌جای استفاده از نشانگر ماوس، پنجره‌ای به نام name را در خط فرمان به عنوان پنجرهٔ هدف تعیین کند.
این آرگومان به کاربر اجازه می‌دهد مشخص کند که ویژگی‌های قلم font باید نمایش داده شوند.
این آرگومان مشخص می‌کند که پنجرهٔ ریشه (root window) در X پنجرهٔ هدف است. این گزینه در مواردی که پنجرهٔ ریشه کاملاً پوشانده شده است کاربرد دارد.
این آرگومان امکان تعیین کارسازی را که باید به آن متصل شد فراهم می‌کند؛ مدخل X(7) را ببینید.
مشخص می‌کند که حداکثر n بایت از هر ویژگی خوانده یا نمایش داده شود.
مشخص می‌کند که نوع هر ویژگی نباید نمایش داده شود.
مشخص می‌کند که فایل file باید به‌عنوان منبعی برای قالب‌های بیشتر ویژگی‌ها استفاده شود.
مشخص می‌کند که هنگام انتخاب دستی یک پنجره (یعنی اگر هیچ‌کدام از گزینه‌های -name، -root یا -id داده نشده باشند)، به‌جای جستجو برای پنجرهٔ کلاینت، قاب مدیر پنجره (در صورت وجود) بررسی شود.
نام ویژگی‌ای را مشخص می‌کند که باید از پنجرهٔ تعیین‌شده حذف شود.
نام یک ویژگی و مقدار آن را برای تنظیم شدن روی پنجرهٔ تعیین‌شده مشخص می‌کند.
ویژگی‌های پنجره را به‌صورت نامحدود برای یافتن رویدادهای تغییر ویژگی پایش و بررسی می‌کند.
اطلاعات نگارش برنامه را چاپ کرده و خارج می‌شود.
مشخص می‌کند که format برای name باید format و dformat برای name باید dformat باشد. اگر dformat مشخص نشده باشد، مقدار " = $0+\n" فرض می‌شود..SH "توضیحات (DESCRIPTION)"

برای هر یک از این ویژگی‌ها، مقدار آن روی پنجره یا قلم (فونت) انتخاب‌شده با استفاده از اطلاعات قالب‌بندی ارائه‌شده (در صورت وجود) چاپ می‌شود. اگر هیچ اطلاعات قالب‌بندی ارائه‌ نشده باشد، پیش‌فرض‌های داخلی به کار گرفته می‌شوند. اگر ویژگی‌ای روی پنجره یا قلم انتخاب‌شده تعریف نشده باشد، عبارت "not defined" به عنوان مقدار آن ویژگی چاپ می‌شود. اگر هیچ فهرستی از ویژگی‌ها ارائه نشود، تمام ویژگی‌های پنجره یا قلم انتخاب‌شده چاپ خواهند شد.

یک پنجره را می‌توان به یکی از چهار روش انتخاب کرد. نخست، اگر پنجرهٔ مورد نظر پنجرهٔ ریشه (root window) باشد، می‌توان از آرگومان -root استفاده کرد. اگر پنجرهٔ مورد نظر پنجرهٔ ریشه نباشد، می‌توان آن را به دو روش در خط فرمان انتخاب کرد: یا از طریق شمارهٔ شناسه مانند آنچه ممکن است از xwininfo به دست آید، یا از طریق نام، در صورتی که پنجره دارای نام باشد. آرگومان -id پنجره را با شمارهٔ شناسه در قالب ده‌دهی یا هگزادسیمال (که باید با 0x آغاز شود) انتخاب می‌کند، در حالی که آرگومان -name پنجره را با نام آن برمی‌گزیند.

آخرین روش برای انتخاب پنجره اصلاً نیازی به خط فرمان ندارد. اگر هیچ‌یک از آرگومان‌های -font، -id، -name و -root مشخص نشده باشند، یک مکان‌نمای نشانه‌گیری (crosshairs) نمایش داده می‌شود و کاربر می‌تواند با فشردن هر یک از کلیدهای اشاره‌گر در پنجرهٔ مورد نظر، هر پنجرهٔ قابل مشاهده‌ای را انتخاب کند. اگر به جای پنجره، نمایش ویژگی‌های یک قلم مد نظر باشد، باید از آرگومان -font استفاده شود.

به جز چهار آرگومان فوق و آرگومان -help برای دریافت راهنما، و آرگومان -grammar برای فهرست کردن گرامر کامل خط فرمان، تمامی دیگر آرگومان‌های خط فرمان برای تعیین قالب ویژگی‌های قابل نمایش و چگونگی نمایش آن‌ها به کار می‌روند. آرگومان -len n مشخص می‌کند که حداکثر n بایت از هر ویژگی داده‌شده خوانده و نمایش داده شود. این گزینه برای نمونه هنگام نمایش بافر برش (cut buffer) روی پنجرهٔ ریشه کاربرد دارد، که در صورت نمایش کامل ممکن است چندین صفحه طول بکشد.

به طور معمول نام هر ویژگی با چاپ ابتدا نام ویژگی، سپس نوع آن (در صورت وجود) در پرانتز، و پس از آن مقدارش نمایش داده می‌شود. آرگومان -notype مشخص می‌کند که نوع ویژگی نباید نمایش داده شود. آرگومان -fs برای تعیین فایلی شامل فهرستی از قالب‌ها برای ویژگی‌ها استفاده می‌شود، در حالی که آرگومان -f برای تعیین قالب یک ویژگی خاص به کار می‌رود.

اطلاعات قالب‌بندی برای یک ویژگی در واقع از دو بخش تشکیل شده است: یک format و یک dformat. مقدار format قالب‌بندی واقعی ویژگی را مشخص می‌کند (یعنی آیا از کلمات (words)، بایت‌ها یا longs تشکیل شده است؟ و غیره)، در حالی که dformat نحوهٔ نمایش ویژگی را تعیین می‌کند.

پاراگراف‌های زیر چگونگی ساختن formatها و dformatها را شرح می‌دهند. با این حال، برای اکثریت قریب به اتفاق کاربران و کاربردها، این کار نباید ضروری باشد زیرا پیش‌فرض‌های داخلی حاوی formatها و dformatهای لازم برای نمایش تمامی ویژگی‌های استاندارد هستند. تنها زمانی باید formatها و dformatها را مشخص کرد که با ویژگی جدیدی سر و کار باشد یا کاربر از قالب نمایش استاندارد ناراضی باشد. به‌ویژه به کاربران تازه‌کار توصیه می‌شود از این بخش صرف‌نظر کنند.

یک format از یکی از اعداد 0، 8، 16 یا 32 و به دنبال آن دنباله‌ای از یک یا چند نویسهٔ قالب تشکیل شده است. اعداد 0، 8، 16 یا 32 مشخص می‌کنند که در هر فیلد از ویژگی چند بیت وجود دارد. صفر یک حالت خاص به معنای استفاده از اطلاعات اندازهٔ فیلد مرتبط با خود ویژگی است. (این فقط برای موارد خاصی مانند نوع INTEGER لازم است که بسته به اندازهٔ فیلدهای ویژگی، در واقع سه نوع مختلف است.)

مقدار 8 به این معناست که ویژگی دنباله‌ای از بایت‌ها است، در حالی که مقدار 16 به معنای آن است که ویژگی دنباله‌ای از کلمات (words) است. تفاوت بین این دو در این است که هنگام خوانده شدن توسط ماشینی با ترتیب بایت (byte order) مخالف با ماشینی که در ابتدا ویژگی را نوشته است، ترتیب بایت‌های دنبالهٔ کلمات جابه‌جا خواهد شد (byte swapped)، اما دنبالهٔ بایت‌ها جابه‌جا نمی‌شود. برای کسب اطلاعات بیشتر دربارهٔ نحوهٔ قالب‌بندی و ذخیره‌سازی ویژگی‌ها، به کتابچهٔ راهنمای Xlib مراجعه کنید.

پس از مشخص شدن اندازهٔ فیلدها، لازم است نوع هر فیلد نیز مشخص شود (یعنی آیا یک عدد صحیح، رشته، اتم، یا چیز دیگری است؟). این کار با استفاده از یک نویسهٔ قالب به ازای هر فیلد انجام می‌شود. اگر تعداد فیلدهای ویژگی بیشتر از نویسه‌های قالب ارائه‌شده باشد، آخرین نویسه به تعداد لازم برای فیلدهای اضافی تکرار خواهد شد. نویسه‌های قالب و معانی آن‌ها به شرح زیر است:

فیلد حاوی یک شمارهٔ اتم (atom number) است. فیلدی از این نوع باید دارای اندازهٔ 32 باشد.
فیلد یک بولی (boolean) است. مقدار 0 به معنای نادرست (false) و هر مقدار دیگری به معنای درست (true) است.
فیلد یک عدد بدون علامت (cardinal) است.
فیلد یک عدد صحیح علامت‌دار است.
فیلد مجموعه‌ای از پرچم‌های بیتی (bit flags) است که 1 به معنای روشن بودن است.
فیلد آرایه‌ای از آیکون‌ها است که به صورت دنباله‌ای از اعداد 32 بیتی متشکل از عرض، ارتفاع و مقادیر پیکسل ARGB بسته‌بندی شده‌اند، همان‌گونه که برای ویژگی _NET_WM_ICON در مشخصات Extended Window Manager Hints تعریف شده است. فیلدی از این نوع باید دارای اندازهٔ 32 باشد.
این فیلد و فیلدهای بعدی تا رسیدن به یک 0 یا انتهای ویژگی، دنباله‌ای از بایت‌ها را نشان می‌دهند. این نویسهٔ قالب تنها با اندازهٔ فیلد 8 قابل استفاده است و اغلب برای نمایش یک رشته به کار می‌رود.
این فیلد و فیلدهای بعدی تا رسیدن به یک 0 یا انتهای ویژگی، یک رشتهٔ متنی بین‌المللی‌شده را نشان می‌دهند. این نویسهٔ قالب تنها با اندازهٔ فیلد 8 قابل استفاده است. فرض می‌شود رشته در یک کدگذاری منطبق با ICCCM است و پیش از ارسال به خروجی، به کدگذاری محلی (locale) فعلی تبدیل می‌شود.
این فیلد و فیلدهای بعدی تا رسیدن به یک 0 یا انتهای ویژگی، یک رشتهٔ یونیکد کدگذاری‌شده با UTF-8 را نشان می‌دهند. این نویسهٔ قالب تنها با اندازهٔ فیلد 8 قابل استفاده است. اگر مشخص شود که رشته دارای نویسهٔ نامعتبر است، در عوض نوع تخلف از کدگذاری چاپ شده و به دنبال آن رشته با استفاده از 's' قالب‌بندی می‌شود. در محیطی که قادر به نمایش رشته‌های کدگذاری‌شده با UTF-8 نیست، رفتار آن همانند 's' خواهد بود.
فیلد یک عدد هگزادسیمال است (مانند 'c' اما به صورت هگزادسیمال نمایش داده می‌شود - برای نمایش شناسه‌های پنجره و مانند آن بسیار مفید است).

یک نمونه format مقدار 32ica است که قالب ویژگی‌ای با سه فیلد 32 بیتی است؛ اولی شامل یک عدد صحیح علامت‌دار، دومی یک عدد صحیح بدون علامت، و سومی یک اتم.

قالب یک dformat بر خلاف یک format چندان سفت و سخت نیست. تنها محدودیت در مورد dformat این است که نباید با یک حرف یا یک خط تیره آغاز شود. این محدودیت برای آن است که بتوان آن را از نام ویژگی یا یک آرگومان تشخیص داد. یک dformat رشته‌ای متنی شامل نویسه‌های ویژه‌ای است که دستور چاپ فیلدهای گوناگون را در نقاط مختلف صادر می‌کند، به روشی مشابه با رشتهٔ قالب‌بندی مورد استفاده در printf. برای مثال، dformat با مقدار " is ( $0, $1 \)\n" ویژگی POINT 3, -4 را که دارای format مقدار 32ii است، به صورت " is ( 3, -4 )\n" نمایش می‌دهد.

هر نویسه‌ای به جز $، ?، \ یا ( در یک dformat همان‌گونه که هست چاپ می‌شود. برای چاپ یکی از نویسه‌های $، ?، \ یا (، یک \ پیش از آن قرار دهید. برای مثال، برای چاپ یک $ از \$ استفاده کنید. چند توالی ممیز وارونه (backslash) ویژه به عنوان میان‌بر فراهم شده است. \n باعث نمایش سطر جدید و \t باعث نمایش نویسهٔ تب می‌شود. \o که در آن o یک عدد در مبنای هشت (octal) است، نویسهٔ شمارهٔ o را نمایش خواهد داد.

یک $ به دنبال عدد n باعث نمایش فیلد شمارهٔ n می‌شود. قالب فیلدِ نمایش‌داده‌شده به نویسهٔ قالب‌بندی که برای توصیف آن در format متناظر استفاده شده است بستگی دارد. یعنی اگر یک عدد بدون علامت (cardinal) با 'c' توصیف شده باشد به صورت ده‌دهی چاپ می‌شود، در حالی که اگر با 'x' توصیف شده باشد به صورت هگزادسیمال نمایش داده خواهد شد.

اگر فیلد در ویژگی موجود نباشد (این مورد در برخی ویژگی‌ها امکان‌پذیر است)، به جای آن <field not available> نمایش داده می‌شود. $n+ فیلد شمارهٔ n، سپس یک ویرگول، سپس فیلد شمارهٔ n+1، سپس ویرگول بعدی و... را تا آخرین فیلد تعریف‌شده نمایش می‌دهد. اگر فیلد n تعریف نشده باشد، چیزی نمایش داده نمی‌شود. این قابلیت برای ویژگی‌هایی که فهرستی از مقادیر هستند مفید است.

یک ? برای آغاز یک عبارت شرطی (نوعی دستور if-then) استفاده می‌شود. ?exp(text) مقدار text را نمایش می‌دهد اگر و تنها اگر مقدار exp به مقداری غیرصفر ارزیابی شود. این قابلیت برای دو منظور مفید است: نخست، به فیلدها امکان می‌دهد تنها در صورتی که یک پرچم تنظیم شده باشد نمایش یابند؛ و دوم، اجازه می‌دهد مقداری مانند شمارهٔ وضعیت، به جای صرفاً یک عدد، به صورت یک نام نمایش داده شود. نحوِ (syntax) عبارت exp به صورت زیر است:

::= term | term=exp | !exp
::= n | $n | mn

عملگر ! یک «نقیض» (not) منطقی است که 0 را به 1 و هر مقدار غیرصفری را به 0 تغییر می‌دهد. = عملگر برابری است. توجه داشته باشید که در ساختار داخلی، تمام عبارت‌ها به عنوان اعداد 32 بیتی ارزیابی می‌شوند، بنابراین -1 با 65535 برابر نیست. اگر دو مقدار برابر باشند = مقدار 1 و در غیر این صورت 0 را برمی‌گرداند. n نشان‌دهندهٔ مقدار ثابت n است در حالی که $n نشان‌دهندهٔ مقدار فیلد شمارهٔ n است. mn برابر با 1 خواهد بود اگر پرچم شمارهٔ n در نخستین فیلدی که دارای نویسهٔ قالب 'm' در format متناظر است برابر با 1 باشد، و در غیر این صورت 0 است.

مثال‌ها: ?m3(count: $3\n) فیلد 3 را با برچسب count نمایش می‌دهد اگر و تنها اگر پرچم شمارهٔ 3 (شمارش از 0 آغاز می‌شود!) روشن باشد. ?$2=0(True)?!$2=0(False) مقدار معکوس فیلد 2 را به صورت بولی نمایش می‌دهد.

برای نمایش یک ویژگی، xprop هم به یک format و هم به یک dformat نیاز دارد. پیش از آنکه xprop از مقادیر پیش‌فرض خود یعنی format با مقدار 32x و dformat با مقدار " = { $0+ }\n" استفاده کند، چندین مکان را در تلاش برای یافتن قالب‌های مشخص‌تر جستجو می‌کند. نخست، جستجویی با استفاده از نام ویژگی انجام می‌شود. اگر این جستجو ناموفق باشد، جستجو با استفاده از نوع ویژگی صورت می‌گیرد. این امر اجازه می‌دهد تا نوع STRING با یک مجموعه قالب تعریف شود، در حالی که ویژگی WM_NAME که از نوع STRING است، با قالب متفاوتی تعریف شود. به این ترتیب، می‌توان قالب‌های نمایش یک نوع مشخص را برای ویژگی‌های خاص بازنویسی (override) کرد..PP مکان‌های جستجو به‌ترتیب عبارتند از: قالبی که به‌همراه نام ویژگی مشخص شده باشد (در صورت وجود، مانند 8x WM_NAME)، قالب‌های تعریف‌شده توسط گزینه‌های -f به‌ترتیب از آخر به اول، محتویات فایل مشخص‌شده با گزینهٔ -fs (در صورت وجود)، محتویات فایل مشخص‌شده توسط متغیر محیطی XPROPFORMATS (در صورت وجود)، و در نهایت فایل توکار قالب‌های xprop.

قالب فایل‌های ارجاع‌داده‌شده با آرگومان -fs و متغیر XPROPFORMATS به‌صورت یک یا چند خط در قالب زیر است:

name format [dformat]

که در آن name نام یک ویژگی یا نام یک نوع داده است، format همان قالبی است که با name استفاده می‌شود و dformat قالب نمایشی است که با name به‌کار می‌رود. اگر dformat مشخص نشده باشد، مقدار " = $0+\n" فرض می‌شود.

برای نمایش نام پنجرهٔ ریشه: xprop -root WM_NAME

برای نمایش راهنماهای مدیر پنجره برای ساعت: xprop -name xclock WM_HINTS

برای نمایش ابتدای بافر برش: xprop -root -len 100 CUT_BUFFER0

برای نمایش اندازهٔ پوینت قلمِ fixed: xprop -font fixed POINT_SIZE

برای نمایش تمام ویژگی‌های پنجرهٔ شمارهٔ 0x200007: xprop -id 0x200007

برای تنظیم یک ویژگی رشته‌ای ساده: xprop -root -format MY_ATOM_NAME 8s -set MY_ATOM_NAME "my_value"

برای دریافت نمایشگر پیش‌فرض.
نام فایلی را مشخص می‌کند که قالب‌های اضافی از آن دریافت می‌شوند.

X(7), xdpyinfo(1), xwininfo(1), xdriinfo(1), glxinfo(1), xvinfo(1)

Mark Lillibridge، پروژهٔ Athena در MIT

xprop 1.2.8 X Version 11