FVWM-MENU-DESKTOP(1)   FVWM-MENU-DESKTOP(1)

fvwm-menu-desktop - پرونده‌های منوی XDG را خوانده و منوهای Fvwm ایجاد می‌کند

fvwm-menu-desktop [ --help|-h ] [ --version ] [ --install-prefix DIR ] [ --desktop NAME ] [ --menu-type NAME ] [ --theme NAME ] [ --with-titles|-w ] [ --without-titles ] [ --enable-mini-icons ] [ --size|-s NUM ] [ --mini-icon-dir DIR ] [ --app-icon NAME ] [ --dir-icon NAME ] [ --title|-t NAME ] [ --insert-in-menu NAME ] [ --get-menus all|desktop ] [ --set-menus menu_paths ] [ --all-menus ] [ --include-items NAME ] [ --regen-cmd CMD ] [ --term-cmd CMD ] [ --dynamic ] [ --menu-error|-e ] [ --verbose|-v ]

این یک اسکریپت پایتون است که تعاریف منوهای XDG را برای ساخت منوهای متناظر در fvwm تجزیه می‌کند. اجرای این اسکریپت به python-xdg وابسته است.

--help

نمایش راهنما و خروج.

--version

نمایش نسخه و خروج.

--get-menus all|desktop

فهرستی از مسیرهای کامل منوهای یافت‌شده در سیستم را که با فاصله از هم جدا شده‌اند چاپ می‌کند. all تمام منوهای موجود در سیستم به جز موارد خالی را چاپ می‌کند. desktop منو(هایی) را که توسط اسکریپت تولید می‌شوند چاپ خواهد کرد.

هیچ منویی تولید نخواهد شد.

--desktop NAME

پارامتر اختیاری برای تنظیم NAME پرونده(های) منوی XDG (.menu) میزکار مورد استفاده. این گزینه هرگونه منوی پیش‌فرضی را که از طریق FvwmForm-XDGMenu-Config تنظیم شده باشد لغو می‌کند و باعث می‌شود اسکریپت به دنبال منوهایی بگردد که در آن‌ها NAME بخشی از نام پرونده است. نام‌های ممکن عبارتند از: gnome، kde، xfce، lxde، debian و غیره.

این گزینه می‌تواند همراه با --menu-type برای کنترل اینکه کدام پرونده(های) .menu استفاده شوند به کار رود.

--menu-type NAME

پارامتر اختیاری برای تعیین NAME نوع منوی XDG مورد استفاده. این گزینه هرگونه منوی پیش‌فرضی را که از طریق FvwmForm-XDGMenu-Config تنظیم شده باشد لغو می‌کند و باعث می‌شود اسکریپت به دنبال منوهایی بگردد که در آن‌ها NAME بخشی از نام پرونده است. انواع ممکن برای NAME می‌تواند مواردی چون: applications، settings، preferences و غیره باشد.

هنگامی که همراه با --desktop استفاده شود، تنها منوهایی که نام پرونده آن‌ها با 'destkop*menutype' تطابق دارد یافت می‌شوند. اگر هیچ منویی پیدا نشود، اسکریپت با یک خطا خارج می‌شود.

--all-menus

این گزینه تمام منوهای یافت‌شده در سیستم را می‌سازد. در صورت استفاده در ترکیب با --desktop یا --menu-type، تمامی منوهای منطبق با آن تنظیمات ساخته خواهند شد.

--install-prefix DIR

پارامتر اختیاری برای تغییر مسیرهای استاندارد تعاریف منوی XDG. به fvwm-menu-desktop اعلام می‌کند که به جای مسیرهای استاندارد /etc/xdg/menus (و $HOME/.config/menus در صورت وجود)، در DIR به دنبال پرونده‌های .menu بگردد.

--with-titles|-w

در صورت فعال بودن این گزینه، منوها با عنوان تولید می‌شوند. این حالت پیش‌فرض است. از این گزینه می‌توان برای لغو تنظیم پیش‌فرض FvwmForm-XDGMenu-Config استفاده کرد.

