| FVWMBUTTONS(1) | Fvwm Modules | FVWMBUTTONS(1) |
نام (NAME)
FvwmButtons - ماژول جعبه دکمه fvwm
خلاصه دستور (SYNOPSIS)
Module FvwmButtons [-g geometry] [-transient | -transientpanel] [name[configfile]]
برنامه FvwmButtons تنها میتواند توسط fvwm فراخوانی شود. فراخوانی ماژول FvwmButtons از خط فرمان کار نخواهد کرد.
توضیحات (DESCRIPTION)
ماژول FvwmButtons پنجرهای از دکمهها را فراهم میکند که بر روی پنجره ریشه (root window) ترمینال X قرار میگیرد. کاربر میتواند در هر زمانی دکمهها را بفشارد و فراخوانی دستوری مشخصشده توسط کاربر را به وسیله مدیر پنجره فعال کند. برنامه FvwmButtons تنها زمانی کار میکند که fvwm به عنوان مدیر پنجره استفاده شود.
جعبه دکمه میتواند از هر پیکربندی یا هندسهای (geometry) برخوردار باشد و میتواند آیکونهای تکرنگ یا رنگی برای نمایش کنشهایی که فراخوانی میشوند داشته باشد. حتی سایر برنامهها نیز میتوانند توسط نوار دکمه بلعیده شوند ('swallowed').
پنلهایی که با فشردن دکمه باز میشوند نیز در دسترس هستند. برای جزئیات به بخش CREATING PANELS مراجعه کنید.
گزینهها (OPTIONS)
گزینه -g هندسه پنجره اصلی را مشخص میکند. این گزینه خط فرمان بر هر تنظیم هندسه دیگری در فایل پیکربندی اولویت دارد.
گزینه -transient به FvwmButtons اعلام میکند که پس از دریافت اولین کلید یا فشردن دکمه (فشردن دکمه برای باز کردن زیرپنل محاسبه نمیشود) یا پس از بسته شدن یا بازتولید (respawn) یک زیرپنل، به کار خود پایان دهد. این ویژگی بهویژه برای زیرپنلهایی مفید است که میخواهید یک دکمه منفرد را انتخاب کنید و زیرپنل به طور خودکار بسته شود. میتوان از آن برای ایجاد منوهای گرافیکی دوبعدی استفاده کرد. از آنجا که -transient یک گزینه است و نه یک تنظیم پیکربندی، میتوانید از همان پیکربندی هم برای نوارهای دکمه گذرا (transient) و هم غیرگذرا استفاده کنید.
گزینه -transientpanel تقریباً همان کار گزینه -transient را انجام میدهد، اما به جای بستن کل نوار دکمه، پنجره صرفاً پنهان میشود. این قابلیت زمانی که نوار دکمه به عنوان یک زیرپنل از نوار دکمه دیگری اجرا شده باشد بسیار مفید است، زیرا از نیاز به اجرای مجدد آن در هنگام انتخاب یک مورد جلوگیری میکند.
فراخوانی (INVOCATION)
برنامه FvwmButtons توسط fvwm راهاندازی میشود، بنابراین فراخوانی آن از طریق خط فرمان کار نخواهد کرد.
برنامه FvwmButtons میتواند با قرار دادن خط 'Module FvwmButtons OptionalName' در فایل .fvwm2rc فراخوانی شود. اگر قرار است FvwmButtons در حین مقداردهی اولیه fvwm اجرا شود، این دستور باید در StartFunction قرار گیرد. همچنین میتوان آن را به یک منو، دکمه موشیواره یا کلید صفحه کلید مقید کرد تا بعداً فراخوانی شود.
هنگامی که با آرگومان OptionalName فراخوانی شود، مقدار OptionalName برای یافتن دستورات پیکربندی استفاده میشود. برای مثال:
AddToFunc StartFunction Module FvwmButtons MyButtonBox
سپس FvwmButtons به جای "*FvwmButtons" پیشفرض، فقط از خطوطی استفاده میکند که با "*MyButtonBox" آغاز میشوند.
گزینههای پیکربندی (CONFIGURATION OPTIONS)
دستورات زیر توسط FvwmButtons شناخته میشوند:
*FvwmButtons: Back color
*FvwmButtons: BoxSize algorithm
اگر از fixed استفاده شود و هر دو گزینه Rows و Columns مشخص و غیرصفر باشند، FvwmButtons دقیقاً از تعداد سطرها و ستونهای مشخصشده استفاده میکند. اگر جعبه برای جای دادن همه دکمهها بسیار کوچک باشد، ماژول با شکست مواجه خواهد شد.
اگر از smart استفاده شود، FvwmButtons جعبه را بزرگتر میکند تا همه دکمهها امکان جا شدن داشته باشند. تعداد ستونها حداقل به اندازه عرض عریضترین دکمه افزایش مییابد و سطرهای جدید تا زمانی که همه دکمهها جای گیرند اضافه میشوند. برای داشتن بهترین تحمل در برابر خطاهای پیکربندی از گزینه smart استفاده کنید.
مقدار dumb نه fixed است و نه smart. این حالت پیشفرض است.
*FvwmButtons: Colorset colorset
*FvwmButtons: ActiveColorset colorset
*FvwmButtons: PressColorset colorset
*FvwmButtons: Columns columns
*FvwmButtons: File filename
*FvwmButtons: Font font
*FvwmButtons: Fore color
*FvwmButtons: Frame width
*FvwmButtons: Geometry geometry
*FvwmButtons: ButtonGeometry geometry
*FvwmButtons: Padding width height
*FvwmButtons: Pixmap pixmapfile
*FvwmButtons: Rows rows
*FvwmButtons: WindowName name
*FvwmButtons: (options) [title icon command]
geometry
Action [(options)] command
گزینههای فعلی Action عبارتند از: Mouse n - این کنش تنها برای دکمه n موشیواره اجرا میشود. علاوه بر کنش عمومی، میتوان یک کنش را برای هر دکمه موشیواره تعریف کرد.
در بخش command، میتوانید از چندین متغیر از پیش تعریفشده استفاده کنید: $left، $right، $top و $bottom با مختصات چپ، راست، بالا و پایین دکمه فشردهشده جایگزین میشوند. متغیرهای $-left، $-right، $-top و $-bottom نیز به همین ترتیب جایگزین میشوند، اما مختصات در عوض از لبه پایین یا راست صفحه محاسبه میشوند (برای دکمهای که ۵ پیکسل از لبه راست صفحه فاصله دارد، مقدار $-right برابر ۵ خواهد بود). متغیرهای $width و $height با عرض یا ارتفاع دکمه جایگزین میشوند. متغیرهای $fg و $bg با نام رنگ پیشزمینه یا پسزمینه تنظیمشده با گزینه Back یا Fore جایگزین میشوند (به زیر مراجعه کنید). تمام این جایگزینیها صرفنظر از هرگونه نویسه نقلقول انجام میشوند. برای درج یک '$' واقعی از رشته '$$' استفاده کنید.
مثال:
*FvwmButtons: (Title xload, Action (Mouse 1) \ `Exec exec xload -fg $fg -bg $bg -geometry -3000-3000`)
توجه: در نسخههای fvwm قبل از 2.5.0، نمیشد کنشها را به دکمهای اختصاص داد که پنجره برنامهای را میبلعید (گزینه Swallow را ببینید). چنین کنشهایی تنها زمانی کار میکردند که روی حاشیه دور دکمه کلیک میشد. این قابلیت اکنون فراهم است، اما برای بازگرداندن رفتار قدیمی، میتوان از ActionIgnoresClientWindow روی دکمه استفاده کرد:
*FvwmButtons: (Action beep, ActionIgnoresClientWindow, \ Swallow xeyes "Exec exec xeyes")
در این مثال، کنش تنها زمانی اجرا میشود که روی حاشیه دکمه یا بخش شفاف پنجره xeyes کلیک کنید، نه روی خود پنجره xeyes.
ActionIgnoresClientWindow
ActionOnPress
Back color
Center
Top
Colorset colorset
اگر پنجره بلعیدهشده یک ماژول fvwm باشد (گزینه (No)FvwmModule در دستور Swallow را ببینید)، آنگاه colorset به ماژول بلعیدهشده اعمال نمیشود. شما باید از colorset در پیکربندی ماژول استفاده کنید. اگر ماژول بلعیدهشده دارای یک پسزمینه شفاف باشد، پسزمینه FvwmButtons (و نه مجموعه رنگ دکمه) از میان شفافیت پسزمینه ماژول بلعیدهشده دیده میشود. برای جزئیات در مورد مجموعههای رنگ به صفحه راهنمای fvwm مراجعه کنید.
ActiveColorset colorset
PressColorset colorset
Container [(options)]
خود دکمه محفظه (مستقل از محتویات آن) میتواند گزینههای قالببندی مانند Frame و Padding را بپذیرد، و دستورات میتوانند به آن متصل شوند. این بدان معنی است که میتوانید یک برجستگی حساس به کلیک در اطراف یک محفظه بسازید، مانند:
*FvwmButtons: (2x2, Frame 5, Padding 2 2, Action Beep,\
Container(Frame 1))
به طور معمول شما میخواهید حداقل یک تنظیم اندازه widthx_height_ به محفظه بدهید.
End
*FvwmButtons: (End)
Font fontname
Fore color
Frame width
Icon filename
ActiveIcon filename
PressIcon filename
Id id
Left
NoSize
Padding width height
Panel [ (options) ] hangon command
گزینه steps animation-steps تعداد مراحل پویانمایی را تعیین میکند.
گزینه delay ms تأخیر بین مراحل پویانمایی را به میلیثانیه مشخص میکند. از صفر برای بدون تأخیر استفاده کنید. حداکثر مقدار تأخیر ۱۰ ثانیه (10000) است. استفاده از گزینه تأخیر هیچ فایدهای ندارد مگر اینکه از گزینه smooth نیز استفاده کنید.
گزینه smooth باعث میشود پنل بین مراحل پویانمایی دوباره ترسیم شود. پویانمایی لغزشی به این ترتیب ممکن است روانتر باشد؛ این امر به برنامه و سرعت نمایشگر بستگی دارد. برنامه ممکن است به جای بیرون لغزیدن، در حال بزرگ شدن به نظر برسد. پویانمایی ممکن است کندتر باشد.
گزینه Hints باعث میشود FvwmButtons از راهنماهای اندازه برنامه (size hints) برای محاسبه اندازه مراحل پویانمایی استفاده کند. گزینه Hints حالت پیشفرض است. اگر تعداد مراحل آن چیزی نیست که میخواهید، از NoHints استفاده کنید.
گزینه noborder به FvwmButtons میگوید هنگام محاسبه موقعیتها برای پویانمایی، حاشیههای پنجره را نادیده بگیرد (معادل تنظیم noplr و noptb در گزینه position).
با تنظیم گزینه indicator، برنامه FvwmButtons یک مثلث کوچک در دکمهای که پنل را باز خواهد کرد ترسیم میکند. جهت مثلث به سمتی است که پنل باز میشود. کلیدواژه indicator میتواند با یک عدد صحیح مثبت دنبال شود که حداکثر عرض و ارتفاع نشانگر را مشخص میکند. بدون این اندازه، FvwmButtons نشانگر را هماندازه دکمه میکند. احتمالاً مایل خواهید بود از گزینه Padding برای باقی گذاشتن چند پیکسل فاصله بین نشانگر و کادر دکمه استفاده کنید. گزینه دومی نیز میتواند برای indicator مشخص شود که ظاهر مثلث را تعیین میکند. اگر این کلیدواژه in باشد، مثلث به صورت فرورفته ظاهر میشود، در حالی که out باعث میشود مثلث به صورت برآمده (سهبعدی برجسته) به نظر برسد. اگر این کلیدواژه حذف شود، پیشفرض out یا برآمده خواهد بود.
گزینه position امکان تعیین موقعیت پنل را فراهم میکند. نحو آن به این صورت است:
position [context-window] [pos] [x y] [border-opts]
آرگومان context-window میتواند یکی از موارد زیر باشد: Button، Module یا Root. پنجره زمینه (context-window) پنجرهای است که جابهجایی درصدی پنل از آن محاسبه میشود. مقدار Button دکمه پنل را مشخص میکند، Module خود FvwmButtons را مشخص میکند، و Root یک صفحه مجازی را مشخص میکند. پنجره زمینه همراه با جهت لغزش، یک پارهخط را تعریف میکنند که یکی از حاشیههای پنجره زمینه است: حاشیه بالا/پایین/چپ/راست برای لغزش به بالا/پایین/چپ/راست.
آرگومان pos میتواند یکی از موارد زیر باشد: center، left یا right (برای لغزش به بالا یا پایین) یا top یا bottom (برای لغزش به چپ یا راست). این آرگومان موقعیت عمودی (لغزش به بالا و پایین) یا افقی (لغزش به چپ و راست) پنل را روی پارهخط مشخص میکند. برای مثال، برای یک لغزش به بالا اگر از pos با مقدار left استفاده کنید، حاشیههای چپ پنل و پنجره زمینه همتراز خواهند شد.
مقادیر جابهجایی x و y مشخص میکنند که پنل چه اندازه از موقعیت پیشفرض خود جابهجا شود. به طور پیشفرض، مقدار عددی دادهشده به عنوان درصدی از عرض (ارتفاع) پنجره زمینه تفسیر میشود. حرف پایانی "p" این تفسیر را به "پیکسل" تغییر میدهد. تمام محاسبات جابهجایی نسبت به مکان دکمهها سنجیده میشوند، حتی در صورت استفاده از زمینه root.
گزینههای border-opts عبارتند از: mlr، mtb، noplr و noptb. آنها مشخص میکنند که عرض کدام حاشیهها محاسبه شود. به طور پیشفرض، حاشیههای FvwmButtons در نظر گرفته نمیشوند. گزینه mlr این پیشفرض را برای حاشیه چپ و راست معکوس میکند و mtb این پیشفرض را برای حاشیه بالا و پایین معکوس میکند. برعکس، حاشیههای Panel به طور پیشفرض در نظر گرفته میشوند. گزینه noplr این پیشفرض را برای حاشیه چپ و راست معکوس میکند و noptb این پیشفرض را برای حاشیه بالا و پایین معکوس میکند.
تنظیمات پیشفرض عبارتند از لغزش به بالا با تأخیر پنج میلیثانیه و دوازده مرحله پویانمایی. برای نمایش پنل بدون هیچگونه پویانمایی، تعداد مراحل را روی صفر تنظیم کنید. موقعیت پیشفرض 'Button center' است.
لطفاً برای اطلاعات بیشتر درباره پنلها به بخش CREATING PANELS مراجعه کنید.
مثال:
# To include the panel in a button *FvwmButtons: (Panel(down, delay 0, steps 16) \ SubPanel "Module FvwmButtons SubPanel") # To define the panel as an instance of # FvwmButtons with a different name: *SubPanel: (Icon my_lock.xpm, Action Exec xlock) *SubPanel: (Icon my_move.xpm, Action Move) ...
Right
Size width height
Swallow [(flags)] hangon command
*FvwmButtons: (Swallow XClock 'Exec xclock -geometry -3000-3000 &')
نخستین پنجرهای را که نام، کلاس یا منبع آن "XClock" باشد برداشته و در دکمه نمایش میدهد. اگر هیچ پنجره منطبقی یافت نشود، دستور "Exec" یکی ایجاد میکند. آرگومان "-geometry -3000-3000" به این دلیل به کار رفته که پنجره ابتدا خارج از دید ترسیم شود تا بعد درون FvwmButtons بلعیده شود.
ماژولها را میتوان با مشخص کردن خود ماژول به جای 'Exec whatever' بلعید، مانند:
*FvwmButtons: (Swallow "FvwmPager" "FvwmPager 0 0")
پرچمهایی که میتوان به swallow داد عبارتند از:
NoClose / Close - مشخص میکند که آیا برنامه بلعیدهشده در این دکمه در هنگام خروج بدون خطای FvwmButtons از حالت بلعیده خارج شود یا بسته شود. گزینه "NoClose" را میتوان با "UseOld" ترکیب کرد تا پنجرهها پس از راهاندازی مجدد مدیر پنجره پابرجا بمانند. تنظیم پیشفرض "Close" است.
NoHints / Hints - مشخص میکند که آیا راهنماها (hints) از برنامه بلعیدهشده در این دکمه نادیده گرفته شوند یا خیر، که برای مجبور کردن یک پنجره به تغییر اندازه جهت جا شدن در دکمه مفید است. مقدار پیشفرض "Hints" است.
NoKill / Kill - مشخص میکند که آیا برنامه بلعیدهشده با بستن اجباری (kill) پایان یابد یا با ارسال یک پیام به آن. این کار میتواند برای پایان دادن به برنامههایی که پروتکل مدیر پنجره را نمیپذیرند مفید باشد. مقدار پیشفرض "NoKill" است. در صورت مشخص شدن "NoClose" این گزینه اثری ندارد.
NoRespawn / Respawn / SwallowNew - مشخص میکند که آیا برنامه بلعیدهشده در صورت بسته شدن ناگهانی، مجدداً اجرا (respawn) شود یا خیر. اگر "Respawn" مشخص شود، برنامه با استفاده از command اولیه دوباره راهاندازی میشود. با احتیاط از این گزینه استفاده کنید، چرا که ممکن است برنامه دلیل موجهی برای پایان یافتن داشته باشد. اگر "SwallowNew" داده شود، برنامه مجدداً اجرا نمیشود، اما اگر پنجره جدیدی با نام مشخصشده ظاهر شود، بلعیده خواهد شد.
NoOld / UseOld - مشخص میکند که آیا دکمه پیش از آنکه خودش پنجرهای را با command ایجاد کند، برای بلعیدن یک پنجره موجود مطابق با نام hangon تلاش خواهد کرد یا خیر. رشته hangon میتواند حاوی نویسههای عام ('*') باشد که با هر زیررشتهای مطابقت دارند. مقدار پیشفرض "NoOld" است. "UseOld" را میتوان با "NoKill" ترکیب کرد تا پنجرهها پس از راهاندازی مجدد مدیر پنجره پابرجا بمانند. اگر میخواهید FvwmButtons یک پنجره قدیمی را ببلعد و در صورت عدم موفقیت خودش برنامهای را اجرا نکند، مقدار command را برابر "Nop" قرار دهید:
*FvwmButtons: (Swallow (UseOld) "Console" Nop)
اگر میخواهید خودتان بتوانید آن را اجرا کنید، آن را با یک کنش ترکیب نمایید:
*FvwmButtons: (Swallow (UseOld) "Console" Nop, \
Action `Exec "Console" console &`)
NoTitle / UseTitle - مشخص میکند که آیا عنوان دکمه از عنوان پنجره بلعیدهشده گرفته شود یا خیر. اگر "UseTitle" داده شود، عنوان روی دکمه به صورت پویا تغییر میکند تا نام پنجره را بازتاب دهد. مقدار پیشفرض "NoTitle" است.
NoFvwmModule / FvwmModule - به طور پیشفرض، FvwmButtons پنجره بلعیدهشده را در صورتی که ۴ حرف اول command برابر "Fvwm" یا ۶ حرف اول command برابر "Module" باشد به عنوان پنجره ماژول fvwm در نظر میگیرد. NoFvwmModule و FvwmModule این منطق را نادیده میگیرند و لغو میکنند.
Title [(options)] name
Center - عنوان به صورت افقی در مرکز قرار میگیرد. این حالت پیشفرض است.
Left - عنوان در سمت چپ تراز میشود.
Right - عنوان در سمت راست تراز میشود.
Side - باعث میشود عنوان به جای قرار گرفتن در زیر (که حالت پیشفرض است)، در سمت راست هر آیکون یا پنجره بلعیدهشده ظاهر شود. اگر از آیکونهای کوچک استفاده میکنید و این مورد را با گزینه "Left" یا "Right" ترکیب نمایید، میتوانید ظاهری شبیه به منوهای fvwm به دست آورید.
ActiveTitle name
PressTitle name
فیلدهای قدیمی (Legacy fields) [title icon command]
دستور (The command)
دستور Exec در هنگام استفاده در Actions دارای یک پسوند کوچک است، نحو آن چنین است:
Exec ["hangon"] command
مثال:
*FvwmButtons: (Action Exec "xload" xload)
رشته hangon باید درون نقلقول جفتی قرار گیرد. هنگامی که FvwmButtons با چنین دستور Exec مواجه میشود، دکمه تا زمانی که پنجرهای با نام، کلاس یا منبع منطبق با بخش درون نقلقولِ دستور دیده شود، به صورت فشرده باقی میماند. این سازوکار به منظور ارائه بازخورد بصری به کاربر است که کنش درخواستی او اجرا خواهد شد. رشته hangon میتواند شامل نویسههای عام ('*') باشد که با هر زیررشتهای مطابقت دارند. اگر بخش درون نقلقول فاقد هرگونه نویسه باشد، دکمه بلافاصله به بیرون بازمیگردد. توجه داشته باشید که کاربران میتوانند به فشردن دکمه و اجرای مجدد دستور ادامه دهند، حتی زمانی که دکمه فشرده به نظر میرسد.
نقلقول (Quoting)
'This is a "quote"',
نقلقول جفتی:
"It’s another `quote'",
و نقلقول معکوس (بکتیک):
This is a strange quote.
استفاده از نقلقول معکوس غیرمعمول است اما به عمد برای زمانی است که از یک پیشپردازنده استفاده میکنید و میخواهید دستورات شما را تحت تأثیر قرار دهد، مانند این:
#define BG gray60 *FvwmButtons: (Swallow "xload" `Exec xload -bg BG &`)
هر نویسه منفرد را میتوان با یک بکاسلش پیشین '\' گریز داد (نقلقول کرد).
نسخههای پیشین FvwmButtons (از fvwm 2.0.46 تا 2.3.6) روش متفاوتی برای مدیریت پنلها داشتند. شما نمیتوانید از پیکربندی قدیمی پنل خود با قابلیت جدید پنل استفاده کنید. برای اطلاعات بیشتر بخش «تبدیل پیکربندیهای قدیمی پنل (CONVERTING OLD PANEL CONFIGURATIONS)» را بخوانید.
نحوه ایجاد پنلهای جدید (HOW TO CREATE NEW PANELS)
هر برنامهای که بتواند از درون fvwm اجرا شود و پنجره داشته باشد، میتواند به عنوان پنل استفاده شود. پنجره یک ترمینال میتواند پنل شما باشد، یا برنامهای مانند xload یا xosview یا یک ماژول دیگر fvwm، از جمله خود FvwmButtons. تمام چیزی که باید بدانید این است که چگونه برنامه خود را از fvwm اجرا کنید.
دکمهای که پنل را فراخوانی میکند، به سادگی هر دکمه دیگری پیکربندی میشود. در اصل شما به چیزی بیشتر از گزینه Panel نیاز ندارید:
*FvwmButtons: (Panel my_first_panel \ "Module FvwmButtons -g -30000-30000 my_first_panel") *FvwmButtons: (Panel my_second_panel \ "Exec exec xterm -g -30000-30000 -n my_second_panel")
این عملکرد مشابه گزینه Swallow است. تفاوت در این است که برنامه هنگام بالا آمدن درون دکمه قرار نمیگیرد، بلکه از دید پنهان میشود. هنگامی که دکمه مربوط به پنل را فشار میدهید، پنجره به شکل لغزشی نمایان میشود. گزینه '-g -30000-30000' به برنامه میگوید که باید در جایی بسیار دور در بالا و سمت چپ صفحه قابل مشاهده شما ایجاد شود. در غیر این صورت، هنگام راهاندازی FvwmButtons برای یک لحظه چشمکزدن آن را خواهید دید. برخی برنامهها با این نوع نحو به خوبی کار نمیکنند، بنابراین شاید مجبور باشید با چشمکزدن کوتاه پنجره کنار بیایید. اگر میخواهید از نمونه دیگری از FvwmButtons یک پنل بسازید میتوانید این کار را انجام دهید، اما باید به آن نامی متفاوت بدهید ('my_first_panel' در مثال بالا). اگر FvwmButtons را تحت همان نام اجرا کنید، پنلهای جدید به صورت بازگشتی ایجاد میشوند تا جایی که منابع سیستم شما تمام شده و FvwmButtons کرش کند! برای پیکربندی یک نوار دکمه دوم با نامی متفاوت، کافی است در فایل پیکربندی خود '*new_name' را به جای '*FvwmButtons' قرار دهید. اگر با گزینه Swallow آشنایی ندارید یا میخواهید درباره نحوه کارکرد «بلعیدن» (swallowing) پنلها بیشتر بدانید، به توضیحات گزینه Swallow مراجعه کنید.
اکنون که پنل شما اساساً کار میکند، مایل خواهید بود که کمی آن را تنظیم کنید. شاید نخواهید عنوان پنجره روی پنل نمایش داده شود. برای غیرفعال کردن عنوان، از دستور Style در fvwm استفاده کنید. اگر نوار دکمه شما چسبان ('sticky') است، ممکن است بخواهید پنل را نیز چسبان کنید. و احتمالاً پنجره پنل در صورت تبدیل شدن به آیکون، نباید آیکونی داشته باشد.
Style name_of_panel_window NoTitle, Sitcky, NoIcon
ممکن است بخواهید پنل شما تنها تا زمانی باز بماند که چیزی را در آن انتخاب کنید. میتوانید در دستور، گزینه -transientpanel را بعد از گزینه -g به FvwmButtons بدهید. ماژول FvwmPager نیز گزینه مشابهی به نام '-transient' دارد.
در نهایت، اکنون میتوانید یک آیکون، یک عنوان یا یک فلش کوچک را در دکمه قرار دهید تا بتوانید کاربرد آن را تشخیص دهید. یک عنوان یا آیکون میتواند طبق معمول مشخص شود. برای فعال کردن فلش، فقط کافی است پس از کلمه کلیدی 'Panel' در مثال بالا عبارت '(indicator)' و سپس گزینه Padding را اضافه کنید تا چند پیکسل بین فلش و حاشیه دکمه فاصله بماند. جهت اختیاری برای باز شدن پنل را نیز میتوان تعیین کرد:
*FvwmButtons: (Padding 2, Panel(down, indicator) my_first_panel \ "Module FvwmButtons -g -30000-30000 -transientpanel my_first_panel")
گزینههای متعدد دیگری برای پیکربندی نحوه کار پنل شما وجود دارد، به عنوان مثال سرعت و روانی پویانمایی لغزشی. لطفاً برای جزئیات بیشتر به توضیحات گزینه Panel مراجعه کنید.
تبدیل پیکربندیهای قدیمی پنل (CONVERTING OLD PANEL CONFIGURATIONS)
این بخش نحوه تبدیل یک نحو نسبتاً قدیمی استفاده شده در نسخههای 2.2.x را توضیح میدهد. اگر نحو پیکربندی شما جدیدتر است، میتوانید از آن صرفنظر کنید.
با قابلیت قدیمی پنل، شما ابتدا یک یا چند خط برای تعریف پنلها در پیکربندی اصلی FvwmButtons خود داشتید:
... *FvwmButtons(Title WinOps,Panel WinOps) *FvwmButtons(Title Tools ,Panel Tools) ...
پس از آخرین خط پیکربندی برای پنل اصلی، پیکربندی نخستین پنل با خطی که با *FvwmButtonsPanel شروع میشد ارائه میگردید:
*FvwmButtonsPanel WinOps *FvwmButtonsBack bisque2 ... *FvwmButtonsPanel Tools *FvwmButtonsBack bisque2 ...
و احتمالاً دستورهای Style را برای پنلهای خود داشتید:
Style FvwmButtonsPanel Title, NoHandles, BorderWidth 0 Style FvwmButtonsPanel NoButton 2, NoButton 4, Sticky
پیکربندی جدید بسیار مشابه به نظر میرسد، اما اکنون پیکربندی پنل اصلی از پیکربندی زیرپنلها مستقل است. خطوط فراخوانیکننده پنلها از همان نحو گزینه Swallow استفاده میکنند، بنابراین شما فقط کافی است نام پنجرهای را که میخواهید به عنوان پنل استفاده شود و دستوری که باید اجرا شود را به جای نام پنل اضافه کنید. توجه داشته باشید که به نمونه جدید FvwmButtons یک نام متفاوت بدهید.
*FvwmButtons: (Title WinOps, Panel WinOps \ "Module FvwmButtons WinOps") *FvwmButtons: (Title Tools , Panel Tools \ "Module FvwmButtons Tools")
اگر از چیزی شبیه به 'Panel-d' استفاده میکردید، اکنون باید به جای آن از 'Panel(down)' استفاده کنید. برای اینکه پنل جدید به محض انتخاب شدن یک دکمه ناپدید شود، FvwmButtons را با گزینه '-transientpanel' اجرا کنید:
*FvwmButtons: (Title Tools , Panel(down) Tools \ "Module FvwmButtons -transientpanel Tools")
تغییر دادن بقیه پیکربندی بسیار ساده است. خطوط '*FvwmButtonsPanel <name>' را حذف کنید و در عوض <name> را به تمام خطوط پیکربندی بعدی برای پنل اضافه کنید. از همان نام در دستورهای Style خود استفاده کنید:
*WinOps: Back bisque2 ... *Tools: Back bisque2 ... Style "WinOps" Title, NoHandles, BorderWidth 0 Style "WinOps" NoButton 2, NoButton 4, Sticky Style "Tools" Title, NoHandles, BorderWidth 0 Style "Tools" NoButton 2, NoButton 4, Sticky
همین و بس. پنلهای جدید بسیار انعطافپذیرتر هستند. لطفاً برای جزئیات به بخشهای دیگر این مستندات مراجعه کنید..SS "چرا قابلیت پانل بازنویسی شد؟ (WHY WAS THE PANEL FEATURE REWRITTEN?)"
چندین دلیل وجود دارد. مهمترین دلیل این است که کد برنامهای که پانلها را پیادهسازی میکرد بسیار مخل بود و مشکلات زیادی ایجاد میکرد. در همان حال، نوشتن قابلیتهای جدید برای FvwmButtons را در بهترین حالت دشوار میساخت. دلیل دوم این است که بیشتر کاربران بهسادگی قادر به راهاندازی آن نبودند - بیش از حد پیچیده بود. حتی خود من (نویسندهٔ کد جدید) مجبور شدم پیش از آنکه برای نخستین بار آن را به کار بیندازم، چندین ساعت وقت صرف کنم. دلیل سوم این است که پانلهای جدید انعطافپذیرتر و همهکارهتر هستند. هر برنامهای میتواند یک پانل در FvwmButtons باشد، نه فقط نمونههای دیگر خود FvwmButtons. بنابراین صمیمانه امیدوارم کسی از این تغییر ناخشنود نباشد. بله - شما باید پیکربندی خود را تغییر دهید، اما پیکربندی قابلیت جدید بسیار سادهتر است، بهویژه اگر از پیش بدانید گزینهٔ Swallow چگونه کار میکند.
الگوریتم چینش (ARRANGEMENT ALGORITHM)
FvwmButtons با بهکارگیری بازگشتیِ الگوریتم زیر روی هر ظرف (container)، از جمله خود جعبه دکمه (buttonbox)، تلاش میکند دکمههای خود را به بهترین شکل ممکن بچیند.
تنظیم اندازهٔ مناسب
جابهجایی و چیدمان دکمهها
ظرفها (Containers)
مثال توضیحی
1) +---+---+---+ 2) +---+---+---+ 3) +---+---+---+ | 1 | | | 1 | | | 1 | | +---+ + +---+ 2 + +---+ 2 + | | | | | | 3 | | + + + +---+---+ +---+---+---+ | | | | | | | | +-----------+ +---+-------+ +---+---+---+ 4) +---+---+---+ 5) +---+-------+ 6) +---+-------+ | 1 | | | 1 | | | 1 | | +---+ 2 + +---+ 2 | +---+ 2 | | 3 | | | 3 | | | 3 | | +---+---+---+ +---+---+---+ +---+-------+ | 4 | | | 4 | 5 | | | 4 | 5 | 6 | +---+---+---+ +---+---+---+ +---+---+---+
دکمهها چه اندازهای خواهند داشت؟
کنشهای پویا (DYNAMICAL ACTIONS)
یک نمونهٔ در حال اجرای FvwmButtons ممکن است دستوراتی را در زمان اجرا دریافت کند. این کار با استفاده از دستور fvwm زیر انجام میشود:
SendToModule FvwmButtons-Alias <action> <params>
کنشهای پشتیبانیشده:
ChangeButton button_id options
ExpandButtonVars button_id command
PressButton button_id [mouse_button]
Silent
مثال
*FvwmButtons: (Id note1, Title "13:30 - Dinner", Icon clock1.xpm) SendToModule FvwmButtons Silent \ ChangeButton note1 Icon clock2.xpm, Title "18:00 - Go Home"
موارد زیر بخشهایی از یک فایل .fvwm2rc هستند که دستورهای مقداردهی اولیه FvwmButtons را شرح میدهند:
##########################################################
# Load any modules which should be started during fvwm
# initialization
# Make sure FvwmButtons is always there.
AddToFunc StartFunction "I" Module FvwmButtons
# Make it titlebar-less, sticky, and give it an icon
Style "FvwmButtons" Icon toolbox.xpm, NoTitle, Sticky
# Make the menu/panel look like CDE
Style "WinOps" Title, NoHandles, BorderWidth 0
Style "WinOps" NoButton 2, NoButton 4, Sticky
Style "Tools" Title, NoHandles, BorderWidth 0
Style "Tools" NoButton 2, NoButton 4, Sticky
##########################################################
DestroyModuleConfig FvwmButtons: *
*FvwmButtons: Fore Black
*FvwmButtons: Back rgb:90/80/90
*FvwmButtons: Geometry -135-5
*FvwmButtons: Rows 1
*FvwmButtons: BoxSize smart
*FvwmButtons: Font -*-helvetica-medium-r-*-*-12-*
*FvwmButtons: Padding 2 2
*FvwmButtons: (Title WinOps, Panel WinOps \
"Module FvwmButtons -transientpanel WinOps")
*FvwmButtons: (Title Tools, Panel Tools \
"Module FvwmButtons -transientpanel Tools")
*FvwmButtons: (Title Resize, Icon resize.xpm, Action Resize)
*FvwmButtons: (Title Move, Icon arrows2.xpm, Action Move )
*FvwmButtons: (Title Lower, Icon Down, Action Lower )
*FvwmButtons: (Title Raise, Icon Up, Action Raise )
*FvwmButtons: (Title Kill, Icon bomb.xpm, Action Destroy)
*FvwmButtons: (1x1,Container(Rows 3,Frame 1))
*FvwmButtons: (Title Dopey ,Action \
`Exec "big_win" xterm -T big_win -geometry 80x50 &`)
*FvwmButtons: (Title Snoopy, Font fixed, Action \
`Exec "small_win" xterm -T small_win &`)
*FvwmButtons: (Title Smokin')
*FvwmButtons: (End)
*FvwmButtons: (Title Xcalc, Icon rcalc.xpm, \
Action `Exec "Calculator" xcalc &`)
*FvwmButtons: (Title XMag, Icon magnifying_glass2.xpm, \
Action `Exec "xmag" xmag &`)
*FvwmButtons: (Title Mail, Icon mail2.xpm, \
Action `Exec "xmh" xmh &`)
*FvwmButtons: (4x1, Swallow "FvwmPager" `FvwmPager 0 3` \
Frame 3)
*FvwmButtons: (Swallow(UseOld,NoKill) "xload15" `Exec xload \
-title xload15 -nolabel -bg rgb:90/80/90 -update 15 \
-geometry -3000-3000 &`)
خطوط پایانی کمی ترفندآمیزند - یکی از آنها ماژول FvwmPager را اجرا کرده و آن را برای نمایش درون یک دکمه با پهنای چهار برابر میبلعد (swallow میکند). در صورت استفاده، Pager تا جای ممکن درون برجستگی دکمه (relief) بزرگ خواهد بود.
خط پایانی حتی جادوییتر است. به ترکیب UseOld و NoKill دقت کنید؛ این ترکیب تلاش میکند هنگام راهاندازی، پنجرهٔ موجود با نام "xload15" را ببلعد (در صورت شکست: پنجرهای با دستور مشخصشده راهاندازی میکند)، که هنگام پایان کار FvwmButtons از حالت بلعیده خارج (رها) میشود. برنامهٔ بلعیدهشده با "-geometry -3000-3000" راهاندازی میشود تا پیش از بلعیدهشدن قابل مشاهده نباشد.
سایر پنلها پس از پنل ریشه (root panel) مشخص شدهاند:
########## PANEL WinOps DestroyModuleConfig WinOps: * *WinOps: Back bisque2 *WinOps: Geometry -3-3 *WinOps: Columns 1 *WinOps: (Title Resize, Icon resize.xpm, Action Resize) *WinOps: (Title Move, Icon arrows2.xpm, Action Move ) *WinOps: (Title Lower, Icon Down, Action Lower ) *WinOps: (Title Raise, Icon Up, Action Raise ) ########## PANEL Tools DestroyModuleConfig Tools: * *Tools: Back bisque2 *Tools: Geometry -1-1 *Tools: Columns 1 *Tools: (Title Kill, Icon bomb.xpm, Action Destroy)
تعیین رنگ با ساختار rgb:90/80/90 در واقع صحیحترین شیوه برای مشخصکردن رنگهای مستقل در X است و باید به جای ساختار قدیمیتر #908090 استفاده شود. اگر ساختار دوم در فایل پیکربندی شما استفاده شود، باید مطمئن شوید که علامت هش (#) را در هر یک از commandهایی که اجرا خواهند شد گریز (escape) دهید، در غیر این صورت fvwm باقیماندهٔ خط را به عنوان کامنت تلقی خواهد کرد.
توجه داشته باشید که با مشخصات هندسی x/y میتوانید به راحتی پنجرههای دکمهای دارای شکاف (فاصله) بسازید. در اینجا مثالی دیگر آمده است. بدون مشخصات geometry برای دکمهها نمیتوانید به چنین چیزی دست یابید:
########################################################## # Another example ########################################################## # Make it titlebar-less, sticky, and give it an icon Style "FvwmButtons" Icon toolbox.xpm, NoTitle, Sticky DestroyModuleConfig FvwmButtons: * *FvwmButtons: Font 5x7 *FvwmButtons: Back rgb:90/80/90 *FvwmButtons: Fore black *FvwmButtons: Frame 1 # 9x11 pixels per button, 4x4 pixels for the frame *FvwmButtons: Geometry 580x59+0-0 *FvwmButtons: Rows 5 *FvwmButtons: Columns 64 *FvwmButtons: BoxSize fixed *FvwmButtons: Padding 1 1 # Pop up a module menu directly above the button. *FvwmButtons: (9x1+3+0, Padding 0, Title "Modules", \ Action `Menu Modulepopup rectangle \ $widthx$height+$lleft+$top o+50 -100m`) # first row of buttons from left to right: *FvwmButtons: (3x2+0+1, Icon my_lock.xpm, Action `Exec xlock`) *FvwmButtons: (3x2+3+1, Icon my_recapture.xpm, Action Recapture) *FvwmButtons: (3x2+6+1, Icon my_resize.xpm, Action Resize) *FvwmButtons: (3x2+9+1, Icon my_move.xpm, Action Move) # second row of buttons from left to right: *FvwmButtons: (3x2+0+3, Icon my_exit.xpm, Action QuitSave) *FvwmButtons: (3x2+3+3, Icon my_restart.xpm, Action Restart) *FvwmButtons: (3x2+6+3, Icon my_kill.xpm, Action Destroy) *FvwmButtons: (3x2+9+3, Icon my_shell.xpm, Action 'Exec rxvt') # big items *FvwmButtons: (10x5, Swallow (NoKill, NoCLose) \ "FvwmPager" 'FvwmPager * * -geometry 40x40-1024-1024') *FvwmButtons: (6x5, Swallow "FvwmXclock" `Exec xclock \ -name FvwmXclock -geometry 40x40+0-3000 -padding 1 \ -analog -chime -bg rgb:90/80/90`) *FvwmButtons: (13x5, Swallow (NoClose) \ "FvwmIconMan" 'Module FvwmIconMan') *FvwmButtons: (20x5, Padding 0, Swallow "xosview" \ `Exec /usr/X11R6/bin/xosview -cpu -int -page -net \ -geometry 100x50+0-3000 -font 5x7`)
بخش action در گزینهٔ Swallow در صورتی که شامل هرگونه نویسهٔ فضای خالی (whitespace) باشد، باید داخل علامت نقلقول قرار گیرد.
تاریخچه (HISTORY)
برنامهٔ FvwmButtons و ایدهٔ برقراری ارتباط این ماژول با Window Manager، همگی اثر اصلی Robert Nation هستند.
در ابتدا، FvwmGoodStuff پیشدرآمد FvwmButtons بود.
نویسندگان (AUTHORS)
Robert Nation (1993). تا حدی بهبودیافته توسط Jarl Totland (1996)، Jui-Hsuan Joshua Feng و Scott Smedley.
| 2026-06-28 |