wish(1) برنامه‌های Tk wish(1)

wish - پوسته پنجره‌ای ساده

wish ?-encoding name? ?fileName arg arg ...?

کدگذاری متن ذخیره‌شده در fileName را مشخص می‌کند. این گزینه تنها پیش از آرگومان fileName شناخته می‌شود.
مشخص می‌کند که پنجره به جای استفاده از نقشه رنگ پیش‌فرض صفحه نمایش، باید یک نقشه رنگ (colormap) اختصاصی جدید داشته باشد.
نمایشگر (و صفحه نمایشی) که پنجره باید در آن نمایش داده شود.
ابعاد و موقعیت (geometry) اولیه برای استفاده در پنجره. در صورت مشخص شدن این گزینه، مقدار آن در متغیر سراسری geometry در مفسر Tcl برنامه ذخیره می‌شود.
استفاده از name به عنوان عنوان نمایش‌داده‌شده در پنجره، و به عنوان نام مفسر برای دستورهای send.
اجرای همگام تمامی دستورهای کارساز X، به طوری که خطاها بی‌درنگ گزارش شوند. این امر منجر به اجرای بسیار کندتر خواهد شد، اما برای اشکال‌زدایی مفید است.
مشخص می‌کند که پنجره اصلی برنامه به جای ایجاد شدن به عنوان یک پنجره مستقل سطح بالا (toplevel)، باید درون پنجره‌ای با شناسه id تعبیه (embed) شود. Id باید به همان صورتی که مقدار گزینه -use برای ویجت‌های toplevel مشخص می‌شود، تعیین گردد (یعنی قالبی مشابه با مقدار بازگردانده‌شده توسط دستور winfo id دارد).
توجه داشته باشید که در برخی بسترها، این ویژگی تنها در صورتی به درستی کار می‌کند که id به یک frame یا toplevel در Tk اشاره کند که گزینه -container آن فعال باشد.
حالت بصری (visual) مورد استفاده برای پنجره را مشخص می‌کند. Visual می‌تواند هر یک از قالب‌های پشتیبانی‌شده توسط رویه Tk_GetVisual را داشته باشد.
--
تمام آرگومان‌های باقی‌مانده را بدون تفسیر به متغیر argv اسکریپت ارسال می‌کند. این سازوکاری را برای ارسال آرگومان‌هایی مانند -name به اسکریپت فراهم می‌کند، به جای آنکه توسط wish تفسیر شوند.

دستور Wish یک برنامه ساده متشکل از زبان دستوری Tcl، جعبه‌ابزار Tk، و یک برنامه اصلی است که دستورها را از ورودی استاندارد یا از یک فایل می‌خواند. این برنامه یک پنجره اصلی ایجاد کرده و سپس دستورهای Tcl را پردازش می‌کند. اگر wish همراه با آرگومان فراخوانی شود، چند آرگومان نخست، ?-encoding name? ?fileName?، نام یک فایل اسکریپت و به صورت اختیاری، کدگذاری داده‌های متنی ذخیره‌شده در آن فایل اسکریپت را مشخص می‌کنند. مقداری برای fileName شناسایی می‌شود اگر آرگومان مربوطه با “” آغاز نشود.

اگر هیچ آرگومانی وجود نداشته باشد، یا آرگومان‌ها یک fileName را مشخص نکنند، آنگاه wish دستورهای Tcl را به صورت تعاملی از ورودی استاندارد می‌خواند. پردازش دستورها تا زمانی که تمام پنجره‌ها حذف (بسته) شوند یا به انتهای فایل (EOF) در ورودی استاندارد برسد، ادامه خواهد یافت. اگر فایلی به نام “” در دایرکتوری خانگی کاربر وجود داشته باشد، wish درست پیش از خواندن اولین دستور از ورودی استاندارد، آن فایل را به عنوان یک اسکریپت Tcl اجرا می‌کند.