--without-titles

در صورت فعال بودن این گزینه، منوها بدون عنوان تولید می‌شوند. حالت پیش‌فرض، تولید منو با عنوان است.

--title|-t NAME

گزینه‌ای برای تعیین عنوان منو (NAME) بالاترین منوی مورد استفاده توسط دستورات Menu یا Popup در Fvwm. مقدار پیش‌فرض "XDGMenu" است.

--include-items NAME

این گزینه مشخص می‌کند که آیا موارد منوی اضافی 'Regenerate' و 'Configure' در منوی سطح بالا گنجانده شوند یا خیر. NAME می‌تواند یکی از مقادیر regenerate، config، both یا none باشد. مقدار پیش‌فرض both است.

--regen-cmd CMD

این گزینه دستور fvwm (CMD) را که هنگام انتخاب مورد منوی 'Regenerate' اجرا می‌شود، تعیین می‌کند. مقدار پیش‌فرض "PipeRead `fvwm-menu-desktop`" است.

--term-cmd CMD

این گزینه دستور شبیه‌ساز پایانه (CMD) را تعیین می‌کند که برای اجرای برنامه‌های ترمینال استفاده می‌شود. CMD باید به یک گزینه اجرا ختم شود، مانند گزینه -e در xterm، که دستوری الحاق‌شده به CMD را اجرا می‌کند. مقدار پیش‌فرض "xterm -e" است.

--dynamic

این گزینه برای ایجاد منوهای پویا با استفاده از DynamicPopUpAction و DynamicPopDownAction به کار می‌رود. این کار عبارت 'recreate' را به دستور DestroyMenu در منوی بالاترین سطح اضافه می‌کند تا در زمان بازتولید منو، آن کنش‌ها نابود (Destroy) نشوند.

--insert-in-menu NAME

گزینه‌ای برای درج منو(های) تولیدشده درون منوی NAME (عنوان سطح بالای آن). این گزینه سبب می‌شود منوی سطح بالا نابود (Destroy) نشود و موارد به انتهای آن اضافه شوند.

توجه داشته باشید منوهایی که با این گزینه بازتولید می‌شوند، موارد جدید را به انتهای منوی موجود الحاق خواهند کرد. هر بار که منو دوباره تولید شود موارد جدیدی ظاهر شده و منویی رو به رشد از گزینه‌های تکراری ایجاد می‌شود. برای رفع این مشکل باید کل منو را از طریق یک تابع بازتولید کنید یا fvwm را مجدداً راه‌اندازی نمایید. برای مشاهده راه‌حل‌ها به بخش مثال‌ها (EXAMPLES) در ادامه مراجعه کنید.

--set-menus menu_paths

تمام منوهای مشخص‌شده در فهرستی از مسیرهای کامل منو که با فاصله از هم جدا شده‌اند را تولید می‌کند. این گزینه تمامی مقادیر پیش‌فرض و تنظیمات --desktop|--menu-type را لغو می‌کند.

--menu-error|-e

در صورتی که این گزینه فعال باشد و python-xdg یافت نشود، اسکریپت پیغام خطا را درون منوی تولیدشده چاپ می‌کند. در default-config استفاده می‌شود.

--verbose

چاپ اطلاعات بیشتر روی STDERR را فعال می‌کند.

به‌طور پیش‌فرض، fvwm-menu-desktop منوها را بدون آیکون‌های کوچک (mini-icons) می‌سازد. برای فعال‌سازی آیکون‌های کوچک از گزینه‌های زیر استفاده کنید.

