labwc-menu(5) File Formats Manual labwc-menu(5)

labwc-menu - پرونده‌های منوی labwc

منوهای ایستا بر اساس فایل menu.xml قرار گرفته در "~/.config/labwc" و دایرکتوری‌های پایه معادل XDG ساخته می‌شوند.

فایل منو باید به‌طور کامل درون تگ‌های <openbox_menu> و </openbox_menu> محصور باشد. در داخل این تگ‌ها، منوها به شکل زیر مشخص می‌شوند:

<!-- A toplevel menu -->
<menu id="external_menu_settings" label="External Settings" icon="preferences-other">
  <item label="Display setting">
    <action name="Execute" command="wdisplays" />
  </item>
</menu>
<!-- Another toplevel menu -->
<menu id="">
  <!-- A menu entry with an action, for example to execute an application -->
  <item label="" icon="">
    <action></action>
  </item>
  <!-- A submenu defined elsewhere, uses external label and icon attributes -->
  <menu id="external_menu_settings" />
  <!-- Horizontal line -->
  <separator />
  <!-- An inline submenu -->
  <menu id="" label="" icon="">
    ...some content...
  </menu>
  <!-- Title -->
  <separator label="" />
  <!-- Pipemenu -->
  <menu id="" label="" icon="" execute="COMMAND" />
</menu>

menu.id (هنگام قرارگیری در سطح بالا)

تعریف یک درخت منو. به هر منو باید یک id اختصاص داده شود، که یک شناسه یکتا برای منو است. از این id برای ارجاع به منو در اکشن ShowMenu استفاده می‌شود. شناسه‌های پیش‌فرض عبارتند از:
  • "root-menu" برای منوی زمینه پنجره ریشه (root window)
  • "client-menu" برای منوی زمینه نوار عنوان پنجره
  • "client-list-combined-menu" برای فهرستی از تمام پنجره‌ها در تمام فضاهای کاری. فوکوس را به برنامه‌ای که انتخاب می‌شود تغییر می‌دهد یا در صورت انتخاب "Go there" بدون فعال‌کردن هیچ برنامه‌ای به فضای کاری می‌رود.
  • "client-send-to-menu" تمام فضاهای کاری را نمایش می‌دهد و پنجره فعلی را هنگام انتخاب به آن فضای کاری می‌فرستد.

menu.id (هنگام قرارگیری به عنوان زیرمجموعه عنصر <menu> دیگر)

پیوند به زیرمنویی که در جای دیگری تعریف شده است (توسط یک <menu id=""> در سطح بالا).

menu.label

عنوان منو که در والد آن نمایش داده می‌شود. هنگام تعریف یک منو باید یک label مشخص شود مگر اینکه بالاترین عنصر منو باشد.

توجه داشته باشید که Openbox نیازمند تعریف label="" برای بالاترین عناصر نیز هست، اما labwc برای سادگی با وجود یا عدم وجود صفت label با آن‌ها رفتار می‌کند.

menu.icon

آیکونی برای نمایش در والد آن. این آرگومان اختیاری است. برای جزئیات بیشتر به menu.item.icon مراجعه کنید.

menu.item.label

نام نمایشی آیتم منو.

menu.item.icon

نام آیکونی که در جلوی مدخل منو نمایش داده می‌شود. این صفت اختیاری است. این نام از قراردادهای نام‌گذاری ورودی‌های "Icon=" در فایل‌های .desktop پیروی می‌کند. در صورت استفاده، توصیه می‌شود تنها از نام آیکون استفاده شود تا یک مسیر کامل. این امر تضمین می‌کند که آیکون در مقیاس خروجی محل نمایش منو جستجو خواهد شد. برای مثال، استفاده از icon="vlc" بر استفاده از icon="/usr/share/icons/hicolor/16x16/apps/vlc.png" ترجیح داده می‌شود.

menu.item.action

به labwc-actions(5) مراجعه کنید. نکته: برای حفظ سازگاری با obmenu-generator، قابلیت XML CDATA برای این گره پشتیبانی می‌شود.

