'\" t .\" Title: FvwmEvent .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 2.0.26 .\" Date: 2026-06-28 .\" Manual: Fvwm Modules .\" Source: \ \& .\" Language: English .\" .TH "FVWMEVENT" "1" "2026-06-28" "\ \&" "Fvwm Modules" .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)" FvwmEvent \- ماژول رویدادهای fvwm .SH "توضیحات (DESCRIPTION)" .sp ماژول \fIFvwmEvent\fP اقدامی را بر اساس رویدادهای \fIfvwm\fP فعال می‌کند. می‌توان از آن برای اتصال هر تابع یا برنامه \fIfvwm\fP به هر رویداد مدیر پنجره استفاده کرد. \fIFvwmEvent\fP می‌تواند زمانی که پنجره‌ها اضافه، حذف، آیکونیک یا لوله‌ای (shaded) می‌شوند، یا زمانی که \fIfvwm\fP صفحه مجازی یا میزکار نمایشی را تغییر می‌دهد، یا زمانی که مانیتورهای RandR تغییر می‌کنند، فعال یا غیرفعال می‌شوند یا فوکوس می‌گیرند، اقداماتی را اجرا کند. خلاق باشید، کاربردهای زیادی برای آن خواهید یافت. .SH "فراخوانی (INVOCATION)" .sp \fIFvwmEvent\fP توسط \fIfvwm\fP اجرا می‌شود، بنابراین فراخوانی آن از طریق خط فرمان کار نخواهد کرد. \fIFvwmEvent\fP را می‌توان از درون فایل پیکربندی (\fIconfig\fP) با یا بدون یک نام مستعار (\fIAlias\fP) به صورت زیر اجرا کرد: .sp .if n .RS 4 .nf .fam C Module FvwmEvent Alias .fam .fi .if n .RE .sp می‌توانید این دستور را به \fIStartFunction\fP اضافه کنید تا اطمینان حاصل شود که \fIFvwmEvent\fP هنگام شروع به کار \fIfvwm\fP در حال اجراست و به رویدادها گوش می‌دهد. متناوباً می‌توانید آن را به یک منو، کلید میانبر و غیره بیفزایید. می‌توانید نمونه در حال اجرای \fIFvwmEvent\fP را با دستور زیر متوقف کنید: .sp .if n .RS 4 .nf .fam C KillModule FvwmEvent Alias .fam .fi .if n .RE .SH "گزینه‌های پیکربندی (CONFIGURATION OPTIONS)" .sp \fIFvwmEvent\fP اطلاعات پیکربندی را از پایگاه داده پیکربندی ماژول \fBfvwm\fP دریافت می‌کند (به \fIfvwm\fP(1)، بخش \fBMODULE COMMANDS\fP مراجعه کنید)، و گزینه‌های پیکربندی خاصی را جستجو می‌کند: .sp *FvwmEvent: Cmd command .RS 4 این گزینه تابع \fIfvwm\fP را مشخص می‌کند که باید با پارامترهای رویداد فراخوانی شود. ممکن است بخواهید یکی از موارد زیر را انجام دهید (جزئیات در زیر آمده است): .sp .if n .RS 4 .nf .fam C # execute distinct fvwm functions *FvwmEvent: Cmd # execute distinct external programs *FvwmEvent: Cmd exec .fam .fi .if n .RE .sp \fIFvwmEvent\fP از برنامه‌های خارجی دیگر نیز پشتیبانی می‌کند؛ برای مثال دستور \*(Aqsay\*(Aq در rsynth: .sp .if n .RS 4 .nf .fam C *FvwmEvent: Cmd "Exec /rsynth/say" *FvwmEvent: destroy_window "window closed" .fam .fi .if n .RE .sp همچنین می‌توانید از دستور داخلی \fIEcho\fP در \fIfvwm\fP به عنوان \fIFvwmEvent: Cmd\fP برای دریافت خروجی اشکال‌زدایی رویدادهای \fIfvwm\fP به صورت بی‌صدا استفاده کنید. من از این پیکربندی برای اشکال‌زدایی FvwmAuto استفاده کردم: .sp .if n .RS 4 .nf .fam C *FvwmEvent: Cmd Echo *FvwmEvent: focus_change "focus change" *FvwmEvent: raise_window "raise window" .fam .fi .if n .RE .sp حتی می‌توانید دستورات شل متفاوتی را برای هر رویداد تنها با تنظیم زیر فراخوانی کنید: .sp .if n .RS 4 .nf .fam C *FvwmEvent: Cmd exec *FvwmEvent: add_window \*(Aqkillname "APPL ERROR"\*(Aq .fam .fi .if n .RE .RE .sp *FvwmEvent: PassId .RS 4 مشخص می‌کند که اقدام رویداد یک پارامتر ID به انتهای خط فرمان اضافه خواهد داشت. بیشتر رویدادها دارای windowID پنجره‌ای هستند که رویداد به آن اشاره دارد. رویداد new_desk شماره میزکار جدید را خواهد داشت. رویدادهای مانیتور نام مانیتور RandR را خواهند داشت. شناسه windowID یک رشته هگزادسیمال با پیشوند 0x است، شماره‌های میزکار به صورت ده‌دهی هستند، و نام‌های مانیتور رشته متنی می‌باشند. .RE .sp *FvwmEvent: window\-manager\-event action .RS 4 اقدامات مشخصی را به رویدادهای مدیر پنجره پیوند می‌دهد. این اقدام به \fICmd\fP الصاق شده و سپس برای اجرا به \fIfvwm\fP ارسال می‌گردد. .sp رویدادهای زیر معتبر هستند: .TS allbox tab(:); lt lt. T{ .sp \fIEvent\fP T}:T{ .sp \fIDescription\fP T} T{ .sp add_window T}:T{ .sp هنگامی رخ می‌دهد که پنجره جدیدی نگاشت و قابل رویت می‌شود T} T{ .sp config_info T}:T{ .sp هنگامی رخ می‌دهد که یک ماژول درخواست پیکربندی می‌کند T} T{ .sp configure_window T}:T{ .sp هنگامی رخ می‌دهد که رویداد ConfigureNotify اتفاق می‌افتد T} T{ .sp default_icon T}:T{ .sp هنگامی رخ می‌دهد که DefaultIcon یک پنجره تغییر می‌کند T} T{ .sp deiconify T}:T{ .sp هنگامی رخ می‌دهد که یک پنجره از حالت آیکون خارج می‌شود T} T{ .sp destroy_window T}:T{ .sp هنگامی رخ می‌دهد که یک پنجره بسته و تخریب می‌شود T} T{ .sp dewindowshade T}:T{ .sp هنگامی رخ می‌دهد که پنجره از حالت لوله‌ای باز می‌شود (unshade) T} T{ .sp echo T}:T{ .sp هنگامی رخ می‌دهد که دستور Echo اجرا می‌شود T} T{ .sp end_config_info T}:T{ .sp هنگامی رخ می‌دهد که اطلاعات پیکربندی دیگری برای ارسال به ماژول وجود ندارد T} T{ .sp end_windowlist T}:T{ .sp هنگامی رخ می‌دهد که ارسال فهرست پنجره‌ها پایان یافته است T} T{ .sp enter_window T}:T{ .sp هنگامی رخ می‌دهد که پنجره‌ای رویداد EnterNotify دریافت می‌کند T} T{ .sp error T}:T{ .sp منسوخ‌شده (DEPRECATED) T} T{ .sp focus_change T}:T{ .sp هنگامی رخ می‌دهد که پنجره‌ای فوکوس را به دست می‌آورد یا از دست می‌دهد T} T{ .sp icon_file T}:T{ .sp منسوخ‌شده (DEPRECATED) T} T{ .sp icon_location T}:T{ .sp منسوخ‌شده (DEPRECATED) T} T{ .sp icon_name T}:T{ .sp منسوخ‌شده (DEPRECATED) T} T{ .sp iconify T}:T{ .sp هنگامی رخ می‌دهد که پنجره‌ای آیکونیک (کوچک) می‌شود T} T{ .sp leave_window T}:T{ .sp هنگامی رخ می‌دهد که پنجره‌ای رویداد LeaveNotify دریافت می‌کند T} T{ .sp lower_window T}:T{ .sp هنگامی رخ می‌دهد که پنجره‌ای به لایه پایین‌تر برده می‌شود T} T{ .sp map T}:T{ .sp هنگامی رخ می‌دهد که پنجره‌ای نگاشت (Mapped) می‌شود T} T{ .sp mini_icon T}:T{ .sp هنگامی رخ می‌دهد که مینی‌آیکون یک پنجره تغییر می‌کند T} T{ .sp monitor_changed T}:T{ .sp هنگامی رخ می‌دهد که وضوح مانیتور تغییر می‌کند T} T{ .sp monitor_disabled T}:T{ .sp هنگامی رخ می‌دهد که مانیتوری غیرفعال می‌شود (از طریق RandR) T} T{ .sp monitor_enabled T}:T{ .sp هنگامی رخ می‌دهد که مانیتوری فعال می‌شود (از طریق RandR) T} T{ .sp monitor_focus T}:T{ .sp هنگامی رخ می‌دهد که مانیتوری فوکوس به دست می‌آورد T} T{ .sp new_desk T}:T{ .sp هنگامی رخ می‌دهد که به میزکار جدیدی جابه‌جا می‌شوید T} T{ .sp new_page T}:T{ .sp هنگامی رخ می‌دهد که به صفحه جدیدی جابه‌جا می‌شوید T} T{ .sp old_add_window T}:T{ .sp منسوخ‌شده (DEPRECATED) T} T{ .sp old_configure_window T}:T{ .sp منسوخ‌شده (DEPRECATED) T} T{ .sp property_change T}:T{ .sp هنگامی رخ می‌دهد که پنجره‌ای رویداد PropertyNotify دریافت می‌کند T} T{ .sp raise_window T}:T{ .sp هنگامی رخ می‌دهد که پنجره‌ای به لایه بالاتر آورده می‌شود T} T{ .sp res_class T}:T{ .sp هنگامی رخ می‌دهد که کلاس (Class) پنجره تنظیم می‌شود T} T{ .sp res_name T}:T{ .sp هنگامی رخ می‌دهد که منبع (Resource) پنجره تنظیم می‌شود T} T{ .sp restack T}:T{ .sp هنگامی رخ می‌دهد که چیدمان لایه‌های پنجره‌ها تغییر می‌کند (restack) T} T{ .sp sendconfig T}:T{ .sp هنگامی رخ می‌دهد که FvwmEvent پیکربندی خود را درخواست می‌کند T} T{ .sp shutdown T}:T{ .sp منسوخ‌شده (DEPRECATED) T} T{ .sp startup T}:T{ .sp منسوخ‌شده (DEPRECATED) T} T{ .sp string T}:T{ .sp هنگامی رخ می‌دهد که دستور SendToModule استفاده می‌شود T} T{ .sp unknown T}:T{ .sp منسوخ‌شده (DEPRECATED) T} T{ .sp visible_icon_name T}:T{ .sp هنگامی رخ می‌دهد که نام آیکون قابل رویت یک پنجره تغییر می‌کند T} T{ .sp visible_name T}:T{ .sp هنگامی رخ می‌دهد که نام قابل رویت یک پنجره تغییر می‌کند T} T{ .sp window_name T}:T{ .sp هنگامی رخ می‌دهد که نام پنجره (WM_NAME) تنظیم می‌شود T} T{ .sp windowshade T}:T{ .sp هنگامی رخ می‌دهد که پنجره‌ای لوله‌ای (shaded) می‌شود T} .TE .sp .sp گرداننده‌های رویداد مربوط به پنجره در بستر (context) پنجره اجرا می‌شوند. پیش‌تر از PassId برای این منظور استفاده می‌شد، اما اکنون نیازی به استفاده از PassId نیست. .sp رویدادهای *monitor_ در بستر پنجره اجرا نمی‌شوند (زیرا پنجره‌ای وجود ندارد). .sp به دستور رویداد مشخص‌شده مقادیر زیر نیز ارسال می‌گردد: .sp .if n .RS 4 .nf .fam C $0: monitor_event_name (for example: monitor_changed) $1: monitor_name (the RandR name of the monitor) .fam .fi .if n .RE .sp برای مثال، مورد زیر را در نظر بگیرید: .sp .if n .RS 4 .nf .fam C 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 .fam .fi .if n .RE .sp هنگامی که مثلاً رویداد monitor_changed رخ می‌دهد، تابع RandRFunc اجرا می‌شود که نام مانیتور به عنوان آرگومان اول و نام رویداد مانیتور به عنوان آرگومان دوم به آن ارسال می‌شود. به این ترتیب در صورت نیاز می‌توان تطبیق‌های بیشتری انجام داد. .sp \fBNOTE\fP: استفاده از \f(CRPassID\fP با پیکربندی‌ای که شامل خطوط _monitor باشد کار نخواهد کرد زیرا شناسه‌ای برای بازگرداندن وجود ندارد. اگر \f(CRPassID\fP همچنان مورد نیاز است، رویدادهای مانیتور را به پیکربندی مستقل FvwmEvent خود تفکیک کنید. .sp رویداد echo هر زمان که Fvwm دستور Echo را دریافت کند تولید می‌شود. .sp نکته: رویداد enter_window زمانی رخ می‌دهد که نشانگر وارد یک پنجره می‌شود. با گزینه \-passid، شناسه آن پنجره به fvwm ارسال می‌شود. رویداد enter_window همچنین زمانی که نشانگر یک پنجره را ترک کرده و به پنجره ریشه (root window) می‌رود نیز تولید می‌شود. در این حالت، شناسه ارسالی 0 است. .sp نکته: هنگام رسیدن رویداد shutdown، ممکن است پیش از آنکه FvwmEvent بتواند اقدام مرتبط را فراخوانی کند متوقف و کشته (kill) شود. .RE .sp *FvwmEvent: Delay 5 .RS 4 مشخص می‌کند که یک اقدام رویداد تنها در صورتی اجرا می‌شود که حداقل ۵ ثانیه پس از رویداد قبلی رخ دهد. رویدادهایی که در طول این بازه زمانی رخ می‌دهند نادیده گرفته می‌شوند. مقدار تأخیر پیش‌فرض 0 است که این رویداد را غیرفعال می‌سازد. .RE .sp *FvwmEvent: StartDelay delay .RS 4 مشخص می‌کند که یک اقدام رویداد تنها در صورتی اجرا می‌شود که حداقل \fIdelay\fP ثانیه پس از رویداد راه‌اندازی (startup) رخ دهد. رویدادهایی که در بازه تأخیر رخ می‌دهند نادیده گرفته می‌شوند. این گزینه زمانی که \fIfvwm\fP با استفاده از یک پخش‌کننده صوتی شروع یا راه‌اندازی مجدد می‌شود مفید است. مقدار تأخیر پیش‌فرض 0 است. .RE .SH "تاریخچه (HISTORY)" .sp این ماژول از \fIFvwmAudio\fP توسعه یافته است، که آن هم به نوبه خود به شدت مبتنی بر یک ماژول مشابه در Fvwm به نام \fIFvwmSound\fP توسط Mark Boyns بود. \fIFvwmAudio\fP صرفاً برنامه اصلی Mark را گرفت و آن را گسترش داد تا به اندازه کافی جامع باشد و با هر پخش‌کننده صوتی کار کند. به دلیل درخواست‌های گوناگون برای انجام کارهای مشخص در هنگام رویدادهای خاص، \fIFvwmEvent\fP این امکان را یک گام فراتر برد و اکنون هر تابع \fIfvwm\fP را فراخوانی می‌کند. اگر از تابع Exec در \fIfvwm\fP استفاده شود، می‌توان هر برنامه خارجی را با هر پارامتری فراخوانی کرد. .SH "نویسندگان (AUTHORS)" .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} 1994 FvwmSound Mark Boyns (\c .MTO "boyns\(atsdsu.edu" "" ")" .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} 1994 FvwmAudio Mark Scott (\c .MTO "mscott\(atmcd.mot.com" "" ")" .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} 1996 FvwmAudio Albrecht Kadlec .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} 1998 FvwmEvent Albrecht Kadlec (\c .MTO "albrecht\(atauto.tuwien.ac.at" "" ")" .RE