اگر ImageMagick روی سیستم نصب باشد، این اسکریپت اندازه آیکون‌ها را تغییر داده و آن‌ها را در $FVWM_USERDIR/.icons کپی می‌کند. این کار ممکن است کمی طول بکشد. هنگام اولین بار ایجاد آیکون‌ها باید آماده صبر کردن باشید. پس از ایجاد آیکون‌ها، اسکریپت باید سریع‌تر اجرا شود. اگر استفاده از آیکون‌ها هنوز هم بیش از حد کُند است، برای راه‌های محدود کردن دفعات ایجاد منو جهت افزایش سرعت، به بخش مثال‌ها (EXAMPLES) مراجعه کنید.

--enable-mini-icons

این گزینه mini-iconها را در منوها فعال می‌کند. در صورت تنظیم، از آیکون‌های کوچک ۲۴x۲۴ استفاده می‌شود. اگر آیکون مشخص‌شده در آن اندازه نباشد، در صورت نصب بودن ImageMagick تبدیل شده و در $HOME/.fvwm/icons یا در دایرکتوری مشخص‌شده با گزینه --mini-icon-dir ذخیره می‌شود. در غیر این صورت هیچ آیکونی در منو برای آن مدخل نمایش داده نخواهد شد. در بیشتر توزیع‌ها، تمام مدخل‌های منو mini-iconهای مناسب با برنامه را خواهند داشت.

--theme NAME

پوسته (theme) آیکون مورد استفاده را مشخص می‌کند. مقدار پیش‌فرض gnome است، اما همه پوسته‌های دیگر موجود در /usr/share/icons نیز می‌توانند استفاده شوند، به جز پوسته hicolor؛ زیرا این پوسته در صورت پیدا نشدن آیکون، پوسته بازگشتی (fallback) پیش‌فرض است.

--size|-s NUM

اگر --enable-mini-icons استفاده شود، اندازه (size) آیکون‌ها می‌تواند با این پارامتر تغییر کند. مقدار پیش‌فرض 24 است.

--mini-icon-dir DIR

زمانی که mini-icon با اندازه مناسب در دسترس نباشد، fvwm-menu-desktop آیکون‌هایی با اندازه مناسب در $HOME/.fvwm/icons ایجاد می‌کند. اگر نمی‌خواهید از دایرکتوری پیش‌فرض، یعنی $HOME/.fvwm/icons استفاده کنید، از این گزینه برای تعیین پوشه‌ای دیگر استفاده کنید.

--app-icon NAME

در صورت پیدا نشدن آیکون‌های دیگر، آیکون پیش‌فرض برنامه را تعیین می‌کند. مقدار پیش‌فرض 'gnome-applications' است.

--dir-icon NAME

در صورت پیدا نشدن آیکون‌های دیگر، آیکون پیش‌فرض دایرکتوری را تعیین می‌کند. مقدار پیش‌فرض 'gnome-fs-directory' است.

دستور fvwm-menu-desktop فایل‌های .menu استاندارد XDG را در قالب نحو (syntax) منوهای fvwm خروجی می‌دهد. هنگامی که fvwm-menu-desktop بدون هیچ گزینه‌ای اجرا شود، مقادیر پیش‌فرض را از فایل FvwmForm-XDGMenu-Config بارگذاری کرده (پایین را ببینید) و سپس سیستم شما را برای فایل(های) منوی مناسب جستجو می‌کند. برای مشاهده اینکه چه منوهایی روی سیستم شما موجود است دستور زیر را اجرا کنید:

fvwm-menu-desktop --get-menus all

اگر هیچ منویی یافت نشد، ممکن است هیچ منویی روی سیستم شما نصب نشده باشد. به‌طور پیش‌فرض منوها به صورت فایل‌های .menu در /etc/xdg/menus، $HOME/.config/menus یا مکانی که در $XDG_MENU_PREFIX تنظیم شده ذخیره می‌شوند. می‌توانید از --install-prefix برای تعیین مکان دیگری جهت جستجوی منوها استفاده کنید.

