FVWMEVENT(1) Fvwm Modules FVWMEVENT(1)

FvwmEvent - ماژول رویدادهای fvwm

ماژول FvwmEvent اقدامی را بر اساس رویدادهای fvwm فعال می‌کند. می‌توان از آن برای اتصال هر تابع یا برنامه fvwm به هر رویداد مدیر پنجره استفاده کرد. FvwmEvent می‌تواند زمانی که پنجره‌ها اضافه، حذف، آیکونیک یا لوله‌ای (shaded) می‌شوند، یا زمانی که fvwm صفحه مجازی یا میزکار نمایشی را تغییر می‌دهد، یا زمانی که مانیتورهای RandR تغییر می‌کنند، فعال یا غیرفعال می‌شوند یا فوکوس می‌گیرند، اقداماتی را اجرا کند. خلاق باشید، کاربردهای زیادی برای آن خواهید یافت.

FvwmEvent توسط fvwm اجرا می‌شود، بنابراین فراخوانی آن از طریق خط فرمان کار نخواهد کرد. FvwmEvent را می‌توان از درون فایل پیکربندی (config) با یا بدون یک نام مستعار (Alias) به صورت زیر اجرا کرد:

Module FvwmEvent Alias

می‌توانید این دستور را به StartFunction اضافه کنید تا اطمینان حاصل شود که FvwmEvent هنگام شروع به کار fvwm در حال اجراست و به رویدادها گوش می‌دهد. متناوباً می‌توانید آن را به یک منو، کلید میانبر و غیره بیفزایید. می‌توانید نمونه در حال اجرای FvwmEvent را با دستور زیر متوقف کنید:

KillModule FvwmEvent Alias

FvwmEvent اطلاعات پیکربندی را از پایگاه داده پیکربندی ماژول fvwm دریافت می‌کند (به fvwm(1)، بخش MODULE COMMANDS مراجعه کنید)، و گزینه‌های پیکربندی خاصی را جستجو می‌کند:

*FvwmEvent: Cmd command

این گزینه تابع fvwm را مشخص می‌کند که باید با پارامترهای رویداد فراخوانی شود. ممکن است بخواهید یکی از موارد زیر را انجام دهید (جزئیات در زیر آمده است):
# execute distinct fvwm functions
*FvwmEvent: Cmd
# execute distinct external programs
*FvwmEvent: Cmd exec

FvwmEvent از برنامه‌های خارجی دیگر نیز پشتیبانی می‌کند؛ برای مثال دستور 'say' در rsynth:

*FvwmEvent: Cmd "Exec /rsynth/say"
*FvwmEvent: destroy_window "window closed"

همچنین می‌توانید از دستور داخلی Echo در fvwm به عنوان FvwmEvent: Cmd برای دریافت خروجی اشکال‌زدایی رویدادهای fvwm به صورت بی‌صدا استفاده کنید. من از این پیکربندی برای اشکال‌زدایی FvwmAuto استفاده کردم:

*FvwmEvent: Cmd Echo
*FvwmEvent: focus_change "focus change"
*FvwmEvent: raise_window "raise window"

حتی می‌توانید دستورات شل متفاوتی را برای هر رویداد تنها با تنظیم زیر فراخوانی کنید:

*FvwmEvent: Cmd exec
*FvwmEvent: add_window 'killname "APPL ERROR"'

*FvwmEvent: PassId

مشخص می‌کند که اقدام رویداد یک پارامتر ID به انتهای خط فرمان اضافه خواهد داشت. بیشتر رویدادها دارای windowID پنجره‌ای هستند که رویداد به آن اشاره دارد. رویداد new_desk شماره میزکار جدید را خواهد داشت. رویدادهای مانیتور نام مانیتور RandR را خواهند داشت. شناسه windowID یک رشته هگزادسیمال با پیشوند 0x است، شماره‌های میزکار به صورت ده‌دهی هستند، و نام‌های مانیتور رشته متنی می‌باشند.

*FvwmEvent: window-manager-event action

اقدامات مشخصی را به رویدادهای مدیر پنجره پیوند می‌دهد. این اقدام به Cmd الصاق شده و سپس برای اجرا به fvwm ارسال می‌گردد.

رویدادهای زیر معتبر هستند:

Event Description
add_window هنگامی رخ می‌دهد که پنجره جدیدی نگاشت و قابل رویت می‌شود
config_info هنگامی رخ می‌دهد که یک ماژول درخواست پیکربندی می‌کند
configure_window هنگامی رخ می‌دهد که رویداد ConfigureNotify اتفاق می‌افتد
default_icon هنگامی رخ می‌دهد که DefaultIcon یک پنجره تغییر می‌کند
deiconify هنگامی رخ می‌دهد که یک پنجره از حالت آیکون خارج می‌شود
destroy_window هنگامی رخ می‌دهد که یک پنجره بسته و تخریب می‌شود
dewindowshade هنگامی رخ می‌دهد که پنجره از حالت لوله‌ای باز می‌شود (unshade)
echo هنگامی رخ می‌دهد که دستور Echo اجرا می‌شود
end_config_info هنگامی رخ می‌دهد که اطلاعات پیکربندی دیگری برای ارسال به ماژول وجود ندارد
end_windowlist هنگامی رخ می‌دهد که ارسال فهرست پنجره‌ها پایان یافته است
enter_window هنگامی رخ می‌دهد که پنجره‌ای رویداد EnterNotify دریافت می‌کند
error منسوخ‌شده (DEPRECATED)
focus_change هنگامی رخ می‌دهد که پنجره‌ای فوکوس را به دست می‌آورد یا از دست می‌دهد
icon_file منسوخ‌شده (DEPRECATED)
icon_location منسوخ‌شده (DEPRECATED)
icon_name منسوخ‌شده (DEPRECATED)
iconify هنگامی رخ می‌دهد که پنجره‌ای آیکونیک (کوچک) می‌شود
leave_window هنگامی رخ می‌دهد که پنجره‌ای رویداد LeaveNotify دریافت می‌کند
lower_window هنگامی رخ می‌دهد که پنجره‌ای به لایه پایین‌تر برده می‌شود
map هنگامی رخ می‌دهد که پنجره‌ای نگاشت (Mapped) می‌شود
mini_icon هنگامی رخ می‌دهد که مینی‌آیکون یک پنجره تغییر می‌کند
monitor_changed هنگامی رخ می‌دهد که وضوح مانیتور تغییر می‌کند
monitor_disabled هنگامی رخ می‌دهد که مانیتوری غیرفعال می‌شود (از طریق RandR)
monitor_enabled هنگامی رخ می‌دهد که مانیتوری فعال می‌شود (از طریق RandR)
monitor_focus هنگامی رخ می‌دهد که مانیتوری فوکوس به دست می‌آورد
new_desk هنگامی رخ می‌دهد که به میزکار جدیدی جابه‌جا می‌شوید
new_page هنگامی رخ می‌دهد که به صفحه جدیدی جابه‌جا می‌شوید
old_add_window منسوخ‌شده (DEPRECATED)
old_configure_window منسوخ‌شده (DEPRECATED)
property_change هنگامی رخ می‌دهد که پنجره‌ای رویداد PropertyNotify دریافت می‌کند
raise_window هنگامی رخ می‌دهد که پنجره‌ای به لایه بالاتر آورده می‌شود
res_class هنگامی رخ می‌دهد که کلاس (Class) پنجره تنظیم می‌شود
res_name هنگامی رخ می‌دهد که منبع (Resource) پنجره تنظیم می‌شود
restack هنگامی رخ می‌دهد که چیدمان لایه‌های پنجره‌ها تغییر می‌کند (restack)
sendconfig هنگامی رخ می‌دهد که FvwmEvent پیکربندی خود را درخواست می‌کند
shutdown منسوخ‌شده (DEPRECATED)
startup منسوخ‌شده (DEPRECATED)
string هنگامی رخ می‌دهد که دستور SendToModule استفاده می‌شود
unknown منسوخ‌شده (DEPRECATED)
visible_icon_name هنگامی رخ می‌دهد که نام آیکون قابل رویت یک پنجره تغییر می‌کند
visible_name هنگامی رخ می‌دهد که نام قابل رویت یک پنجره تغییر می‌کند
window_name هنگامی رخ می‌دهد که نام پنجره (WM_NAME) تنظیم می‌شود
windowshade هنگامی رخ می‌دهد که پنجره‌ای لوله‌ای (shaded) می‌شود

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

