FVWMAUTO(1) Fvwm Modules FVWMAUTO(1)

FvwmAuto - ماژول بالا آوردن خودکار پنجره در fvwm

Module FvwmAuto Timeout [-passid] [-menter|-menterleave|-mfocus] [EnterCommand [LeaveCommand]]

ماژول FvwmAuto فقط می‌تواند توسط fvwm فراخوانی شود. فراخوانی FvwmAuto از خط فرمان کار نخواهد کرد.

ماژول FvwmAuto اغلب برای بالا آوردن خودکار (auto-raise) پنجره‌هایی که فوکوس دریافت کرده‌اند استفاده می‌شود.

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

Module FvwmAuto Timeout [-passid] [-menter|-menterleave|-mfocus] [EnterCommand [LeaveCommand]]
AddToMenu Modules
+ "Auto Raise (300 ms)"  Module FvwmAuto 300
+ "Auto Raise/Lower"     Module FvwmAuto 300 "Silent Raise" "Silent Lower"

آرگومان Timeout الزامی است. این آرگومان مشخص می‌کند پنجره پیش از اجرای دستور، چه مدت باید فوکوس ورودی صفحه‌کلید را حفظ کند. این تأخیر بر حسب میلی‌ثانیه اندازه‌گیری می‌شود و هر عدد صحیح بزرگ‌تر از صفر معتبر است.

اگر گزینه -passid مشخص شود، شناسه پنجره‌ای (window id) که اشاره‌گر به آن وارد یا از آن خارج شده است به دستوری که برای fvwm فرستاده می‌شود ضمیمه می‌گردد. این می‌تواند همراه با دستور WindowId در fvwm استفاده شود.

گزینه‌های -menter، -menterleave و -mfocus بر رویدادهایی که FvwmAuto به آن‌ها واکنش نشان می‌دهد اثر می‌گذارند. نباید بیش از یکی از این گزینه‌ها انتخاب شود. در حالت -mfocus، ماژول FvwmAuto پنجره‌ای را که دارای فوکوس است بالا می‌آورد. در حالت -menter، هنگامی که اشاره‌گر ماوس وارد پنجره‌ای می‌شود، FvwmAuto پنجره زیر اشاره‌گر را بالا می‌آورد. دستور LeaveCommand روی پنجره‌ای اجرا می‌شود که قبل از ورود اشاره‌گر به پنجره جدید، زیر اشاره‌گر بوده است. هنگامی که اشاره‌گر پنجره‌ای را ترک کرده و وارد پنجره ریشه (root window) می‌شود، دستور EnterCommand نیز اجرا می‌گردد، اما بدون پنجره‌ای برای اقدام روی آن. در حالت -menterleave، ماژول FvwmAuto درست مانند حالت -menter عمل می‌کند، اما دستور LeaveCommand در صورتی که اشاره‌گر از پنجره‌ای خارج شود ولی وارد پنجره جدیدی نشود نیز اجرا می‌گردد. دو حالت اخیر برای پنجره‌هایی که فوکوس را نمی‌پذیرند مفید هستند.

نکته: حالت -menterleave ممکن است با پنجره‌های جهنده (popup) برخی برنامه‌ها تداخل داشته باشد. یک نمونه آن منوی بزرگ‌نمایی در Ghostview است. لطفاً در این مورد به ما اعتراض نکنید - این یک باگ در برنامه Ghostview است.

دستورهای EnterCommand و LeaveCommand اختیاری هستند. دستور EnterCommand به میزان Timeout میلی‌ثانیه پس از دریافت فوکوس ورودی توسط یک پنجره اجرا می‌شود، و دستور LeaveCommand به میزان Timeout میلی‌ثانیه پس از از دست دادن فوکوس توسط پنجره اجرا می‌گردد. توجه داشته باشید که همواره باید از کلیدواژه 'Silent' قبل از خود دستور استفاده کنید. اگر این را فراموش کنید، FvwmAuto خودش پیشوند "Silent " را به رشته دستور اضافه می‌کند. بدون این پیشوند، اگر پنجره قبل از پردازش دستور ارسال‌شده توسط FvwmAuto بسته شده باشد، fvwm پنجره‌ای را برای اعمال دستور درخواست می‌کند. این مسئله می‌تواند برای مثال در منوهای جهنده (popup) رخ دهد.

مقدار "Silent Raise" پیش‌فرض دستور EnterCommand است، اما هر تابع دیگر fvwm نیز مجاز است. با این حال، استفاده از "Close" یا "Destroy" با یک مهلت زمانی پایین توصیه نمی‌شود. دستور LeaveCommand می‌تواند برای داشتن یک میزکار مرتب سودمند باشد. با این گزینه‌ها آزمایش کنید:

Module FvwmAuto 0 Nop "Silent Lower"
Module FvwmAuto 0 Nop "Silent Iconify"

یک مثال برای بالا آوردن خودکار پنجره‌ها با ClickToFocus:

Style * ClickToFocus
FvwmAuto 0 -menter "Silent Raise"

یک مثال برای بالا آوردن و پایین بردن خودکار فقط برخی از پنجره‌ها:

To start FvwmAuto:
FvwmAuto 0 -passid -menter \
"Silent selective_raiselower raise" \
"Silent selective_raiselower lower"

و قرار دادن این کد در فایل .fvwm2rc خود:

AddToFunc selective_raiselower
+ I WindowId $1 (FvwmIconMan) $0
+ I WindowId $1 (FvwmButtons) $0
+ IWindowId $1 (xclock) $0
...

مثال پیچیده‌تر (سه نمونه از FvwmAuto در حال اجرا هستند):

DestroyFunc RestoreIconified
AddToFunc   RestoreIconified
+ I Current (Iconic) Iconify false
DestroyFunc RegisterFocus
AddToFunc   RegisterFocus
+ I Exec date +"%T $n focused" >>/tmp/focus-stats.txt
DestroyFunc RegisterUnfocus
AddToFunc   RegisterUnfocus
+ I Exec date +"%T $n unfocused" >>/tmp/focus-stats.txt
KillModule FvwmAuto
Module FvwmAuto 250 Raise Nop
Module FvwmAuto 800 RestoreIconified Nop
Module FvwmAuto   0 RegisterFocus RegisterUnfocus

پشتیبانی ویژه‌ای برای Raise/Lower در FvwmAuto وجود دارد. این ویژگی برای بهبود فراخوانی‌های بازگشتی (callbacks) مربوط به Raise/Lower افزوده شد، زیرا بیشتر کاربردهای FvwmAuto بالا آوردن یا پایین بردن خودکار است. این بهبود شامل قفل شدن روی بسته‌های M_RAISE_WINDOW و M_LOWER_WINDOW و بالا نیاوردن/پایین نبردن پنجره‌هایی است که صریحاً بالا آورده شده‌اند. پشتیبانی ویژه Raise/Lower تنها زمانی فعال می‌شود که EnterCommand یا LeaveCommand شامل زیررشته "Raise" یا "Lower" باشند. در صورتی که FvwmAuto رفتاری مطابق با انتظار شما ندارد، می‌توانید با تغییر نام این دستورها هرگونه پشتیبانی ویژه را فعال یا غیرفعال کنید.

استفاده از FvwmAuto همراه با EdgeCommand می‌تواند حتی قدرتمندتر باشد. یک مثال کوتاه در صفحه راهنمای fvwm وجود دارد.

ماژول FvwmAuto یک روز ناگهان ظاهر شد، هیچ‌کس نمی‌داند چگونه. FvwmAuto در تاریخ 09/96 بازنویسی شد، هیچ‌کس نمی‌داند توسط چه کسی.

2026-06-28