menu.separator

خط افقی.

menu.separator.label

در یک عنصر "separator"، صفت label جداکننده را از یک خط افقی به یک عنوان منو (تیتر) همراه با متن مشخص‌شده در label تبدیل می‌کند.

menu.execute

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

پایپ‌منوها، منوهایی هستند که به صورت پویا بر اساس خروجی اسکریپت‌ها یا باینری‌ها تولید می‌شوند. این منوها از آنجا به این نام خوانده می‌شوند که خروجی برنامه اجرایی به منوی labwc پایپ می‌شود.

برای هر مدخل <menu id="" label="" execute="COMMAND" /> در menu.xml، دستور COMMAND در اولین باری که آیتم انتخاب می‌شود (برای مثال با مکان‌نما یا ورودی صفحه‌کلید) اجرا خواهد شد. خروجی XML دستور تجزیه شده و به عنوان یک زیرمنو نمایش داده می‌شود. محتوای پایپ‌منوها تا زمانی که کل منو (نه فقط پایپ‌منو) بسته شود در حافظه موقت (کش) نگهداری می‌شود.

محتوای خروجی باید به طور کامل درون تگ‌های <openbox_pipe_menu> محصور باشد. در داخل این تگ‌ها، منوها دقیقاً به همان روش منوهای ایستا (عادی) مشخص می‌شوند، برای مثال:

<openbox_pipe_menu>
  <item label="Terminal">
    <action name="Execute" command="xterm" />
  </item>
</openbox_pipe_menu>

زیرمنوهای درون‌خطی و پایپ‌منوهای تو در تو پشتیبانی می‌شوند.

توجه داشته باشید که اطمینان از یکتا بودن صفت‌های ID بر عهده برنامه اجرایی پایپ‌منو است. شناسه‌های تکراری نادیده گرفته می‌شوند.

هنگام نوشتن اسکریپت‌های پایپ‌منو، اطمینان حاصل کنید که کاراکترهای خاص XML مانند "&" ("&amp;")، "<" ("&lt;")، و ">" ("&gt;") را اسکیپ کنید.

یک پایپ‌منو همچنین می‌تواند برای تعریف عنصر سطح بالای <menu> استفاده شود. در این حالت کل فایل menu.xml به چیزی شبیه به این خلاصه می‌شود (با جایگزینی obmenu-generator با تولیدکننده منوی دلخواه شما):

<?xml version="1.0"?>
<openbox_menu>
  <menu id="root-menu" label="" execute="obmenu-generator" />
</openbox_menu>

شتاب‌دهنده‌های منو، میانبرهای تک‌حرفی برای انتخاب یا اجرای سریع آیتم‌ها از منوی فعلی هستند. برای هر آیتم منو، شتاب‌دهنده به عنوان اولین کاراکتر برچسب آیتم تعریف می‌شود که به حروف کوچک تبدیل شده است. یک شتاب‌دهنده متفاوت را می‌توان به صراحت در menu.xml با قرار دادن کاراکتر ویژه '_' پیش از حرف مورد نظر تعیین کرد. شتاب‌دهنده‌ها می‌توانند هر نویسه یونیکد باشند و محدود به ASCII نیستند. یک زیرخط (underscore) معمولی را می‌توان با تکرار آن نشان داد.

اگر منو تنها شامل یک نمونه از شتاب‌دهنده فشرده‌شده باشد، آن آیتم بلافاصله اجرا می‌شود. در غیر این صورت، بین تمام آیتم‌های منطبق گردش انجام خواهد شد.

مثال: شتاب‌دهنده برای یک آیتم با برچسب "e_Macs" نویسه 'm' است.

بومی‌سازی موجود برای "client-menu" پیش‌فرض تنها زمانی نمایش داده می‌شود که هیچ "client-menu" در menu.xml وجود نداشته باشد. هرگونه تعریف منو در menu.xml به عنوان بازنویسی توسط کاربر در نظر گرفته می‌شود.

labwc(1), labwc-actions(5), labwc-config(5), labwc-theme(5)

2026-08-22