رویدادهای *monitor_ در بستر پنجره اجرا نمی‌شوند (زیرا پنجره‌ای وجود ندارد).

به دستور رویداد مشخص‌شده مقادیر زیر نیز ارسال می‌گردد:

$0: monitor_event_name (for example: monitor_changed)
$1: monitor_name (the RandR name of the monitor)

برای مثال، مورد زیر را در نظر بگیرید:

DestroyFunc RandRFunc
AddToFunc   RandRFunc
+ I Exec exec xmessage "Monitor $1 had this event: $0"
DestroyModuleConfig FE-Monitor: *
*FE-Monitor: monitor_changed RandRFunc
*FE-Monitor: monitor_enabled RandRFunc
KillModule FvwmEvent FE-Monitor
Module FvwmEvent FE-Monitor

هنگامی که مثلاً رویداد monitor_changed رخ می‌دهد، تابع RandRFunc اجرا می‌شود که نام مانیتور به عنوان آرگومان اول و نام رویداد مانیتور به عنوان آرگومان دوم به آن ارسال می‌شود. به این ترتیب در صورت نیاز می‌توان تطبیق‌های بیشتری انجام داد.

NOTE: استفاده از PassID با پیکربندی‌ای که شامل خطوط _monitor باشد کار نخواهد کرد زیرا شناسه‌ای برای بازگرداندن وجود ندارد. اگر PassID همچنان مورد نیاز است، رویدادهای مانیتور را به پیکربندی مستقل FvwmEvent خود تفکیک کنید.

رویداد echo هر زمان که Fvwm دستور Echo را دریافت کند تولید می‌شود.

نکته: رویداد enter_window زمانی رخ می‌دهد که نشانگر وارد یک پنجره می‌شود. با گزینه -passid، شناسه آن پنجره به fvwm ارسال می‌شود. رویداد enter_window همچنین زمانی که نشانگر یک پنجره را ترک کرده و به پنجره ریشه (root window) می‌رود نیز تولید می‌شود. در این حالت، شناسه ارسالی 0 است.

نکته: هنگام رسیدن رویداد shutdown، ممکن است پیش از آنکه FvwmEvent بتواند اقدام مرتبط را فراخوانی کند متوقف و کشته (kill) شود.

*FvwmEvent: Delay 5

مشخص می‌کند که یک اقدام رویداد تنها در صورتی اجرا می‌شود که حداقل ۵ ثانیه پس از رویداد قبلی رخ دهد. رویدادهایی که در طول این بازه زمانی رخ می‌دهند نادیده گرفته می‌شوند. مقدار تأخیر پیش‌فرض 0 است که این رویداد را غیرفعال می‌سازد.

*FvwmEvent: StartDelay delay

مشخص می‌کند که یک اقدام رویداد تنها در صورتی اجرا می‌شود که حداقل delay ثانیه پس از رویداد راه‌اندازی (startup) رخ دهد. رویدادهایی که در بازه تأخیر رخ می‌دهند نادیده گرفته می‌شوند. این گزینه زمانی که fvwm با استفاده از یک پخش‌کننده صوتی شروع یا راه‌اندازی مجدد می‌شود مفید است. مقدار تأخیر پیش‌فرض 0 است.

این ماژول از FvwmAudio توسعه یافته است، که آن هم به نوبه خود به شدت مبتنی بر یک ماژول مشابه در Fvwm به نام FvwmSound توسط Mark Boyns بود. FvwmAudio صرفاً برنامه اصلی Mark را گرفت و آن را گسترش داد تا به اندازه کافی جامع باشد و با هر پخش‌کننده صوتی کار کند. به دلیل درخواست‌های گوناگون برای انجام کارهای مشخص در هنگام رویدادهای خاص، FvwmEvent این امکان را یک گام فراتر برد و اکنون هر تابع fvwm را فراخوانی می‌کند. اگر از تابع Exec در fvwm استفاده شود، می‌توان هر برنامه خارجی را با هر پارامتری فراخوانی کرد.

•1994 FvwmSound Mark Boyns ( <boyns@sdsu.edu>)
•1994 FvwmAudio Mark Scott ( <mscott@mcd.mot.com>)
•1996 FvwmAudio Albrecht Kadlec
•1998 FvwmEvent Albrecht Kadlec ( <albrecht@auto.tuwien.ac.at>)
2026-06-28