اگر آرگومان‌های داده‌شده به wish یک fileName را مشخص کنند، آنگاه با fileName به عنوان نام یک فایل اسکریپت برخورد می‌شود. Wish اسکریپت موجود در fileName را ارزیابی و اجرا می‌کند (که احتمالاً یک رابط کاربری می‌سازد)، سپس تا زمانی که تمام پنجره‌ها حذف (بسته) شوند به رویدادها پاسخ می‌دهد. دستورها از ورودی استاندارد خوانده نخواهند شد. هنگامی که نام یک فایل اسکریپت در خط فرمان wish ارائه می‌شود، هیچ ارزیابی خودکاری از “” صورت نمی‌گیرد، اما در صورت تمایل، فایل اسکریپت همواره می‌تواند با دستور source آن را اجرا کند.

توجه داشته باشید که در ویندوز، برنامه wishversion.exe از یک جنبه مهم دیگر نیز با برنامه tclshversion.exe تفاوت دارد: این برنامه به کنسول استاندارد ویندوز متصل نمی‌شود و در عوض یک برنامه پنجره‌ای است. به همین دلیل، علاوه بر این دسترسی به دستور console اختصاصی خود را فراهم می‌کند..SH "پردازش گزینه‌ها (OPTION PROCESSING)"

Wish به‌طور خودکار تمامی گزینه‌های خط فرمان شرح‌داده‌شده در خلاصه‌ی گزینه‌ها (OPTIONS) در بالا را پردازش می‌کند. هر آرگومان دیگر خط فرمان بجز این موارد، با استفاده از متغیرهای argc و argv که در ادامه توضیح داده شده‌اند، به برنامه منتقل می‌شوند.

نام برنامه، که برای مقاصدی چون دستورات send به کار می‌رود، از گزینه -name در صورت تعیین شدن گرفته می‌شود؛ در غیر این صورت از fileName (چنانچه مشخص شده باشد) یا از نام دستوری که wish با آن فراخوانی شده است گرفته می‌شود. در دو حالت آخر، اگر نام دارای نویسه‌ی “” باشد، تنها نویسه‌های پس از آخرین ممیز (اسلش) به عنوان نام برنامه استفاده می‌شوند.

کلاس برنامه، که برای مقاصدی چون تعیین گزینه‌ها با مشخصه‌ی RESOURCE_MANAGER یا فایل .Xdefaults به کار می‌رود، همانند نام آن است با این تفاوت که حرف اول آن بزرگ (capitalized) نوشته می‌شود.

Wish متغیرهای Tcl زیر را مقداردهی می‌کند:

شامل تعداد آرگومان‌های arg (در صورت عدم وجود 0)، بدون احتساب گزینه‌های شرح‌داده‌شده در بالا.
شامل یک فهرست (list) از زبان Tcl است که عناصر آن به ترتیب آرگومان‌های arg هستند که پس از گزینه -- قرار گرفته‌اند یا با هیچ‌یک از گزینه‌های توضیح‌داده‌شده در گزینه‌ها (OPTIONS) بالا مطابقت ندارند، یا در صورت نبود چنین آرگومان‌هایی، یک رشته‌ی خالی است.
در صورت تعیین fileName حاوی آن خواهد بود؛ در غیر این صورت، حاوی نامی است که wish با آن فراخوانی شده است.
اگر گزینه -geometry تعیین شده باشد، wish مقدار آن را در این متغیر کپی می‌کند. اگر این متغیر پس از ارزیابی fileName همچنان وجود داشته باشد، wish از مقدار آن در دستور wm geometry برای تنظیم اندازه و موقعیت (geometry) پنجره‌ی اصلی استفاده می‌کند.
اگر wish دستورات را به صورت تعاملی بخواند (fileName مشخص نشده باشد و ورودی استاندارد یک دستگاه شبیه ترمینال باشد) حاوی 1 است، و در غیر این صورت 0.

اگر یک اسکریپت Tcl را در فایلی ایجاد کنید که نخستین خط آن به این صورت باشد:

#!/usr/local/bin/wish
در این صورت، اگر آن را به عنوان قابل اجرا نشانه‌گذاری کنید، می‌توانید فایل اسکریپت را مستقیماً از شل (shell) خود فراخوانی نمایید. این امر بر این فرض استوار است که wish در مسیر پیش‌فرض در /usr/local/bin نصب شده باشد؛ اگر در جای دیگری نصب شده است باید خط بالا را متناسب با آن تغییر دهید. بسیاری از سیستم‌های UNIX اجازه نمی‌دهند طول خط #! از حدود ۳۰ نویسه تجاوز کند، بنابراین اطمینان حاصل کنید که فایل اجرایی wish با یک نام فایل کوتاه قابل دسترس باشد.

یک رویکرد حتی بهتر این است که فایل‌های اسکریپت خود را با این سه خط آغاز کنید:

#!/bin/sh
# the next line restarts using wish \
exec wish "$0" ${1+"$@"}
این روش نسبت به روش ذکرشده در بند قبلی سه مزیت دارد. نخست اینکه نیازی نیست محل فایل باینری wish به‌صورت ثابت درون اسکریپت نوشته شود (hard-wired): می‌تواند در هر مکانی از مسیر جستجوی شل شما (search path) قرار داشته باشد. دوم، محدودیت ۳۰ نویسه‌ای نام فایل در روش قبل را دور می‌زند. سوم، این روش حتی اگر خود wish یک شل‌اسکریپت باشد نیز کار خواهد کرد (این کار در برخی سیستم‌ها به منظور مدیریت چندین معماری یا سیستم‌عامل انجام می‌شود: اسکریپت wish یکی از چندین باینری را برای اجرا انتخاب می‌کند). این سه خط سبب می‌شوند که هر دو برنامه sh و wish اسکریپت را پردازش کنند، اما exec تنها توسط sh اجرا می‌شود. ابتدا sh اسکریپت را پردازش می‌کند؛ خط دوم را به عنوان یک توضیح (کامنت) در نظر می‌گیرد و خط سوم را اجرا می‌کند. دستور exec پردازش توسط شل را متوقف کرده و در عوض wish را اجرا می‌کند تا تمام اسکریپت را از ابتدا بازپردازش نماید. هنگامی که wish شروع به کار می‌کند، هر سه خط را به عنوان توضیح در نظر می‌گیرد، چرا که بک‌اسلش در پایان خط دوم باعث می‌شود خط سوم به عنوان ادامه‌ی توضیحِ خط دوم تلقی گردد.

پایان یک فایل اسکریپت ممکن است با پایان فیزیکی رسانه مشخص شود، یا با نویسه‌ی “” (“”) چنانچه این نویسه در فایل وجود داشته باشد، برنامه wish متن را تا این نویسه (بدون احتساب خود آن) می‌خواند. برنامه‌ای که نیازمند وجود این نویسه در فایل باشد می‌تواند آن را به صورت “” “” یا “” کدگذاری کند؛ یا می‌تواند با استفاده از دستوراتی چون format یا binary آن را تولید نماید.

هنگامی که wish به صورت تعاملی فراخوانی شود، معمولاً برای هر دستور با “” اعلان می‌دهد. شما می‌توانید با مقداردهی متغیرهای tcl_prompt1 و tcl_prompt2 اعلان را تغییر دهید. اگر متغیر tcl_prompt1 وجود داشته باشد، باید شامل یک اسکریپت Tcl برای خروجی دادن اعلان باشد؛ در این حالت wish به جای نمایش اعلان پیش‌فرض، اسکریپت موجود در tcl_prompt1 را ارزیابی می‌کند. متغیر tcl_prompt2 نیز به همین صورت زمانی استفاده می‌شود که یک خط جدید وارد شده باشد اما دستور جاری هنوز کامل نشده باشد؛ اگر tcl_prompt2 تنظیم نشده باشد، هیچ اعلانی برای دستورات ناتمام در خروجی چاپ نخواهد شد.

tclsh(1), toplevel(n), Tk_Main(3), Tk_MainLoop(3), Tk_MainWindow(3).SH "کلیدواژه‌ها (KEYWORDS)" برنامه، آرگومان، مفسر، اعلان، فایل اسکریپت، پوسته، جعبه‌ابزار، toplevel

8.0 Tk