FVWMSCRIPT(1)   FVWMSCRIPT(1)

FvwmScript - ماژولی برای ساخت واسط گرافیکی کاربر

دستور FvwmScript باید توسط Fvwm فراخوانی و اجرا شود. این برنامه از خط فرمان کار نخواهد کرد.

ماژول FvwmScript به شما امکان می‌دهد برنامه‌های گرافیکی متعددی از قبیل ابزارهای جانبی دسکتاپ، پنل‌های دکمه با منوهای بازشو، پنجره‌های محاوره‌ای مُدال و غیره را ایجاد کنید. در زمان راه‌اندازی، FvwmScript فایلی را که در خط فرمان مشخص شده می‌خواند. این فایل حاوی اسکریپت است و در فایل پیکربندی اصلی Fvwm گنجانده نمی‌شود.

اسکریپت‌های FvwmScript کاملاً از طریق صفحه‌کلید قابل کنترل هستند. کلیدهای (Shift)-Tab میان ویجت‌ها پیمایش می‌کنند، Return یک کلیک ماوس را شبیه‌سازی می‌کند، کلیدهای جهت‌نما مکان‌نما را جابه‌جا کرده یا مقادیر ویجت را تغییر می‌دهند، و Escape برای Menu و PopupMenu عمل "انصراف" را انجام می‌دهد.

ماژول FvwmScript را می‌توان با درج خط `Module FvwmScript name_of_script' در فایل .fvwm2rc فراخوانی کرد. نام فایل "name_of_script" می‌تواند با یک اسلش آغاز شود که در این حالت یک مسیر کامل (مطلق) است و فایل مستقیماً خوانده می‌شود. اگر "name_of_script" با اسلش شروع نشود، FvwmScript در چند مکان مختلف جستجو خواهد کرد. اگر فایل .fvwm2rc حاوی خط فرمان `*FvwmScript: Path path_of_the_script_directory' باشد، FvwmScript آن دایرکتوری را امتحان می‌کند. اگر آن هم کار نکرد، FvwmScript دایرکتوری پیکربندی سیستم و دایرکتوری پیکربندی کاربر را مطابق با توضیحات دستور "Read" در صفحه راهنمای fvwm جستجو خواهد کرد.

دستور شروع FvwmScript می‌تواند روی یک خط جداگانه قرار گیرد (در صورتی که قرار باشد FvwmScript هنگام مقداردهی اولیه fvwm راه‌اندازی شود)، یا می‌توان آن را به یک منو، دکمه ماوس یا کلید میانبر متصل کرد تا بعداً فراخوانی شود.

دستورات زیر را می‌توان در فایل پیکربندی استفاده کرد (برای جزئیات بیشتر به بخش MODULE COMMANDS در fvwm(1) مراجعه کنید). این دستورات فقط در صورتی اعمال می‌شوند که دستورات معادل آن‌ها درون اسکریپت به کار نرفته باشند.

*FvwmScript: DefaultFont font

فونت پیش‌فرضی که باید استفاده شود را مشخص می‌کند. اگر با این دستور یا درون اسکریپت با دستور Font تعیین نشود، فونت ثابت (fixed) در نظر گرفته می‌شود.

*FvwmScript: DefaultFore color

رنگ پیش‌زمینه پیش‌فرضی که باید استفاده شود را مشخص می‌کند. اگر با این دستور یا درون اسکریپت با دستور ForeColor تعیین نشود، رنگ سیاه (black) استفاده می‌شود.

*FvwmScript: DefaultBack color

رنگ پس‌زمینه پیش‌فرضی که باید استفاده شود را مشخص می‌کند. اگر با این دستور یا درون اسکریپت با دستور BackColor تعیین نشود، رنگ grey85 استفاده می‌شود.

*FvwmScript: DefaultHilight color

رنگ هایلایت پیش‌فرضی که باید استفاده شود را مشخص می‌کند. اگر با این دستور یا درون اسکریپت با دستور HilightColor تعیین نشود، رنگ grey100 استفاده می‌شود.

*FvwmScript: DefaultShadow color

رنگ سایه پیش‌فرضی که باید استفاده شود را مشخص می‌کند. اگر با این دستور یا درون اسکریپت با دستور ShadowColor تعیین نشود، رنگ grey55 استفاده می‌شود.

*FvwmScript: DefaultColorset colorset

به ماژول اعلام می‌کند که از مجموعه رنگ‌های colorset به عنوان مجموعه رنگ پیش‌فرض استفاده کند.

*FvwmScript: DefaultCursor cursor

به ماژول اعلام می‌کند که از مکان‌نمای X11 به نام cursor به عنوان مکان‌نمای پیش‌فرض تمام ویجت‌ها استفاده کند. نام‌های مکان‌نما همان نام‌های تعریف‌شده در فایل سرایند X11/cursorfont.h اما بدون پیشوند XC_ هستند.

