'\" t .\" Title: fvwmscript .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 2.0.26 .\" Date: 2026-06-28 .\" Manual: \ \& .\" Source: \ \& .\" Language: English .\" .TH "FVWMSCRIPT" "1" "2026-06-28" "\ \&" "\ \&" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 .nh .ad l .de URL \fI\\$2\fP <\\$1>\\$3 .. .als MTO URL .if \n[.g] \{\ . mso www.tmac . am URL . ad l . . . am MTO . ad l . . . LINKSTYLE blue R < > .\} .SH "نام (NAME)" FvwmScript \- ماژولی برای ساخت واسط گرافیکی کاربر .SH "خلاصه دستور (SYNOPSIS)" .sp دستور FvwmScript باید توسط Fvwm فراخوانی و اجرا شود. این برنامه از خط فرمان کار نخواهد کرد. .SH "توضیحات (DESCRIPTION)" .sp ماژول FvwmScript به شما امکان می‌دهد برنامه‌های گرافیکی متعددی از قبیل ابزارهای جانبی دسکتاپ، پنل‌های دکمه با منوهای بازشو، پنجره‌های محاوره‌ای مُدال و غیره را ایجاد کنید. در زمان راه‌اندازی، FvwmScript فایلی را که در خط فرمان مشخص شده می‌خواند. این فایل حاوی اسکریپت است و در فایل پیکربندی اصلی Fvwm گنجانده نمی‌شود. .sp اسکریپت‌های FvwmScript کاملاً از طریق صفحه‌کلید قابل کنترل هستند. کلیدهای (Shift)\-Tab میان ویجت‌ها پیمایش می‌کنند، Return یک کلیک ماوس را شبیه‌سازی می‌کند، کلیدهای جهت‌نما مکان‌نما را جابه‌جا کرده یا مقادیر ویجت را تغییر می‌دهند، و Escape برای Menu و PopupMenu عمل "انصراف" را انجام می‌دهد. .SH "فراخوانی (INVOCATION)" .sp ماژول FvwmScript را می‌توان با درج خط `Module FvwmScript name_of_script\*(Aq در فایل .fvwm2rc فراخوانی کرد. نام فایل "name_of_script" می‌تواند با یک اسلش آغاز شود که در این حالت یک مسیر کامل (مطلق) است و فایل مستقیماً خوانده می‌شود. اگر "name_of_script" با اسلش شروع نشود، FvwmScript در چند مکان مختلف جستجو خواهد کرد. اگر فایل .fvwm2rc حاوی خط فرمان `*FvwmScript: Path path_of_the_script_directory\*(Aq باشد، FvwmScript آن دایرکتوری را امتحان می‌کند. اگر آن هم کار نکرد، FvwmScript دایرکتوری پیکربندی سیستم و دایرکتوری پیکربندی کاربر را مطابق با توضیحات دستور "Read" در صفحه راهنمای fvwm جستجو خواهد کرد. .sp دستور شروع FvwmScript می‌تواند روی یک خط جداگانه قرار گیرد (در صورتی که قرار باشد FvwmScript هنگام مقداردهی اولیه fvwm راه‌اندازی شود)، یا می‌توان آن را به یک منو، دکمه ماوس یا کلید میانبر متصل کرد تا بعداً فراخوانی شود. .SH "گزینه‌های پیکربندی (CONFIGURATION OPTIONS)" .sp دستورات زیر را می‌توان در فایل پیکربندی استفاده کرد (برای جزئیات بیشتر به بخش \fBMODULE COMMANDS\fP در \fIfvwm\fP(1) مراجعه کنید). این دستورات فقط در صورتی اعمال می‌شوند که دستورات معادل آن‌ها درون اسکریپت به کار نرفته باشند. .sp *FvwmScript: DefaultFont font .RS 4 فونت پیش‌فرضی که باید استفاده شود را مشخص می‌کند. اگر با این دستور یا درون اسکریپت با دستور Font تعیین نشود، فونت ثابت (fixed) در نظر گرفته می‌شود. .RE .sp *FvwmScript: DefaultFore color .RS 4 رنگ پیش‌زمینه پیش‌فرضی که باید استفاده شود را مشخص می‌کند. اگر با این دستور یا درون اسکریپت با دستور ForeColor تعیین نشود، رنگ سیاه (black) استفاده می‌شود. .RE .sp *FvwmScript: DefaultBack color .RS 4 رنگ پس‌زمینه پیش‌فرضی که باید استفاده شود را مشخص می‌کند. اگر با این دستور یا درون اسکریپت با دستور BackColor تعیین نشود، رنگ grey85 استفاده می‌شود. .RE .sp *FvwmScript: DefaultHilight color .RS 4 رنگ هایلایت پیش‌فرضی که باید استفاده شود را مشخص می‌کند. اگر با این دستور یا درون اسکریپت با دستور HilightColor تعیین نشود، رنگ grey100 استفاده می‌شود. .RE .sp *FvwmScript: DefaultShadow color .RS 4 رنگ سایه پیش‌فرضی که باید استفاده شود را مشخص می‌کند. اگر با این دستور یا درون اسکریپت با دستور ShadowColor تعیین نشود، رنگ grey55 استفاده می‌شود. .RE .sp *FvwmScript: DefaultColorset colorset .RS 4 به ماژول اعلام می‌کند که از مجموعه رنگ‌های \fIcolorset\fP به عنوان مجموعه رنگ پیش‌فرض استفاده کند. .RE .sp *FvwmScript: DefaultCursor cursor .RS 4 به ماژول اعلام می‌کند که از مکان‌نمای X11 به نام \fIcursor\fP به عنوان مکان‌نمای پیش‌فرض تمام ویجت‌ها استفاده کند. نام‌های مکان‌نما همان نام‌های تعریف‌شده در فایل سرایند X11/cursorfont.h اما بدون پیشوند XC_ هستند. .RE .SH "ساختار اسکریپت (ANATOMY OF A SCRIPT)" .sp ماژول FvwmScript از یک زبان برنامه‌نویسی ویژه استفاده می‌کند. هر اسکریپت از پنج بخش تشکیل شده است. بخش سرآیند (Heading) ویژگی‌های عمومی پنجره و مشخصات پیش‌فرض تمام ویجت‌ها را شامل می‌شود. بخش دوم شامل دستورالعمل‌هایی است که در هنگام راه‌اندازی اسکریپت اجرا می‌شوند. بخش سوم شامل وظایف دوره‌ای است که هر ثانیه یک‌بار اجرا می‌شوند. بخش چهارم شامل دستورالعمل‌هایی است که هنگام خروج اجرا می‌گردند. و بخش پایانی شامل توصیف ویجت‌ها است. ویجت‌ها شامل یازده نوع آیتم هستند: برچسب‌های متنی، ورودی‌های متنی تک‌خطی، دکمه‌های رادیویی، جعبه‌های انتخاب، دکمه‌های فشاری، نوارهای پیمایش افقی و عمودی، مستطیل‌ها، منوهای بازشو، swallowexecها و نوارهای پیمایش کوچک (mini scrollbars). .SH "سرآیند اسکریپت (HEADING OF A SCRIPT)" .sp نحو به صورت زیر است: .sp WindowTitle string .RS 4 این گزینه عنوان پنجره را تنظیم می‌کند. .RE .sp WindowSize width height .RS 4 این گزینه اندازه پنجره را تنظیم می‌کند. \fIwidth\fP و \fIheight\fP مقادیر عددی هستند. .RE .sp WindowPosition x y .RS 4 این گزینه موقعیت پنجره را تنظیم می‌کند. \fIx\fP و \fIy\fP مقادیر عددی هستند. .RE .sp ForeColor {color} .RS 4 این گزینه رنگ پیش‌زمینه پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند. .RE .sp BackColor {color} .RS 4 این گزینه رنگ پس‌زمینه پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند. .RE .sp HilightColor {color} .RS 4 این گزینه رنگ هایلایت پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند. .RE .sp ShadowColor {color} .RS 4 این گزینه رنگ سایه پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند. .RE .sp Colorset {n} .RS 4 این گزینه مجموعه رنگ پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند. .RE .sp Font {font} .RS 4 این گزینه قلم (فونت) پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند. .RE .sp UseGettext [locale_path] .RS 4 استفاده از سازوکار gettext را فعال می‌کند که توسط دستورالعمل‌های WindowLocaleTitle، LocaleTitle، ChangeLocaleTitle و تابع Gettext به کار می‌رود. اگر هیچ آرگومانی ارائه نشود، کاتالوگ بومی‌سازی پیش‌فرض FvwmScript استفاده می‌شود. این کاتالوگ در دایرکتوری نصب بومی‌سازی fvwm و دامنه متنی FvwmScript قرار دارد (install_prefix/share/locale/*/LC_MESSAGES/FvwmScript.mo). شما می‌توانید این کاتالوگ را دقیقاً همانند دستور fvwm به نام \fBLocalePath\fP بازنشانی کنید یا کاتالوگ‌های دیگری بیفزایید (به صفحه راهنمای fvwm مراجعه کنید). این دستورالعمل باید پیش از دستورالعمل WindowLocaleTitle قرار داده شود. .RE .sp WindowLocaleTitle string .RS 4 این گزینه عنوان پنجره را تنظیم می‌کند، اما از کاتالوگ(های) بومی‌سازی تعریف‌شده با UseGettext استفاده می‌کند. .RE .SH "مقداردهی اولیه (INITIALISATION)" .sp این بخش شامل دستورالعمل‌هایی است که در هنگام راه‌اندازی اجرا خواهند شد. به عنوان مثال: .sp .if n .RS 4 .nf .fam C Init Begin Do "Exec cat tada.voc > /dev/dsp" WarpPointer 1 Set $ToDo=Restart End .fam .fi .if n .RE .sp این دستورالعمل‌ها برای پخش یک صدا، انتقال مکان‌نما به ویجت ۱ و مقداردهی اولیه متغیر ToDo$ به مقدار "Restart" در هر راه‌اندازی استفاده می‌شوند. .SH "وظایف دوره‌ای (PERIODIC TASKS)" .sp این بخش از اسکریپت شامل دستورالعمل‌هایی است که هر ثانیه یک‌بار اجرا می‌شوند. به عنوان مثال: .sp .if n .RS 4 .nf .fam C PeriodicTasks Begin If (RemainderOfDiv (GetTime) 10)==0 Then Do {Exec xcalc} End .fam .fi .if n .RE .sp این مثال نشان می‌دهد که چگونه می‌توان xcalc را هر ۱۰ ثانیه یک‌بار اجرا کرد. .SH "تابع خروج (THE QUIT FUNCTION)" .sp این بخش از اسکریپت شامل دستورالعمل‌هایی است که هنگام خروج اسکریپت اجرا می‌شوند (پس از دستورالعمل Quit یا در صورتی که پنجره را با دستورات Close، Delete یا Destroy در fvwm ببندید). به عنوان مثال: .sp .if n .RS 4 .nf .fam C QuitFunc Begin Do {Echo bye, bye} End .fam .fi .if n .RE .sp توجه داشته باشید که اگر از دستور fvwm به نام KillModule برای بستن اسکریپت استفاده کنید، برخی دستورالعمل‌ها یا توابعی که به وجود پیوند ارتباطی میان اسکریپت و fvwm متکی هستند اجرا نخواهند شد (به عنوان مثال دستور Do). برای خاتمه دادن آرام و بی‌نقص یک اسکریپت با دستور fvwm به بخش \fBدستورات (COMMANDS)\fP مراجعه کنید. .SH "بخش اصلی اسکریپت (MAIN OF A SCRIPT)" .sp بخش اصلی اسکریپت حاوی توصیف تک‌تک ویجت‌های موجود در اسکریپت است. توصیف هر ویجت دو بخش دارد: بخش اول ویژگی‌های اولیه را توصیف می‌کند و بخش دوم شامل دستورالعمل‌هایی است که هنگام دریافت پیام‌ها توسط ویجت اجرا می‌شوند. تمام ویجت‌ها می‌توانند پیام ارسال و دریافت کنند. همه پیام‌ها با یک شماره مشخص می‌شوند. پیام "UserAction" هنگامی که کاربر با ویجت کار می‌کند برای آن ارسال می‌شود. نحو بخش اول به صورت زیر است: .sp .if n .RS 4 .nf .fam C Widget\& id\& # A number between 1 and 999 inclusive Property Type\& string Size width\& height Position\& x y Title\& { string } Value\& int MaxValue\& int MinValue\& int Font\& string ForeColor\& { color } BackColor\& { color } HilightColor\& { color } ShadowColor\& { color } Colorset int Flags\& flagsOpt .fam .fi .if n .RE .sp گزینه flagsOpt برای ویژگی Flags یک فهرست با فاصله است که شامل یک یا چند کلمه کلیدی \fIHidden\fP، \fINoReliefString\fP، \fINoFocus\fP، \fILeft\fP / \fICenter\fP / \fIRight\fP است. کلیدواژه \fIHidden\fP برای مشخص کردن مخفی بودن ویجت در هنگام راه‌اندازی به کار می‌رود. کلیدواژه \fINoReliefString\fP مشخص می‌کند که آیا رشته‌ها با برجستگی ترسیم شوند یا خیر. کلیدواژه \fINoFocus\fP مشخص می‌کند که آیا ویجت می‌تواند فوکوس صفحه‌کلید را دریافت کند یا خیر. به‌طور پیش‌فرض همه ویجت‌ها فوکوس می‌گیرند، به جز Rectangle، HDipstick و VDipstick که نمی‌توانند فوکوس دریافت کنند. به علاوه، ویجت‌های دارای NoFocus هنگام پیمایش میان ویجت‌ها با کلید میانبر (Shift\-)Tab نادیده گرفته می‌شوند. کلیدواژه‌های \fILeft\fP / \fICenter\fP / \fIRight\fP موقعیت قرارگیری متن را مشخص می‌کنند. این گزینه‌ها تنها برای ItemDraw، List، Menu، PopupMenu و PushButton کاربرد دارند. حالت پیش‌فرض برای ItemDraw و PushButton برابر با \fICenter\fP و برای سایر ویجت‌ها برابر با \fILeft\fP است. .sp می‌توان از LocaleTitle به‌جای Title برای استفاده از کاتالوگ(های) بومی‌سازی تعریف‌شده با UseGettext استفاده کرد. .sp موقعیت هر ویجت باید مشخص شود. .sp نحو بخش دوم به صورت زیر است: .sp .if n .RS 4 .nf .fam C Main Case message of SingleClic: Begin # list of instructions which will be # executed when widget receives # message "SingleClic". This message is # generated by the user. End 1 : Begin # list of instructions which will be # executed when widget receives # message 1 End End .fam .fi .if n .RE .SH "فهرست ویجت‌ها (LIST OF WIDGETS)" .sp پانزده نوع ویجت وجود دارد. .sp \fBCheckBox\fP: نمایش جعبه علامت‌زدنی (چک‌باکس) به همراه یک رشته. .RS 4 \fBTitle\fP: عنوان جعبه علامت‌زدنی. .sp \fBValue\fP: اگر Value برابر با 1 باشد، جعبه علامت زده شده و در غیر این صورت علامت نخورده است. .sp ویژگی \fBSize\fP نادیده گرفته می‌شود. .RE .sp \fBHDipstick\fP: نمایش یک نشانگر اندازه‌گیری افقی (dipstick). .RS 4 این ویجت می‌تواند برای نمایش میزان مصرف دیسک استفاده شود. .sp \fBValue\fP: مشخص کردن مقدار جاری نشانگر. .sp \fBMinValue\fP: مشخص کردن مقدار کمینه نشانگر. .sp \fBMaxValue\fP: مشخص کردن مقدار بیشینه نشانگر. .sp حداقل اندازه 30x11 اعمال می‌شود. .RE .sp \fBHScrollBar\fP: نمایش یک نوار پیمایش افقی. .RS 4 \fBValue\fP: موقعیت لغزنده (thumb). .sp \fBMaxValue\fP: حد بالای Value. .sp \fBMinValue\fP: حد پایین Value. .sp ویژگی ارتفاع نادیده گرفته می‌شود و حداقل عرضی اعمال می‌گردد. در صورتی که قرار باشد همه مقادیر قابل انتخاب باشند، عرض باید حداقل به اندازه بازه به علاوه ۳۷ باشد؛ به عنوان مثال کمینه ۰ و بیشینه ۱۰ دارای بازه ۱۱ است و بنابراین باید حداقل عرض ۴۸ داشته باشد. .RE .sp \fBItemDraw\fP: نمایش یک آیکون و/یا یک رشته. .RS 4 \fBTitle\fP: رشته‌ای که باید نمایش داده شود. .sp \fBIcon\fP: آیکونی که باید نمایش داده شود. .sp \fBMaxValue\fP: مختصات x مکان‌نما. .sp \fBMinValue\fP: مختصات y مکان‌نما. .sp اندازه به اندازه کافی بزرگ در نظر گرفته می‌شود تا عنوان و/یا آیکون را در خود جای دهد. .RE .sp \fBList\fP: نمایش یک فهرست. .RS 4 ابزار List به کاربر اجازه می‌دهد میان گزینه‌های گوناگون انتخاب کند. .sp \fBValue\fP: مشخص می‌کند کدام گزینه انتخاب شده است. .sp \fBMinValue\fP: اولین گزینه قابل مشاهده. .sp \fBTitle\fP: عنوان حاوی گزینه‌های نمایش داده شده در فهرست است. نحو به صورت زیر است: {Option 1|Option 2|...|Option N}. همه منوها در بالای پنجره نمایش داده می‌شوند. .sp حداقل ارتفاع سه آیتم اعمال می‌شود و عرض آن حداقل ۱۰۸ در نظر گرفته می‌شود. .RE .sp \fBMenu\fP: نمایش منویی که به کاربر اجازه می‌دهد یک گزینه را انتخاب کند. .RS 4 آیتم‌های از نوع Menu از چپ به راست در امتداد بالای پنجره چیده می‌شوند. ویژگی‌های اندازه و موقعیت نادیده گرفته می‌شوند. .sp \fBValue\fP: مشخص می‌کند کدام گزینه انتخاب شده است. .sp \fBTitle\fP: عنوان شامل گزینه‌های نمایش داده شده در منو است. نحو به صورت زیر است: {Option 1|Option 2|...|Option N}. .RE .sp \fBMiniScroll\fP: نمایش یک نوار پیمایش عمودی بسیار کوچک. .RS 4 \fBValue\fP: موقعیت لغزنده (thumb). .sp \fBMaxValue\fP: حد بالای Value. .sp \fBMinValue\fP: حد پایین Value. .sp اندازه بر روی 19x34 تنظیم شده است. .RE .sp \fBPopupMenu\fP: نمایش یک منوی بازشو. .RS 4 \fBValue\fP: مشخص می‌کند چه گزینه‌ای انتخاب شده است. .sp \fBTitle\fP: عنوان دارای نحو زیر است: {Option 1|Option 2|.\|.\|.|Option N}. بخش "Option 1|Option 2|.\|.\|.|Option N" همان منوی بازشویی است که هنگام فشردن دکمه ماوس نمایش داده می‌شود. .sp ویژگی اندازه نادیده گرفته می‌شود. .RE .sp \fBPushButton\fP: نمایش دکمه فشاری همراه با یک آیکون و/یا یک رشته. .RS 4 \fBTitle\fP: این رشته دارای نحو زیر است: {Title of the button|Option 1|Option 2|Option3|.\|.\|.|Option N}. بخش "Option 1|Option 2|.\|.\|.|Option N" منوی بازشویی است که هنگام فشردن دکمه راست ماوس نمایش داده می‌شود. .sp \fBIcon\fP: آیکونی که باید نمایش داده شود. .sp دکمه به اندازه‌ای بزرگ ساخته می‌شود که آیکون یا برچسب را در خود جای دهد. .RE .sp \fBRadioButton\fP: نمایش دکمه رادیویی همراه با یک رشته. .RS 4 \fBTitle\fP: عنوان دکمه رادیویی. .sp \fBValue\fP: اگر Value برابر با 1 باشد، دکمه انتخاب شده است، در غیر این صورت انتخاب نشده است. .sp ویژگی اندازه نادیده گرفته می‌شود. .RE .sp \fBRectangle\fP: نمایش یک مستطیل. .RS 4 این نوع ویجت می‌تواند برای تزئین و زیباسازی پنجره استفاده شود. .RE .sp \fBSwallowExec\fP .RS 4 این نوع ویجت باعث می‌شود FvwmScript یک پردازش جدید ایجاد کند، اولین پنجره‌ای که نام یا منبع آن برابر با Title باشد را به دام بیندازد (capture) و آن را درون پنجره اسکریپت نمایش دهد. .sp \fBTitle\fP: نام پنجره‌ای را که باید ضبط شده و در پنجره اسکریپت نمایش داده شود مشخص می‌کند. .sp \fBSwallowExec\fP: خط فرمانی را که برای ایجاد پردازش باید اجرا شود مشخص می‌کند. ماژول‌ها را نیز می‌توان به دام انداخت. .sp \fBValue\fP: ظاهر حاشیه را مشخص می‌کند. مقادیر ممکن: \-1، 0، 1. .sp اندازه حداقل به میزان 30x30 تنظیم می‌شود. .RE .sp \fBTextField\fP: نمایش یک کادر ورودی متن. .RS 4 کادر ورودی متن می‌تواند برای ویرایش یک رشته تک‌خطی استفاده شود. .sp \fBTitle\fP: محتوای کادر متن. .sp \fBValue\fP: موقعیت نقطه درج (مکان‌نما). .sp \fBMinValue\fP: موقعیت انتهای بخش انتخاب‌شده. .sp \fBMaxValue\fP: اولین نویسه قابل مشاهده عنوان. .sp ویژگی ارتفاع نادیده گرفته می‌شود و عرض حداقل ۴۰ پیکسل عریض‌تر از محتوای اولیه در نظر گرفته می‌شود. .RE .sp \fBVDipstick\fP: نمایش یک نشانگر اندازه‌گیری عمودی (dipstick). .RS 4 \fBValue\fP: مقدار جاری نشانگر را مشخص می‌کند. .sp \fBMinValue\fP: مقدار کمینه نشانگر را مشخص می‌کند. .sp \fBMaxValue\fP: مقدار بیشینه نشانگر را مشخص می‌کند. .sp اندازه حداقل 11x30 در نظر گرفته می‌شود. .RE .sp \fBVScrollBar\fP: نمایش یک نوار پیمایش عمودی. .RS 4 \fBValue\fP: موقعیت لغزنده (thumb). .sp \fBMaxValue\fP: حد بالای Value. .sp \fBMinValue\fP: حد پایین Value. .sp ویژگی عرض نادیده گرفته می‌شود و حداقل ارتفاعی اعمال می‌گردد. در صورتی که قرار باشد همه مقادیر قابل انتخاب باشند، ارتفاع باید حداقل به اندازه بازه به علاوه ۳۷ باشد؛ به عنوان مثال کمینه ۰ و بیشینه ۱۰ دارای بازه ۱۱ است و بنابراین باید حداقل ارتفاع ۴۸ داشته باشد. .RE .SH "دستورالعمل‌ها (INSTRUCTIONS)" .sp در اینجا توصیف تمام دستورالعمل‌ها آورده شده است. .sp HideWidget id : مخفی کردن ویجت شماره id.، ShowWidget id: نمایش ویجت شماره id.، ChangeValue id1 id2 .RS 4 تنظیم مقدار ویجت با شماره \fIid1\fP به مقدار \fIid2\fP. .RE .sp ChangeMaxValue id1 id2 .RS 4 تنظیم مقدار بیشینه ویجت با شماره \fIid1\fP به مقدار \fIid2\fP. .RE .sp ChangeMinValue id1 id2 .RS 4 تنظیم مقدار کمینه ویجت با شماره \fIid1\fP به مقدار \fIid2\fP. .RE .sp ChangeTitle id1 id2 .RS 4 تنظیم عنوان ویجت با شماره \fIid1\fP به مقدار \fIid2\fP. .RE .sp ChangeWindowTitle string .RS 4 تنظیم عنوان پنجره به رشته \fIstring\fP. .RE .sp ChangeWindowTitleFromArg numarg .RS 4 تنظیم عنوان پنجره به مقدار آرگومان شماره \fInumarg\fP اسکریپت. .RE .sp ChangeLocaleTitle id1 id2 .RS 4 همانند ChangeTitle اما از کاتالوگ(های) بومی‌سازی تعریف‌شده با UseGettext استفاده می‌کند. .RE .sp ChangeIcon id1 id2 .RS 4 تنظیم آیکون ویجت با شماره \fIid1\fP به مقدار \fIid2\fP. .RE .sp ChangeForeColor id1 {color} .RS 4 تنظیم رنگ پیش‌زمینه ویجت با شماره \fIid1\fP به {\fIcolor\fP}. .RE .sp ChangeBackColor id1 {color} .RS 4 تنظیم رنگ پس‌زمینه ویجت با شماره \fIid1\fP به {\fIcolor\fP}. .RE .sp ChangeColorSet id1 id2 .RS 4 تنظیم مجموعه رنگ ویجت با شماره \fIid1\fP به \fIid2\fP. مشخص کردن ویجت 0 مجموعه رنگ پنجره اصلی را تنظیم می‌کند. .RE .sp ChangePosition id1 x y .RS 4 انتقال ویجت با شماره \fIid1\fP به موقعیت (\fIx\fP,\fIy\fP). .RE .sp ChangeSize id1 width height .RS 4 تنظیم اندازه ویجت با شماره \fIid1\fP به (\fIwidth\fP,\fIheight\fP). .RE .sp ChangeFont id1 newfont .RS 4 تنظیم قلم (فونت) ویجت با شماره \fIid1\fP به \fInewfont\fP. .RE .sp WarpPointer id .RS 4 پرش و انتقال نشانگر ماوس به درون ویجت با شماره \fIid\fP. .RE .sp WriteToFile filename {str1} {str2} etc .RS 4 نوشتن رشته‌ای حاصل از الحاق تمام آرگومان‌های \fIstr1\fP، \fIstr2\fP و غیره در فایل \fIfilename\fP. .RE .sp Do {command args} .RS 4 اجرای دستور fvwm درون بلوک Do. هر دستور fvwm که در صفحه راهنمای fvwm توصیف شده قابل استفاده است. دستورات از این ماژول برای پردازش به برنامه اصلی fvwm ارسال می‌شوند. طول دستور و آرگومان‌های آن نمی‌تواند از ۹۸۸ نویسه تجاوز کند. .RE .sp Set $var={str1} {str2} etc .RS 4 الحاق تمام آرگومان‌ها به یک رشته و تنظیم متغیر var$ به این رشته. .RE .sp Quit: خروج از برنامه.، SendSignal id1 id2 .RS 4 ارسال پیامی با شماره \fIid2\fP به ویجت شماره \fIid1\fP. .RE .sp SendToScript id_script {str11} {str2} etc .RS 4 ارسال یک پیام به اسکریپت مشخص‌شده با id_script. این پیام حاصل الحاق str1، str2 و غیره است. .RE .sp Key \fIKeyname\fP \fIModifier\fP \fIid\fP \fIsig\fP \fIstr1\fP \fIstr2\fP etc .RS 4 یک کلید صفحه‌کلید را به دستورالعمل زیر متصل می‌کند: .sp SendSignal \fIid\fP \fIsig\fP .sp و "رشته اخیر" را به حاصل الحاق str1، str2 و غیره تنظیم می‌کند (به تابع LastString مراجعه کنید). فیلدهای \fIKeyname\fP و \fIModifiers\fP همانند دستور Key در fvwm تعریف می‌شوند. .RE .SH "آرگومان‌ها (ARGUMENTS)" .sp بیشتر دستورات از آرگومان‌ها استفاده می‌کنند. دو نوع آرگومان وجود دارد: اعداد و رشته‌ها. یک آرگومان عددی مقداری میان ۳۲۰۰۰\- تا ۳۲۰۰۰+ است. یک رشته همیشه با آکلاد محصور می‌شود. متغیرها همواره با نویسه "$" آغاز می‌شوند و می‌توانند هم شامل اعداد و هم رشته‌ها باشند. .SH "توابع (FUNCTIONS)" .sp همه توابع از آرگومان‌ها استفاده می‌کنند. توابع می‌توانند هم رشته و هم عدد بازگردانند. نحو آن‌ها به صورت زیر است: (function argument1 argument2 etc) .sp در اینجا فهرست کامل توابع آورده شده است: .sp (GetTitle id) .RS 4 عنوان ویجت با شماره \fIid\fP را بازمی‌گرداند. .RE .sp (GetValue id) .RS 4 مقدار جاری ویجت با شماره \fIid\fP را بازمی‌گرداند. .RE .sp (GetMinValue id) .RS 4 مقدار کمینه جاری ویجت با شماره \fIid\fP را بازمی‌گرداند. .RE .sp (GetMaxValue id) .RS 4 مقدار بیشینه جاری ویجت با شماره \fIid\fP را بازمی‌گرداند. .RE .sp (GetFore id) .RS 4 مقدار رنگ RGB پیش‌زمینه جاری ویجت با شماره \fIid\fP را در قالب هگزادسیمال RRGGBB بازمی‌گرداند. .RE .sp (GetBack id) .RS 4 مقدار رنگ RGB پس‌زمینه جاری ویجت با شماره \fIid\fP را در قالب هگزادسیمال RRGGBB بازمی‌گرداند. .RE .sp (GetHilight id) .RS 4 مقدار رنگ RGB هایلایت جاری ویجت با شماره \fIid\fP را در قالب هگزادسیمال RRGGBB بازمی‌گرداند. .RE .sp (GetShadow id) .RS 4 مقدار رنگ RGB سایه جاری ویجت با شماره \fIid\fP را در قالب هگزادسیمال RRGGBB بازمی‌گرداند. .RE .sp (GetOutput {str} int1 int2) .RS 4 دستور \fIstr\fP را اجرا می‌کند، خروجی استاندارد را دریافت کرده و کلمه‌ای را که در خط \fIint1\fP و موقعیت \fIint2\fP قرار دارد بازمی‌گرداند. اگر \fIint2\fP برابر با 1\- باشد، GetOutput کل خط را بازمی‌گرداند. .RE .sp (NumToHex int) .RS 4 مقدار هگزادسیمال عدد \fIint\fP را بازمی‌گرداند. .RE .sp (HexToNum {str}) .RS 4 مقدار ده‌دهی رشته \fIstr\fP را بازمی‌گرداند؛ \fIstr\fP باید یک مقدار هگزادسیمال باشد. .RE .sp (Add int1 int2) .RS 4 نتیجه (\fIint1\fP+\fIint2\fP) را بازمی‌گرداند. .RE .sp (Mult int1 int2) .RS 4 نتیجه (\fIint1\fP*\fIint2\fP) را بازمی‌گرداند. .RE .sp (Div int1 int2) .RS 4 نتیجه (\fIint1\fP/\fIint2\fP) را بازمی‌گرداند. .RE .sp (StrCopy {str} int1 int2) .RS 4 رشته‌ای را که میان موقعیت int1 و int2 قرار دارد بازمی‌گرداند. به عنوان مثال، (StrCopy {Hello} 1 2) مقدار {He} را بازمی‌گرداند. .RE .sp (LaunchScript {str}) .RS 4 این تابع اسکریپتی با نام str را اجرا کرده و یک شماره شناسایی بازمی‌گرداند. این شماره برای استفاده از توابع SendToScript و ReceiveFromScript ضروری است. رشته str شامل نام اسکریپت و برخی آرگومان‌ها است. .RE .sp (GetScriptArgument {int}) .RS 4 این تابع آرگومان اسکریپت استفاده‌شده در تابع LaunchScript را بازمی‌گرداند. اگر int برابر با صفر باشد، GetScriptArgument نام اسکریپت را بازمی‌گرداند. .RE .sp (GetScriptFather) .RS 4 این تابع شماره شناسایی اسکریپت والد را بازمی‌گرداند. .RE .sp (ReceivFromScript {int}) .RS 4 این تابع پیام ارسال‌شده توسط اسکریپت با شماره int را بازمی‌گرداند. .RE .sp (RemainderOfDiv {int1 int2}): t .RS 4 این تابع باقیمانده تقسیم (\fIint1\fP/\fIint2\fP) را بازمی‌گرداند. .RE .sp (GetTime) .RS 4 این تابع زمان را بر حسب ثانیه بازمی‌گرداند. .RE .sp (GetPid) .RS 4 این تابع شناسه پردازش (PID) اسکریپت را بازمی‌گرداند. .RE .sp (Gettext {\fIstr\fP}) .RS 4 این تابع ترجمه رشته \fIstr\fP را با استفاده از کاتالوگ(های) بومی‌سازی تعریف‌شده با UseGettext بازمی‌گرداند. .RE .sp (SendMsgAndGet {\fIcomId\fP} {\fIcmd\fP} \fIbool\fP) .RS 4 دستور \fIcmd\fP را با شناسه \fIcomId\fP به یک برنامه خارجی آماده برقراری ارتباط با اسکریپت از طریق پروتکل ویژه FvwmScript ارسال می‌کند. اگر \fIbool\fP برابر با 0 باشد، FvwmScript منتظر پاسخ برنامه خارجی نمی‌ماند. در این حالت اگر پیام با موفقیت به برنامه خارجی ارسال شود مقدار بازگشتی 1 و در غیر این صورت 0 خواهد بود. اگر \fIbool\fP برابر با 1 باشد، FvwmScript منتظر پاسخی از برنامه خارجی می‌ماند و مقدار بازگشتی همان پاسخ خواهد بود (خطی با حداکثر ۳۲۰۰۰ نویسه). اگر ارتباط ناموفق باشد، مقدار بازگشتی 0 است. برای توصیف پروتکل ارتباطی استفاده‌شده، بخش \fBپروتکل ارتباطی (A COMMUNICATION PROTOCOL)\fP را ببینید. .RE .sp (Parse {\fIstr\fP} \fIint\fP) .RS 4 که در آن \fIstr\fP باید رشته‌ای به فرمت X1S1X2S2X3S3.\|.\|.SnXn باشد .sp جایی که Xnها اعدادی شامل چهار رقم ده‌دهی هستند و Snها رشته‌هایی با طول دقیقاً برابر با Xn می‌باشند. مقدار بازگشتی رشته S\fIint\fP است. اگر \fIint\fP خارج از محدوده باشد (مثلاً n<)، مقدار بازگشتی یک رشته خالی است. اگر \fIstr\fP به فرمت مشخص‌شده نباشد، مقدار بازگشتی غیرقابل پیش‌بینی خواهد بود (اما معمولاً خالی است). این تابع برای پردازش رشته‌های بازگردانده‌شده توسط تابع SendMsgAndGet کاربرد دارد. .RE .sp (LastString) .RS 4 این تابع "رشته کاری جاری" را برای دستورالعمل Key و دستور SendString بازمی‌گرداند (به بخش \fBدستورات (COMMANDS)\fP مراجعه کنید). در زمان راه‌اندازی این رشته خالی است، اما هنگامی که یک کلید میانبر Key شناسایی شود (یا به ترتیب، یک دستور SendString دریافت گردد)، این رشته به رشته مرتبط با دستورالعمل (یا دستور) تنظیم می‌شود. .RE .SH "حلقه‌های شرطی (CONDITIONAL LOOPS)" .sp سه نوع حلقه شرطی وجود دارد. دستورالعمل "If\-Then\-Else" دارای نحو زیر است: .sp .if n .RS 4 .nf .fam C If $ToDo=={Open xcalc} Then Do {Exec xcalc &}\& # List of instructions Else Begin Do {Exec killall xcalc &}\& # List of instructions Do {Exec echo xcalc killed >/dev/console} End .fam .fi .if n .RE .sp بخش دوم "Else\-Begin\-End" اختیاری است. اگر حلقه تنها شامل یک دستورالعمل باشد، می‌توان Begin و End را حذف کرد. دستورالعمل "While\-Do" دارای نحو زیر است: .sp .if n .RS 4 .nf .fam C While $i<5 Do Begin Set $i=(Add i 1)\& # List of instructions End .fam .fi .if n .RE .sp دو رشته را می‌توان با "==" و دو عدد را با "<"، "\(lA"، "=="، ">="، ">" مقایسه کرد. حلقه "For\-Do\-Begin\-End" دارای نحو زیر است: .sp .if n .RS 4 .nf .fam C For $i=1 To 20 Do Begin Do {Exec xcalc &}\& # List of instructions End .fam .fi .if n .RE .SH "دستورات (COMMANDS)" .sp دستور fvwm زیر ممکن است در هر زمانی اجرا شود: .sp .RS 4 .sp SendToModule \fIScriptName\fP SendString \fIid\fP \fIsig\fP \fIstr\fP .RE .sp این دستور رشته زیر را به هر ماژولی با نام یا نام مستعار منطبق بر \fIScriptName\fP ارسال می‌کند: .sp .RS 4 .sp SendString \fIid\fP \fIsig\fP \fIstr\fP .RE .sp هنگامی که یک FvwmScript چنین پیامی را دریافت می‌کند، سیگنالی با شماره \fIsig\fP را به ویجت \fIid\fP ارسال می‌کند و رشته \fIstr\fP را می‌توان با تابع LastString به دست آورد. بگذارید یک مثال بزنیم. فرض کنید اسکریپتی به نام MyScript با ویجت زیر دارید: .sp .if n .RS 4 .nf .fam C Widget 50 Property Type PushButton Title {Quit} ... Main Case message of SingleClic: Begin Quit End 1 : Begin Set $str = (LastString) If $str == {Quit} Then Quit Else ChangeTitle 33 $str End End .fam .fi .if n .RE .sp سپس دستور .sp .if n .RS 4 .nf .fam C SendToModule MyScript SendString 50 1 str .fam .fi .if n .RE .sp در صورتی که str برابر با "Quit" باشد اسکریپت MyScript را مجبور به خروج می‌کند و در غیر این صورت عنوان ویجت ۳۳ را به str تغییر می‌دهد. .sp این دستور می‌تواند برای تغییر عنوان پنجره استفاده شود: .sp .RS 4 .sp SendToModule \fIScriptName\fP ChangeWindowTitle \fInewTitle\fP \fI[oldTitle]\fP .RE .sp این دستور باعث می‌شود که هر ماژولی با نام مستعار یا نامی منطبق بر \fIScriptName\fP عنوان پنجره مرتبط با خود را به \fInewTitle\fP تغییر دهد. آرگومان اختیاری \fIoldTitle\fP زمانی کاربرد دارد که چندین نمونه از یک اسکریپت در حال اجرا باشند. این آرگومان با مشخص کردن نام پنجره مرتبط با اسکریپت هدف، مانع از تغییر نام تمام این نمونه‌ها می‌شود (به مثال زیر توجه کنید). .sp .if n .RS 4 .nf .fam C + I Module FvwmScript FvwmStorageSend "/dev/hda6" + I Wait FvwmStorageSend + I SendToModule FvwmStorageSend ChangeWindowTitle HDA6 + I Module FvwmScript FvwmStorageSend "/dev/hda1" + I Wait FvwmStorageSend + I SendToModule FvwmStorageSend ChangeWindowTitle HDA1 FvwmStorageSend .fam .fi .if n .RE .sp در آخرین مورد، بدون آرگومان FvwmStorageSend، دستور SendToModule نام هر دو نمونه FvwmStorageSend را به HDA1 تغییر می‌داد. .SH "مثال‌ها (EXAMPLES)" .sp نمونه‌هایی از اسکریپت‌ها را در دایرکتوری پیکربندی fvwm خواهید یافت. .sp اسکریپت‌های FvwmScript\-BellSetup، FvwmScript\-KeyboardSetup، FvwmScript\-PointerSetup و FvwmScript\-ScreenSetup مجموعه‌ای از اسکریپت‌ها هستند که تنظیمات X را تغییر می‌دهند. این اسکریپت‌ها ترجیحات را در فایلی به نام ~/.xinit\-fvwmrc ذخیره می‌کنند (اگر می‌خواهید از نام فایل دیگری استفاده کنید، آن را به عنوان اولین آرگومان اسکریپت بدهید). اگر می‌خواهید این ترجیحات در هر بار راه‌اندازی بارگذاری شوند، باید خط ".xinit\-fvwmrc" را در فایل .xinitrc (یا .xsession) خود پیش از شروع fvwm بگنجانید. .sp اسکریپت FvwmScript\-BaseConfig خط‌مشی‌های ماوس برای فوکوس و صفحه‌بندی fvwm، جای‌گذاری پنجره‌ها، شفافیت (opacity) و سایر ویژگی‌های دستورات move و resize، چسبندگی (snap attraction) و پویانمایی سایه‌روشن را تغییر می‌دهد. این اسکریپت ترجیحات را در فایلی به نام .FvwmBaseConfig در دایرکتوری داده‌های کاربر (یعنی HOME/.fvwm$ یا FVWM_USERDIR$ در صورت تنظیم شدن) ذخیره می‌کند. اگر می‌خواهید این ترجیحات در هر بار راه‌اندازی بارگذاری شوند، باید خط "Read .FvwmBaseConfig" را به فایل پیکربندی fvwm خود اضافه کنید. اگر می‌خواهید از نام فایل دیگری استفاده کنید، آن را به عنوان اولین آرگومان اسکریپت وارد کنید. هنگامی که روی Ok یا Apply کلیک می‌کنید، یک تابع fvwm که ممکن است با نام BaseConfigOkFunc یا BaseConfigApplyFunc تعریف کرده باشید فراخوانی می‌شود. این امر امکان بارگذاری مجدد استایل‌های خاص برنامه‌ها را که ممکن است اسکریپت تغییر داده باشد فراهم می‌کند (مثلاً AddToFunc BaseConfigOkFunc I Read MyAppStyle). .sp اسکریپت FvwmScript\-Buttons یک پنل دکمه‌ها است که می‌تواند جایگزین FvwmButtons شود (این اسکریپت از منوهای بازشو پشتیبانی کرده و به xload، xclock، FvwmPager، TkDesk نیاز دارد). اسکریپت FvwmScript\-Colorset به شما امکان ویرایش مجموعه رنگ‌ها را می‌دهد. اسکریپت FvwmScript\-Date امکان تنظیم تاریخ و ساعت را فراهم می‌کند. اسکریپت FvwmScript\-FileBrowser یک مرورگر فایل است که توسط اسکریپت‌های دیگر استفاده می‌شود. اسکریپت FvwmScript\-Find یک رابط ساده برای find است. اسکریپت FvwmScript\-Quit به کاربر امکان خروج از fvwm، راه‌اندازی مجدد fvwm یا یک مدیر پنجره دیگر، یا خاموش کردن و راه‌اندازی مجدد رایانه را می‌دهد. اسکریپت FvwmScript\-ScreenDump یک ابزار ثبت تصویر صفحه نمایش است. اسکریپت FvwmScript\-WidgetDemo یک اسکریپت نمونه کامل است. برای FvwmScript\-ComExample به بخش بعدی مراجعه کنید. .SH "پروتکل ارتباطی (A COMMUNICATION PROTOCOL)" .sp زبان FvwmScript یک زبان برنامه‌نویسی ساده (و با امکانات محدود) است. اگر لازم است با حجم بالایی از داده‌ها کار کنید یا نیاز به استفاده از الگوریتم‌های پیچیده دارید، بهتر است از یک برنامه خارجی (مثلاً به زبان perl) استفاده کنید و اطلاعات مورد نیاز را به اسکریپت FvwmScript خود "ارسال" نمایید. اولین رویکرد استفاده از تابع GetOutput است. این روش ساده است اما باید هر بار که به اطلاعات نیاز دارید برنامه خارجی را دوباره اجرا کنید (که ممکن است مشکلات کارایی ایجاد کند). رویکرد دوم استفاده از تابع SendMsgAndGet است که با بهره‌گیری از هر زبان برنامه‌نویسی که بتواند با لوله‌های نام‌گذاری‌شده (fifos) کار کند، FvwmScript را گسترش می‌دهد. ما این راه‌حل را در این بخش توصیف می‌کنیم. (رویکرد سوم استفاده از fvwm\-themes\-com از بسته fvwm\-themes است، اما در واقع متد SendMsgAndGet پیاده‌سازی fvwm\-themes\-com درون خود FvwmScript است و کارایی بهتری ارائه می‌دهد). .sp به طور کلی، شما یک برنامه "خارجی" (به اختصار، برنامه) را از درون اسکریپت FvwmScript خود (به اختصار، اسکریپت) راه‌اندازی می‌کنید. این برنامه در پس‌زمینه اجرا می‌شود و شما از تابع SendMsgAndGet در اسکریپت خود برای پرسیدن سوال یا ارسال دستورالعمل به برنامه استفاده می‌کنید. برنامه باید دقیقاً یک پروتکل ارتباطی معین را رعایت کند. در وهله اول، یک شناسه \fIcomId\fP برای ارتباط وجود دارد که برای پیاده‌سازی مناسب پروتکل باید حاوی شناسه پردازش اسکریپت باشد (از تابع GetPid استفاده کنید و \fIcomId\fP را از طریق یک گزینه به برنامه پاس دهید). این پروتکل از دو fifo در دایرکتوری کاربر fvwm با نام‌های .tmp\-com\-in\-\fIcomId\fP و .tmp\-com\-out\-\fIcomId\fP استفاده می‌کند. برنامه باید روی fifo با نام .tmp\-com\-in\-\fIcomId\fP گوش فرا دهد. سپس، هنگامی که FvwmScript تابعی به صورت زیر را اجرا می‌کند: .sp .RS 4 .sp Set $answer = (SendMsgAndGet {\fIcomId\fP} {\fIcmd\fP} \fIbool\fP) .RE .sp ماژول FvwmScript مقدار \fIcmd\fP را روی این fifo می‌نویسد. بدین ترتیب برنامه می‌تواند \fIcmd\fP را بخواند و عملیات مناسب را اجرا کند (برنامه باید fifo ورودی را حذف کند تا از ارتباطات چندگانه پشتیبانی شود). اگر \fIbool\fP برابر با 0 باشد، FvwmScript منتظر پاسخی از برنامه نمی‌ماند و در صورت موفقیت اقدامات قبلی مقدار 1 و در صورت شکست مقدار 0 را بازمی‌گرداند (سپس برنامه باید به fifo ورودی بازگردد). اگر \fIbool\fP برابر با 1 باشد، FvwmScript مدت ۲۰ ثانیه منتظر پاسخ از برنامه می‌ماند و در عوض پاسخ را به اسکریپت بازمی‌گرداند (توجه داشته باشید که \fIbool\fP به برنامه پاس داده نمی‌شود زیرا خود برنامه باید بداند کدام دستورات نیاز به پاسخ دارند). برای پاسخ دادن، برنامه fifo با نام .tmp\-com\-out\-\fIcomId\fP را ایجاد کرده و پاسخ را روی آن می‌نویسد. برنامه باید منتظر بماند تا FvwmScript پاسخ را بخواند و سپس باید fifo خروجی را حذف کرده و به fifo ورودی بازگردد. پاسخ باید شامل یک خط با حداکثر ۳۲۰۰۰ نویسه باشد (برای مدیریت چندین خط به عنوان یک خط، به تابع Parse نگاه کنید). .sp یک راه ساده برای درک این پروتکل و نوشتن اسکریپت‌ها و برنامه‌هایی که از آن استفاده می‌کنند، نگاه کردن به نمونه‌های FvwmScript\-ComExample و fvwm\-script\-ComExample.pl است (که در دایرکتوری داده‌های fvwm یافت می‌شوند). علاوه بر این، این پیاده‌سازی پروتکل به پرسش‌هایی مانند: اگر اسکریپت به دلیل نامناسبی متوقف شود چه باید کرد؟ اگر برنامه به دلیل نامناسبی متوقف شود چه باید کرد؟ و... پاسخ می‌دهد. .SH "اشکالات (BUGS)" .sp اگر به ویجت‌هایی که تعریف نشده‌اند دسترسی پیدا شود، FvwmScript متوقف می‌شود (crash می‌کند). .SH "نویسنده (AUTHOR)" .sp Frederic Cordier (\c .MTO "cordie97\(atcui.unige.ch" "" "" or .MTO "f\-cord96\(atuniv\-lyon1.fr" "" ")." .SH "مشارکت‌کننده (CONTRIBUTOR)" .sp Eddy J. Gurney (\c .MTO "eddy\(atgizmo.aa.ans.net" "" ")."