از طریق ترکیبی از گزینه‌های خط فرمان و تنظیمات FvwmForm-XDGMenu-Config، برنامه fvwm-menu-desktop می‌تواند هر ترکیبی از منوهای یافت‌شده را تولید کند. برای دریافت فهرستی از اینکه چه منو(هایی) تولید خواهند شد، از گزینه --get-menus desktop استفاده کنید. دستور زیر تمامی منوهایی را که در صورت اجرای fvwm-menu-desktop بدون هیچ گزینه‌ای تولید می‌شدند فهرست می‌کند.

fvwm-menu-desktop --get-menus desktop

برنامه fvwm-menu-desktop منو(های) قابل تولید را به صورت زیر تعیین می‌کند:

اگر هیچ فایل پیکربندی یافت نشود، به همه منوها وزن داده می‌شود و اسکریپت بهترین منوی یافت‌شده (با بالاترین وزن) را تولید خواهد کرد.

اگر یک فایل پیکربندی یافت شود (و از گزینه‌های بازنویسی استفاده نشود)، اسکریپت همه منوهای انتخاب‌شده در FvwmForm-XDGMenu-Config را تولید می‌کند.

گزینه‌های --desktop، --menu-type، --set-menus و --all-menus بر تمامی منوهای انتخاب‌شده در FvwmForm-XDGMenu-Config تقدم داشته و آن‌ها را بازنویسی می‌کنند.

گزینه‌های --desktop و --menu-type فقط منوهایی را شامل می‌شوند که نام آن‌ها با 'desktop*menutype' مطابقت داشته باشد. اگر همراه با --all-menus استفاده شوند، تمام منوهای منطبق تولید می‌شوند. اگر بدون --all-menus استفاده شوند، تنها منویی که بالاترین وزن را دارد تولید می‌شود.

گزینه --set-menus منوها را از فهرست نام فایل‌های منو با مسیر کامل تولید می‌کند.

گزینه --all-menus به تنهایی تمام منوهای یافت‌شده را تولید می‌کند.

به‌طور پیش‌فرض fvwm-menu-desktop منویی ایجاد می‌کند که نام بالاترین سطح آن "XDGMenu" است. برای اینکه به fvwm بگویید خروجی fvwm-menu-desktop را برای ساخت منوی XDGMenu بخواند، خط زیر را به فایل پیکربندی fvwm خود اضافه کنید:

PipeRead 'fvwm-menu-desktop'

هشدار: بسته به گزینه‌های استفاده‌شده این دستور ممکن است کُند باشد و fvwm تا زمان کامل شدن این دستور متوقف خواهد شد. برای جزئیات بیشتر و راه‌حل‌های احتمالی، به بخش مثال‌ها (EXAMPLES) در زیر مراجعه کنید.

پس از تولید منو، می‌توانید با استفاده از دستور "Menu XDGMenu" آن را باز کنید. همچنین می‌توانید با دستور زیر آن را در منوی MenuFvwmRoot بگنجانید:

AddToMenu MenuFvwmRoot "XDG Menu" Popup XDGMenu

دستور fvwm-menu-desktop می‌تواند هم از طریق گزینه‌های خط فرمان و هم از طریق یک رابط کاربری گرافیکی FvwmForm پیکربندی شود تا منو(های) تولیدی را سفارشی‌سازی کند..SH "رابط کاربری گرافیکی (GUI)"

FvwmForm-XDGMenu-Config یک رابط FvwmForm است که می‌تواند برای پیکربندی مقادیر پیش‌فرض fvwm-menu-desktop استفاده شود. می‌توانید از طریق آیتم «Configure» در منوی سطح بالایی که تولید شده به آن دسترسی پیدا کنید یا دستور زیر را از درون FvwmCommand یا FvwmPrompt اجرا نمایید:

Module FvwmPerl -l fvwm-menu-desktop-config.fpl