ماژول FvwmScript از یک زبان برنامه‌نویسی ویژه استفاده می‌کند. هر اسکریپت از پنج بخش تشکیل شده است. بخش سرآیند (Heading) ویژگی‌های عمومی پنجره و مشخصات پیش‌فرض تمام ویجت‌ها را شامل می‌شود. بخش دوم شامل دستورالعمل‌هایی است که در هنگام راه‌اندازی اسکریپت اجرا می‌شوند. بخش سوم شامل وظایف دوره‌ای است که هر ثانیه یک‌بار اجرا می‌شوند. بخش چهارم شامل دستورالعمل‌هایی است که هنگام خروج اجرا می‌گردند. و بخش پایانی شامل توصیف ویجت‌ها است. ویجت‌ها شامل یازده نوع آیتم هستند: برچسب‌های متنی، ورودی‌های متنی تک‌خطی، دکمه‌های رادیویی، جعبه‌های انتخاب، دکمه‌های فشاری، نوارهای پیمایش افقی و عمودی، مستطیل‌ها، منوهای بازشو، swallowexecها و نوارهای پیمایش کوچک (mini scrollbars).

نحو به صورت زیر است:

WindowTitle string

این گزینه عنوان پنجره را تنظیم می‌کند.

WindowSize width height

این گزینه اندازه پنجره را تنظیم می‌کند. width و height مقادیر عددی هستند.

WindowPosition x y

این گزینه موقعیت پنجره را تنظیم می‌کند. x و y مقادیر عددی هستند.

ForeColor {color}

این گزینه رنگ پیش‌زمینه پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند.

BackColor {color}

این گزینه رنگ پس‌زمینه پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند.

HilightColor {color}

این گزینه رنگ هایلایت پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند.

ShadowColor {color}

این گزینه رنگ سایه پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند.

Colorset {n}

این گزینه مجموعه رنگ پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند.

Font {font}

این گزینه قلم (فونت) پیش‌فرض را برای تمام ویجت‌ها تنظیم می‌کند.

UseGettext [locale_path]

استفاده از سازوکار gettext را فعال می‌کند که توسط دستورالعمل‌های WindowLocaleTitle، LocaleTitle، ChangeLocaleTitle و تابع Gettext به کار می‌رود. اگر هیچ آرگومانی ارائه نشود، کاتالوگ بومی‌سازی پیش‌فرض FvwmScript استفاده می‌شود. این کاتالوگ در دایرکتوری نصب بومی‌سازی fvwm و دامنه متنی FvwmScript قرار دارد (install_prefix/share/locale/*/LC_MESSAGES/FvwmScript.mo). شما می‌توانید این کاتالوگ را دقیقاً همانند دستور fvwm به نام LocalePath بازنشانی کنید یا کاتالوگ‌های دیگری بیفزایید (به صفحه راهنمای fvwm مراجعه کنید). این دستورالعمل باید پیش از دستورالعمل WindowLocaleTitle قرار داده شود.

WindowLocaleTitle string

این گزینه عنوان پنجره را تنظیم می‌کند، اما از کاتالوگ(های) بومی‌سازی تعریف‌شده با UseGettext استفاده می‌کند.

این بخش شامل دستورالعمل‌هایی است که در هنگام راه‌اندازی اجرا خواهند شد. به عنوان مثال:

Init
Begin
  Do "Exec cat tada.voc > /dev/dsp" WarpPointer 1
  Set $ToDo=Restart End

این دستورالعمل‌ها برای پخش یک صدا، انتقال مکان‌نما به ویجت ۱ و مقداردهی اولیه متغیر ToDo$ به مقدار "Restart" در هر راه‌اندازی استفاده می‌شوند.

این بخش از اسکریپت شامل دستورالعمل‌هایی است که هر ثانیه یک‌بار اجرا می‌شوند. به عنوان مثال:

PeriodicTasks
Begin
  If (RemainderOfDiv (GetTime) 10)==0 Then
    Do {Exec xcalc}
  End

این مثال نشان می‌دهد که چگونه می‌توان xcalc را هر ۱۰ ثانیه یک‌بار اجرا کرد.

این بخش از اسکریپت شامل دستورالعمل‌هایی است که هنگام خروج اسکریپت اجرا می‌شوند (پس از دستورالعمل Quit یا در صورتی که پنجره را با دستورات Close، Delete یا Destroy در fvwm ببندید). به عنوان مثال:

QuitFunc
  Begin
    Do {Echo bye, bye}
  End

توجه داشته باشید که اگر از دستور fvwm به نام KillModule برای بستن اسکریپت استفاده کنید، برخی دستورالعمل‌ها یا توابعی که به وجود پیوند ارتباطی میان اسکریپت و fvwm متکی هستند اجرا نخواهند شد (به عنوان مثال دستور Do). برای خاتمه دادن آرام و بی‌نقص یک اسکریپت با دستور fvwm به بخش دستورات (COMMANDS) مراجعه کنید.

بخش اصلی اسکریپت حاوی توصیف تک‌تک ویجت‌های موجود در اسکریپت است. توصیف هر ویجت دو بخش دارد: بخش اول ویژگی‌های اولیه را توصیف می‌کند و بخش دوم شامل دستورالعمل‌هایی است که هنگام دریافت پیام‌ها توسط ویجت اجرا می‌شوند. تمام ویجت‌ها می‌توانند پیام ارسال و دریافت کنند. همه پیام‌ها با یک شماره مشخص می‌شوند. پیام "UserAction" هنگامی که کاربر با ویجت کار می‌کند برای آن ارسال می‌شود. نحو بخش اول به صورت زیر است:

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

گزینه flagsOpt برای ویژگی Flags یک فهرست با فاصله است که شامل یک یا چند کلمه کلیدی Hidden، NoReliefString، NoFocus، Left / Center / Right است. کلیدواژه Hidden برای مشخص کردن مخفی بودن ویجت در هنگام راه‌اندازی به کار می‌رود. کلیدواژه NoReliefString مشخص می‌کند که آیا رشته‌ها با برجستگی ترسیم شوند یا خیر. کلیدواژه NoFocus مشخص می‌کند که آیا ویجت می‌تواند فوکوس صفحه‌کلید را دریافت کند یا خیر. به‌طور پیش‌فرض همه ویجت‌ها فوکوس می‌گیرند، به جز Rectangle، HDipstick و VDipstick که نمی‌توانند فوکوس دریافت کنند. به علاوه، ویجت‌های دارای NoFocus هنگام پیمایش میان ویجت‌ها با کلید میانبر (Shift-)Tab نادیده گرفته می‌شوند. کلیدواژه‌های Left / Center / Right موقعیت قرارگیری متن را مشخص می‌کنند. این گزینه‌ها تنها برای ItemDraw، List، Menu، PopupMenu و PushButton کاربرد دارند. حالت پیش‌فرض برای ItemDraw و PushButton برابر با Center و برای سایر ویجت‌ها برابر با Left است.

می‌توان از LocaleTitle به‌جای Title برای استفاده از کاتالوگ(های) بومی‌سازی تعریف‌شده با UseGettext استفاده کرد.

موقعیت هر ویجت باید مشخص شود.

نحو بخش دوم به صورت زیر است:

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

پانزده نوع ویجت وجود دارد.

CheckBox: نمایش جعبه علامت‌زدنی (چک‌باکس) به همراه یک رشته.

Title: عنوان جعبه علامت‌زدنی.

Value: اگر Value برابر با 1 باشد، جعبه علامت زده شده و در غیر این صورت علامت نخورده است.

ویژگی Size نادیده گرفته می‌شود.

HDipstick: نمایش یک نشانگر اندازه‌گیری افقی (dipstick).

این ویجت می‌تواند برای نمایش میزان مصرف دیسک استفاده شود.

Value: مشخص کردن مقدار جاری نشانگر.

MinValue: مشخص کردن مقدار کمینه نشانگر.

MaxValue: مشخص کردن مقدار بیشینه نشانگر.

حداقل اندازه 30x11 اعمال می‌شود.

HScrollBar: نمایش یک نوار پیمایش افقی.

Value: موقعیت لغزنده (thumb).

MaxValue: حد بالای Value.

MinValue: حد پایین Value.

ویژگی ارتفاع نادیده گرفته می‌شود و حداقل عرضی اعمال می‌گردد. در صورتی که قرار باشد همه مقادیر قابل انتخاب باشند، عرض باید حداقل به اندازه بازه به علاوه ۳۷ باشد؛ به عنوان مثال کمینه ۰ و بیشینه ۱۰ دارای بازه ۱۱ است و بنابراین باید حداقل عرض ۴۸ داشته باشد.

ItemDraw: نمایش یک آیکون و/یا یک رشته.

Title: رشته‌ای که باید نمایش داده شود.

Icon: آیکونی که باید نمایش داده شود.

MaxValue: مختصات x مکان‌نما.

MinValue: مختصات y مکان‌نما.

اندازه به اندازه کافی بزرگ در نظر گرفته می‌شود تا عنوان و/یا آیکون را در خود جای دهد.

List: نمایش یک فهرست.

ابزار List به کاربر اجازه می‌دهد میان گزینه‌های گوناگون انتخاب کند.

Value: مشخص می‌کند کدام گزینه انتخاب شده است.

MinValue: اولین گزینه قابل مشاهده.

Title: عنوان حاوی گزینه‌های نمایش داده شده در فهرست است. نحو به صورت زیر است: {Option 1|Option 2|...|Option N}. همه منوها در بالای پنجره نمایش داده می‌شوند.

حداقل ارتفاع سه آیتم اعمال می‌شود و عرض آن حداقل ۱۰۸ در نظر گرفته می‌شود.

Menu: نمایش منویی که به کاربر اجازه می‌دهد یک گزینه را انتخاب کند.

آیتم‌های از نوع Menu از چپ به راست در امتداد بالای پنجره چیده می‌شوند. ویژگی‌های اندازه و موقعیت نادیده گرفته می‌شوند.

Value: مشخص می‌کند کدام گزینه انتخاب شده است.

Title: عنوان شامل گزینه‌های نمایش داده شده در منو است. نحو به صورت زیر است: {Option 1|Option 2|...|Option N}.

MiniScroll: نمایش یک نوار پیمایش عمودی بسیار کوچک.

Value: موقعیت لغزنده (thumb).

MaxValue: حد بالای Value.

MinValue: حد پایین Value.

اندازه بر روی 19x34 تنظیم شده است.

PopupMenu: نمایش یک منوی بازشو.

Value: مشخص می‌کند چه گزینه‌ای انتخاب شده است.

Title: عنوان دارای نحو زیر است: {Option 1|Option 2|...|Option N}. بخش "Option 1|Option 2|...|Option N" همان منوی بازشویی است که هنگام فشردن دکمه ماوس نمایش داده می‌شود.

ویژگی اندازه نادیده گرفته می‌شود.

PushButton: نمایش دکمه فشاری همراه با یک آیکون و/یا یک رشته.

Title: این رشته دارای نحو زیر است: {Title of the button|Option 1|Option 2|Option3|...|Option N}. بخش "Option 1|Option 2|...|Option N" منوی بازشویی است که هنگام فشردن دکمه راست ماوس نمایش داده می‌شود.

Icon: آیکونی که باید نمایش داده شود.

دکمه به اندازه‌ای بزرگ ساخته می‌شود که آیکون یا برچسب را در خود جای دهد.

RadioButton: نمایش دکمه رادیویی همراه با یک رشته.

Title: عنوان دکمه رادیویی.

Value: اگر Value برابر با 1 باشد، دکمه انتخاب شده است، در غیر این صورت انتخاب نشده است.

ویژگی اندازه نادیده گرفته می‌شود.

Rectangle: نمایش یک مستطیل.

این نوع ویجت می‌تواند برای تزئین و زیباسازی پنجره استفاده شود.

SwallowExec

این نوع ویجت باعث می‌شود FvwmScript یک پردازش جدید ایجاد کند، اولین پنجره‌ای که نام یا منبع آن برابر با Title باشد را به دام بیندازد (capture) و آن را درون پنجره اسکریپت نمایش دهد.

Title: نام پنجره‌ای را که باید ضبط شده و در پنجره اسکریپت نمایش داده شود مشخص می‌کند.

SwallowExec: خط فرمانی را که برای ایجاد پردازش باید اجرا شود مشخص می‌کند. ماژول‌ها را نیز می‌توان به دام انداخت.

Value: ظاهر حاشیه را مشخص می‌کند. مقادیر ممکن: -1، 0، 1.

اندازه حداقل به میزان 30x30 تنظیم می‌شود.

TextField: نمایش یک کادر ورودی متن.

کادر ورودی متن می‌تواند برای ویرایش یک رشته تک‌خطی استفاده شود.

Title: محتوای کادر متن.

Value: موقعیت نقطه درج (مکان‌نما).

MinValue: موقعیت انتهای بخش انتخاب‌شده.

MaxValue: اولین نویسه قابل مشاهده عنوان.

ویژگی ارتفاع نادیده گرفته می‌شود و عرض حداقل ۴۰ پیکسل عریض‌تر از محتوای اولیه در نظر گرفته می‌شود.

VDipstick: نمایش یک نشانگر اندازه‌گیری عمودی (dipstick).

Value: مقدار جاری نشانگر را مشخص می‌کند.

MinValue: مقدار کمینه نشانگر را مشخص می‌کند.

MaxValue: مقدار بیشینه نشانگر را مشخص می‌کند.

اندازه حداقل 11x30 در نظر گرفته می‌شود.

VScrollBar: نمایش یک نوار پیمایش عمودی.

Value: موقعیت لغزنده (thumb).

MaxValue: حد بالای Value.

MinValue: حد پایین Value.

ویژگی عرض نادیده گرفته می‌شود و حداقل ارتفاعی اعمال می‌گردد. در صورتی که قرار باشد همه مقادیر قابل انتخاب باشند، ارتفاع باید حداقل به اندازه بازه به علاوه ۳۷ باشد؛ به عنوان مثال کمینه ۰ و بیشینه ۱۰ دارای بازه ۱۱ است و بنابراین باید حداقل ارتفاع ۴۸ داشته باشد.

در اینجا توصیف تمام دستورالعمل‌ها آورده شده است.

HideWidget id : مخفی کردن ویجت شماره id.، ShowWidget id: نمایش ویجت شماره id.، ChangeValue id1 id2

تنظیم مقدار ویجت با شماره id1 به مقدار id2.

ChangeMaxValue id1 id2

تنظیم مقدار بیشینه ویجت با شماره id1 به مقدار id2.

ChangeMinValue id1 id2

تنظیم مقدار کمینه ویجت با شماره id1 به مقدار id2.

ChangeTitle id1 id2

تنظیم عنوان ویجت با شماره id1 به مقدار id2.

ChangeWindowTitle string

تنظیم عنوان پنجره به رشته string.

ChangeWindowTitleFromArg numarg

تنظیم عنوان پنجره به مقدار آرگومان شماره numarg اسکریپت.

ChangeLocaleTitle id1 id2

همانند ChangeTitle اما از کاتالوگ(های) بومی‌سازی تعریف‌شده با UseGettext استفاده می‌کند.

ChangeIcon id1 id2

تنظیم آیکون ویجت با شماره id1 به مقدار id2.

ChangeForeColor id1 {color}

تنظیم رنگ پیش‌زمینه ویجت با شماره id1 به {color}.

ChangeBackColor id1 {color}

تنظیم رنگ پس‌زمینه ویجت با شماره id1 به {color}.

ChangeColorSet id1 id2

تنظیم مجموعه رنگ ویجت با شماره id1 به id2. مشخص کردن ویجت 0 مجموعه رنگ پنجره اصلی را تنظیم می‌کند.

ChangePosition id1 x y

انتقال ویجت با شماره id1 به موقعیت (x,y).

ChangeSize id1 width height

تنظیم اندازه ویجت با شماره id1 به (width,height).

ChangeFont id1 newfont

تنظیم قلم (فونت) ویجت با شماره id1 به newfont.

WarpPointer id

پرش و انتقال نشانگر ماوس به درون ویجت با شماره id.

WriteToFile filename {str1} {str2} etc

نوشتن رشته‌ای حاصل از الحاق تمام آرگومان‌های str1، str2 و غیره در فایل filename.

Do {command args}

اجرای دستور fvwm درون بلوک Do. هر دستور fvwm که در صفحه راهنمای fvwm توصیف شده قابل استفاده است. دستورات از این ماژول برای پردازش به برنامه اصلی fvwm ارسال می‌شوند. طول دستور و آرگومان‌های آن نمی‌تواند از ۹۸۸ نویسه تجاوز کند.

Set $var={str1} {str2} etc

الحاق تمام آرگومان‌ها به یک رشته و تنظیم متغیر var$ به این رشته.

Quit: خروج از برنامه.، SendSignal id1 id2

ارسال پیامی با شماره id2 به ویجت شماره id1.

SendToScript id_script {str11} {str2} etc

ارسال یک پیام به اسکریپت مشخص‌شده با id_script. این پیام حاصل الحاق str1، str2 و غیره است.

Key Keyname Modifier id sig str1 str2 etc

یک کلید صفحه‌کلید را به دستورالعمل زیر متصل می‌کند:

SendSignal id sig

و "رشته اخیر" را به حاصل الحاق str1، str2 و غیره تنظیم می‌کند (به تابع LastString مراجعه کنید). فیلدهای Keyname و Modifiers همانند دستور Key در fvwm تعریف می‌شوند.

بیشتر دستورات از آرگومان‌ها استفاده می‌کنند. دو نوع آرگومان وجود دارد: اعداد و رشته‌ها. یک آرگومان عددی مقداری میان ۳۲۰۰۰- تا ۳۲۰۰۰+ است. یک رشته همیشه با آکلاد محصور می‌شود. متغیرها همواره با نویسه "$" آغاز می‌شوند و می‌توانند هم شامل اعداد و هم رشته‌ها باشند.

همه توابع از آرگومان‌ها استفاده می‌کنند. توابع می‌توانند هم رشته و هم عدد بازگردانند. نحو آن‌ها به صورت زیر است: (function argument1 argument2 etc)

در اینجا فهرست کامل توابع آورده شده است:

(GetTitle id)

عنوان ویجت با شماره id را بازمی‌گرداند.

(GetValue id)

مقدار جاری ویجت با شماره id را بازمی‌گرداند.

(GetMinValue id)

مقدار کمینه جاری ویجت با شماره id را بازمی‌گرداند.

(GetMaxValue id)

مقدار بیشینه جاری ویجت با شماره id را بازمی‌گرداند.

(GetFore id)

مقدار رنگ RGB پیش‌زمینه جاری ویجت با شماره id را در قالب هگزادسیمال RRGGBB بازمی‌گرداند.

(GetBack id)

مقدار رنگ RGB پس‌زمینه جاری ویجت با شماره id را در قالب هگزادسیمال RRGGBB بازمی‌گرداند.

(GetHilight id)

مقدار رنگ RGB هایلایت جاری ویجت با شماره id را در قالب هگزادسیمال RRGGBB بازمی‌گرداند.

(GetShadow id)

مقدار رنگ RGB سایه جاری ویجت با شماره id را در قالب هگزادسیمال RRGGBB بازمی‌گرداند.

(GetOutput {str} int1 int2)

دستور str را اجرا می‌کند، خروجی استاندارد را دریافت کرده و کلمه‌ای را که در خط int1 و موقعیت int2 قرار دارد بازمی‌گرداند. اگر int2 برابر با 1- باشد، GetOutput کل خط را بازمی‌گرداند.

(NumToHex int)

مقدار هگزادسیمال عدد int را بازمی‌گرداند.

(HexToNum {str})

مقدار ده‌دهی رشته str را بازمی‌گرداند؛ str باید یک مقدار هگزادسیمال باشد.

(Add int1 int2)

نتیجه (int1+int2) را بازمی‌گرداند.

(Mult int1 int2)

نتیجه (int1*int2) را بازمی‌گرداند.

(Div int1 int2)

نتیجه (int1/int2) را بازمی‌گرداند.

(StrCopy {str} int1 int2)

رشته‌ای را که میان موقعیت int1 و int2 قرار دارد بازمی‌گرداند. به عنوان مثال، (StrCopy {Hello} 1 2) مقدار {He} را بازمی‌گرداند.

(LaunchScript {str})

این تابع اسکریپتی با نام str را اجرا کرده و یک شماره شناسایی بازمی‌گرداند. این شماره برای استفاده از توابع SendToScript و ReceiveFromScript ضروری است. رشته str شامل نام اسکریپت و برخی آرگومان‌ها است.

(GetScriptArgument {int})

این تابع آرگومان اسکریپت استفاده‌شده در تابع LaunchScript را بازمی‌گرداند. اگر int برابر با صفر باشد، GetScriptArgument نام اسکریپت را بازمی‌گرداند.

(GetScriptFather)

این تابع شماره شناسایی اسکریپت والد را بازمی‌گرداند.

(ReceivFromScript {int})

این تابع پیام ارسال‌شده توسط اسکریپت با شماره int را بازمی‌گرداند.

(RemainderOfDiv {int1 int2}): t

این تابع باقیمانده تقسیم (int1/int2) را بازمی‌گرداند.

(GetTime)

این تابع زمان را بر حسب ثانیه بازمی‌گرداند.

(GetPid)

این تابع شناسه پردازش (PID) اسکریپت را بازمی‌گرداند.

(Gettext {str})

این تابع ترجمه رشته str را با استفاده از کاتالوگ(های) بومی‌سازی تعریف‌شده با UseGettext بازمی‌گرداند.

(SendMsgAndGet {comId} {cmd} bool)

دستور cmd را با شناسه comId به یک برنامه خارجی آماده برقراری ارتباط با اسکریپت از طریق پروتکل ویژه FvwmScript ارسال می‌کند. اگر bool برابر با 0 باشد، FvwmScript منتظر پاسخ برنامه خارجی نمی‌ماند. در این حالت اگر پیام با موفقیت به برنامه خارجی ارسال شود مقدار بازگشتی 1 و در غیر این صورت 0 خواهد بود. اگر bool برابر با 1 باشد، FvwmScript منتظر پاسخی از برنامه خارجی می‌ماند و مقدار بازگشتی همان پاسخ خواهد بود (خطی با حداکثر ۳۲۰۰۰ نویسه). اگر ارتباط ناموفق باشد، مقدار بازگشتی 0 است. برای توصیف پروتکل ارتباطی استفاده‌شده، بخش پروتکل ارتباطی (A COMMUNICATION PROTOCOL) را ببینید.

(Parse {str} int)

که در آن str باید رشته‌ای به فرمت X1S1X2S2X3S3...SnXn باشد

جایی که Xnها اعدادی شامل چهار رقم ده‌دهی هستند و Snها رشته‌هایی با طول دقیقاً برابر با Xn می‌باشند. مقدار بازگشتی رشته Sint است. اگر int خارج از محدوده باشد (مثلاً n<)، مقدار بازگشتی یک رشته خالی است. اگر str به فرمت مشخص‌شده نباشد، مقدار بازگشتی غیرقابل پیش‌بینی خواهد بود (اما معمولاً خالی است). این تابع برای پردازش رشته‌های بازگردانده‌شده توسط تابع SendMsgAndGet کاربرد دارد.

(LastString)

این تابع "رشته کاری جاری" را برای دستورالعمل Key و دستور SendString بازمی‌گرداند (به بخش دستورات (COMMANDS) مراجعه کنید). در زمان راه‌اندازی این رشته خالی است، اما هنگامی که یک کلید میانبر Key شناسایی شود (یا به ترتیب، یک دستور SendString دریافت گردد)، این رشته به رشته مرتبط با دستورالعمل (یا دستور) تنظیم می‌شود.

سه نوع حلقه شرطی وجود دارد. دستورالعمل "If-Then-Else" دارای نحو زیر است:

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

بخش دوم "Else-Begin-End" اختیاری است. اگر حلقه تنها شامل یک دستورالعمل باشد، می‌توان Begin و End را حذف کرد. دستورالعمل "While-Do" دارای نحو زیر است:

While $i<5 Do
Begin
  Set $i=(Add i 1)                 # List of instructions
End

دو رشته را می‌توان با "==" و دو عدد را با "<"، "⇐"، "=="، ">="، ">" مقایسه کرد. حلقه "For-Do-Begin-End" دارای نحو زیر است:

For $i=1 To 20 Do
Begin
  Do {Exec xcalc &}                 # List of instructions
End

دستور fvwm زیر ممکن است در هر زمانی اجرا شود:

SendToModule ScriptName SendString id sig str

این دستور رشته زیر را به هر ماژولی با نام یا نام مستعار منطبق بر ScriptName ارسال می‌کند:

SendString id sig str

هنگامی که یک FvwmScript چنین پیامی را دریافت می‌کند، سیگنالی با شماره sig را به ویجت id ارسال می‌کند و رشته str را می‌توان با تابع LastString به دست آورد. بگذارید یک مثال بزنیم. فرض کنید اسکریپتی به نام MyScript با ویجت زیر دارید:

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

سپس دستور

SendToModule MyScript SendString 50 1 str

در صورتی که str برابر با "Quit" باشد اسکریپت MyScript را مجبور به خروج می‌کند و در غیر این صورت عنوان ویجت ۳۳ را به str تغییر می‌دهد.

این دستور می‌تواند برای تغییر عنوان پنجره استفاده شود:

SendToModule ScriptName ChangeWindowTitle newTitle [oldTitle]

این دستور باعث می‌شود که هر ماژولی با نام مستعار یا نامی منطبق بر ScriptName عنوان پنجره مرتبط با خود را به newTitle تغییر دهد. آرگومان اختیاری oldTitle زمانی کاربرد دارد که چندین نمونه از یک اسکریپت در حال اجرا باشند. این آرگومان با مشخص کردن نام پنجره مرتبط با اسکریپت هدف، مانع از تغییر نام تمام این نمونه‌ها می‌شود (به مثال زیر توجه کنید).

+ 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

در آخرین مورد، بدون آرگومان FvwmStorageSend، دستور SendToModule نام هر دو نمونه FvwmStorageSend را به HDA1 تغییر می‌داد.

نمونه‌هایی از اسکریپت‌ها را در دایرکتوری پیکربندی fvwm خواهید یافت.

اسکریپت‌های FvwmScript-BellSetup، FvwmScript-KeyboardSetup، FvwmScript-PointerSetup و FvwmScript-ScreenSetup مجموعه‌ای از اسکریپت‌ها هستند که تنظیمات X را تغییر می‌دهند. این اسکریپت‌ها ترجیحات را در فایلی به نام ~/.xinit-fvwmrc ذخیره می‌کنند (اگر می‌خواهید از نام فایل دیگری استفاده کنید، آن را به عنوان اولین آرگومان اسکریپت بدهید). اگر می‌خواهید این ترجیحات در هر بار راه‌اندازی بارگذاری شوند، باید خط ".xinit-fvwmrc" را در فایل .xinitrc (یا .xsession) خود پیش از شروع fvwm بگنجانید.

اسکریپت 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).

اسکریپت 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 به بخش بعدی مراجعه کنید.

زبان FvwmScript یک زبان برنامه‌نویسی ساده (و با امکانات محدود) است. اگر لازم است با حجم بالایی از داده‌ها کار کنید یا نیاز به استفاده از الگوریتم‌های پیچیده دارید، بهتر است از یک برنامه خارجی (مثلاً به زبان perl) استفاده کنید و اطلاعات مورد نیاز را به اسکریپت FvwmScript خود "ارسال" نمایید. اولین رویکرد استفاده از تابع GetOutput است. این روش ساده است اما باید هر بار که به اطلاعات نیاز دارید برنامه خارجی را دوباره اجرا کنید (که ممکن است مشکلات کارایی ایجاد کند). رویکرد دوم استفاده از تابع SendMsgAndGet است که با بهره‌گیری از هر زبان برنامه‌نویسی که بتواند با لوله‌های نام‌گذاری‌شده (fifos) کار کند، FvwmScript را گسترش می‌دهد. ما این راه‌حل را در این بخش توصیف می‌کنیم. (رویکرد سوم استفاده از fvwm-themes-com از بسته fvwm-themes است، اما در واقع متد SendMsgAndGet پیاده‌سازی fvwm-themes-com درون خود FvwmScript است و کارایی بهتری ارائه می‌دهد).

به طور کلی، شما یک برنامه "خارجی" (به اختصار، برنامه) را از درون اسکریپت FvwmScript خود (به اختصار، اسکریپت) راه‌اندازی می‌کنید. این برنامه در پس‌زمینه اجرا می‌شود و شما از تابع SendMsgAndGet در اسکریپت خود برای پرسیدن سوال یا ارسال دستورالعمل به برنامه استفاده می‌کنید. برنامه باید دقیقاً یک پروتکل ارتباطی معین را رعایت کند. در وهله اول، یک شناسه comId برای ارتباط وجود دارد که برای پیاده‌سازی مناسب پروتکل باید حاوی شناسه پردازش اسکریپت باشد (از تابع GetPid استفاده کنید و comId را از طریق یک گزینه به برنامه پاس دهید). این پروتکل از دو fifo در دایرکتوری کاربر fvwm با نام‌های .tmp-com-in-comId و .tmp-com-out-comId استفاده می‌کند. برنامه باید روی fifo با نام .tmp-com-in-comId گوش فرا دهد. سپس، هنگامی که FvwmScript تابعی به صورت زیر را اجرا می‌کند:

Set $answer = (SendMsgAndGet {comId} {cmd} bool)

ماژول FvwmScript مقدار cmd را روی این fifo می‌نویسد. بدین ترتیب برنامه می‌تواند cmd را بخواند و عملیات مناسب را اجرا کند (برنامه باید fifo ورودی را حذف کند تا از ارتباطات چندگانه پشتیبانی شود). اگر bool برابر با 0 باشد، FvwmScript منتظر پاسخی از برنامه نمی‌ماند و در صورت موفقیت اقدامات قبلی مقدار 1 و در صورت شکست مقدار 0 را بازمی‌گرداند (سپس برنامه باید به fifo ورودی بازگردد). اگر bool برابر با 1 باشد، FvwmScript مدت ۲۰ ثانیه منتظر پاسخ از برنامه می‌ماند و در عوض پاسخ را به اسکریپت بازمی‌گرداند (توجه داشته باشید که bool به برنامه پاس داده نمی‌شود زیرا خود برنامه باید بداند کدام دستورات نیاز به پاسخ دارند). برای پاسخ دادن، برنامه fifo با نام .tmp-com-out-comId را ایجاد کرده و پاسخ را روی آن می‌نویسد. برنامه باید منتظر بماند تا FvwmScript پاسخ را بخواند و سپس باید fifo خروجی را حذف کرده و به fifo ورودی بازگردد. پاسخ باید شامل یک خط با حداکثر ۳۲۰۰۰ نویسه باشد (برای مدیریت چندین خط به عنوان یک خط، به تابع Parse نگاه کنید).

یک راه ساده برای درک این پروتکل و نوشتن اسکریپت‌ها و برنامه‌هایی که از آن استفاده می‌کنند، نگاه کردن به نمونه‌های FvwmScript-ComExample و fvwm-script-ComExample.pl است (که در دایرکتوری داده‌های fvwm یافت می‌شوند). علاوه بر این، این پیاده‌سازی پروتکل به پرسش‌هایی مانند: اگر اسکریپت به دلیل نامناسبی متوقف شود چه باید کرد؟ اگر برنامه به دلیل نامناسبی متوقف شود چه باید کرد؟ و... پاسخ می‌دهد.

اگر به ویجت‌هایی که تعریف نشده‌اند دسترسی پیدا شود، FvwmScript متوقف می‌شود (crash می‌کند).

Frederic Cordier ( <cordie97@cui.unige.ch> or <f-cord96@univ-lyon1.fr>).

Eddy J. Gurney ( <eddy@gizmo.aa.ans.net>).

2026-06-28