از این فرم می‌توان برای انتخاب این‌که چه منو(هایی) به‌طور پیش‌فرض تولید شوند، به همراه تنظیم بسیاری از (اما نه همهٔ) گزینه‌های موجود استفاده کرد. هنگامی که روی «Save Settings» کلیک می‌کنید، این فرم یک فایل پیکربندی در مسیر $FVWM_USERDIR/.FvwmForm-XDGMenu-Config می‌نویسد که fvwm-menu-desktop در زمان اجرا، آن را برای مقادیر پیش‌فرض تجزیه خواهد کرد.

برای اطلاعات بیشتر، راهنمای درون FvwmForm-XDGMenu-Config را ببینید.

راه‌های زیادی برای تنظیم این‌که fvwm چه زمانی fvwm-menu-desktop را برای تولید منو اجرا کند، وجود دارد. یک روش این است که صرفاً هنگام بارگذاری fvwm منو تولید شود و سپس از ابزار پیکربندی گرافیکی برای تغییر هر یک از گزینه‌ها استفاده شود. برای این کار، فقط کافی است موارد زیر را به فایل پیکربندی fvwm اضافه کنید:

AddToMenu MenuFvwmRoot "XDG Menu" Popup XDGMenu PipeRead
'fvwm-menu-desktop'

منو یک بار هنگام بارگذاری fvwm ایجاد می‌شود. از آن‌جا که ساخت منو گاهی اوقات ممکن است کُند باشد، این امر می‌تواند باعث شود بارگذاری fvwm بیش از حد انتظار طول بکشد.

منو تنها هنگام شروع به کار fvwm تولید می‌شود. اگر نرم‌افزاری نصب یا حذف شود، باید گزینهٔ 'Regenerate' را برای بازسازی منو انتخاب کنید.

یک روش برای افزایش سرعت این است که منو را در یک فایل ذخیره کرده و فقط هنگامی که 'Regenerate' انتخاب شد، منو را تولید نمایید. برای این کار از --regen-cmd برای فراخوانی یک تابع سفارشی استفاده کنید و با دستوری مانند دستور زیر، منو را در یک فایل بنویسید:

fvwm-menu-desktop --regen-cmd XDGRegen > $FVWM_USERDIR/.XDGMenu

سپس دستورهای زیر را به فایل پیکربندی fvwm اضافه کنید تا تابع XDGRegen تعریف شود. خط یکی مانده به آخر، در صورتی که فایل منو هنگام شروع fvwm وجود نداشته باشد، آن را تولید خواهد کرد.

DestroyFunc XDGRegen
AddToFunc   XDGRegen
+ I PipeRead 'fvwm-menu-desktop --regen-cmd XDGRegen > \
    $[FVWM_USERDIR]/.XDGMenu; echo "Nop"'
+ I Read $[FVWM_USERDIR]/.XDGMenu
Test (!f $[FVWM_USERDIR]/.XDGMenu) XDGRegen Read $[FVWM_USERDIR]/.XDGMenu

علاوه بر ایجاد یک منوی سطح بالا، fvwm-menu-desktop می‌تواند با استفاده از گزینهٔ --insert-in-menu منو را درون یک منوی موجود درج کند. برای مثال، می‌توان منوی MenuFvwmRoot را ایجاد کرده و آیتم‌های XDG را در انتهای آن قرار داد.

DestroyMenu MenuFvwmRoot
AddToMenu   MenuFvwmRoot "Fvwm" Title
+ "Item1" Action1 ...
+ "ItemN" ActionN
+ "" Nop
PipeRead 'fvwm-menu-desktop --insert-in-menu MenuFvwmRoot'

در این حالت، آیتم‌های منو در انتهای منوی MenuFvwmRoot درج می‌شوند. اگر هیچ آیتمی در منو نباشد، این منو به MenuFvwmRoot تبدیل می‌شود. مشکل این‌جاست که برای بازسازی (Regenerate) آن باید fvwm را مجدداً راه‌اندازی کنید یا کل منو را از نو بسازید، زیرا آیتم‌های منو قابل حذف نیستند. برای انجام این کار می‌توانید از تابعی مانند زیر استفاده کنید:

DestroyFunc XDGRegen
AddToFunc   XDGRegen
+ I DestroyMenu MenuFvwmRoot
+ I AddToMenu MenuFvwmRoot "Fvwm" Title
+ I AddToMenu MenuFvwmRoot "Item1" Action1 ...
+ I AddToMenu MenuFvwmRoot "ItemN" ActionN
+ I AddToMenu MenuFvwmRoot "" Nop
+ I PipeRead 'fvwm-menu-desktop --insert-in-menu MenuFvwmRoot \
    --regen-cmd XDGRegen'

همچنین fvwm می‌تواند با استفاده از DynamicPopUpAction و/یا DynamicPopDownAction منوها را به‌صورت پویا ایجاد کند. این دستورها هنگامی که به همراه یک منو استفاده شوند، در زمان باز شدن منو یک تابع را اجرا می‌کنند. به عنوان مثال، می‌توان منوی XDGMenu را هنگام باز شدن آن با استفاده از دستور زیر ایجاد کرد:

AddToMenu XDGMenu "XDGMenu" Title
+ DynamicPopUpAction PipeRead 'fvwm-menu-desktop'

این کار منو را هنگام باز شدن ایجاد می‌کند. یک مشکل در این‌جا این است که فقط بار اولی که منو باز می‌شود ایجاد خواهد شد و برای دیدن تغییرات هنوز باید منو را Regenerate کنید. برای این‌که منو هر بار که باز می‌شود ساخته شود، از گزینهٔ --dynamic استفاده کنید:

AddToMenu XDGMenu "XDGMenu" Title
+ DynamicPopUpAction PipeRead 'fvwm-menu-desktop \
    --dynamic --include-items config'
+ DynamicPopDownAction DestroyMenu recreate XDGMenu

این کار باعث می‌شود هنگام بسته شدن منو، دستور Destroy روی آن اجرا شود تا دفعهٔ بعد که باز می‌شود دوباره ساخته شود. پرچم recreate منو را به‌طور کامل نابود نمی‌کند و اکشن‌های DynamicPopUpAction و DynamicPopDownAction را حفظ می‌نماید. پرچم --dynamic گزینهٔ recreate را در منوهای تولیدشده می‌گنجاند.

برای درج یک منو در MenuFvwmRoot و در عین حال پویا نگه داشتن آن، باید از تابعی استفاده کنید که کل منو را تولید کند. برای مثال:

DestroyFunc GenRootMenu
AddToFunc GenRootMenu
+ I DestroyMenu recreate MenuFvwmRoot
+ I AddToMenu MenuFvwmRoot "Fvwm" Title
+ I AddToMenu MenuFvwmRoot "Item1" Action1 ...
+ I AddToMenu MenuFvwmRoot "ItemN" ActionN
+ I AddToMenu MenuFvwmRoot "" Nop
+ PipeRead `fvwm-menu-desktop --insert-in-menu MenuFvwmRoot \
    --include-items config`
AddToMenu MenuFvwmRoot "Fvwm" Title
+ DynamicPopUpAction GenRootMenu
+ DynamicPopDownAction DestroyMenu recreate MenuFvwmRoot

کل فرایند ایجاد منوها از روی فایل‌ها کُند است. در غیر این صورت، باگ‌ها را به فهرست پستی fvwm-workers گزارش دهید <fvwm-workers@fvwm.org>.

این اسکریپت بر اساس fvwm-xdg-menu.py نوشته‌شده توسط Piotr Zielinski است ( http://www.cl.cam.ac.uk/~pz215) که مجوز GPL 2 را در تاریخ 03.12.2005 برای آن تعیین کرده است.

این اسکریپت توسط fvwm-workers بازنویسی شد تا جایگزین اسکریپت perl موجود fvwm-menu-desktop شود.

این اسکریپت تحت همان شرایط خود fvwm توزیع می‌شود. برای جزئیات، GNU General Public License را ببینید.

2026-06-28