| FVWM3STYLES(1) | FVWM3STYLES(1) |
نام (NAME)
fvwm3styles - سبکهای پنجره در fvwm
کنترل سبکهای پنجره (CONTROLLING WINDOW STYLES)
برای خوانایی بیشتر، دستورات این بخش بر اساس الفبا مرتب نشدهاند. توضیحات دستور Style در پایان این بخش قرار دارد.
دستورات: FocusStyle، Style و WindowStyle میتوانند مولفههای شرطی اختیاری را برای مطابقت با برخی از ویژگیهای یک پنجره بپذیرند.
برای مثال:
Style (Name mc) Sticky
پنجرهای را که نام آن با 'mc' مطابقت داشته باشد، چسبان (Sticky) میکند.
Style (Name mc, Class XTerm) StartIconic
این مثال پنجرهای از xterm(1) را باز میکند که WM_CLASS آن با 'XTerm' مطابقت داشته و نامش 'mc' باشد.
فهرستی معتبر از ویژگیها برای بررسی مطابقت عبارتند از:
تطبیق ویژگیهای مشخصشده برای هر خط Style با عملگر AND منطقی ترکیب میشوند، و برای اعمال سبکها، تمام ویژگیها باید مطابقت داشته باشند.
نکته: برای حذف یک خط سبک با ویژگیهای پنجره، باید از DestroyStyle استفاده شود. برای مثال:
DestroyStyle (Name mc, Class XTerm)
هنگام حذف یک سبک، نیازی به مشخص کردن آرگومانهای سبک نیست، فقط مولفههای ویژگی لازم هستند.
خطوط موجود Style در قالب:
Style Application* Sticky, StartIconic
همچنان پشتیبانی میشوند و رفتار آنها بدون تغییر باقی میماند.
FocusStyle stylename options
FocusStyle * EnterToFocus, !LeaveToUnfocus
معادل است با
Style * FPEnterToFocus, !FPLeaveToUnfocus
DestroyStyle style
حذف سبک «*» امکانپذیر است، اما اصلاً توصیه نمیشود. برای مثال:
DestroyStyle Application*
این کار تمام تنظیمات سبک با نام «Application*» را حذف میکند، نه تمام سبکهایی را که با «Application» شروع میشوند.
DestroyWindowStyle
UpdateStyles
Style stylename options ...
پارامتر stylename میتواند نام پنجره، کلاس، نام مرئی، یا رشته منبع (resource) آن باشد. این پارامتر میتواند شامل نویسههای عام '*' و '?' باشد که به شیوه معمول نام فایلهای یونیکس تطبیق داده میشوند. گزینههای چندگانه سبک در یک دستور واحد Style از چپ به راست خوانده میشوند، گویی در دستورات جداگانه پشت سر هم صادر شدهاند. یک سبک معین همیشه تمام سبکهای متناقضی را که قبلاً (یا در همان خط سبک سمت چپتر) صادر شدهاند، بازنویسی میکند.
نکته: پنجرههایی که نامی ندارند (WM_NAME) با نام «Untitled» مشخص میشوند، و پنجرههایی که کلاسی ندارند (WM_CLASS, res_class) کلاس «NoClass» و آنهایی که منبعی ندارند (WM_CLASS, res_name) منبع «NoResource» دریافت میکنند.
اگر پنجرهای منبع «fvwmstyle» را تنظیم کرده باشد، مقدار آن منبع علاوه بر هر نام پنجره، هنگام انتخاب سبک استفاده میشود.
پارامتر options فهرستی جداشده با کاما است که شامل یک یا چند کلیدواژه زیر میباشد. هر گروه از نامهای سبک با اسلش ('/') از هم جدا شدهاند. آخرین سبک در این گروهها، حالت پیشفرض است. BorderWidth, HandleWidth, CornerLength, !Icon / Icon, MiniIcon, IconBox, IconGrid, IconFill, IconSize, !Title / Title, TitleAtBottom / TitleAtLeft / TitleAtRight / TitleAtTop, LeftTitleRotatedCW / LeftTitleRotatedCCW, RightTitleRotatedCCW / RightTitleRotatedCW, TopTitleRotated / TopTitleNotRotated, BottomTitleRotated / BottomTitleNotRotated, !UseTitleDecorRotation / UseTitleDecorRotation, StippledTitle / !StippledTitle, StippledIconTitle / !StippledIconTitle, IndexedWindowName / ExactWindowName, IndexedIconName / ExactIconName, TitleFormat / IconTitleFormat / !Borders / Borders, !Handles / Handles, WindowListSkip / WindowListHit, CirculateSkip / CirculateHit, CirculateSkipShaded / CirculateHitShaded, CirculateSkipIcon / CirculateHitIcon, Layer, StaysOnTop / StaysOnBottom / StaysPut, Sticky / Slippery, StickyAcrossPages / !StickyAcrossPages, StickyAcrossDesks / !StickyAcrossDesks, !StickyStippledTitle / StickyStippledTitle, !StickyStippledIconTitle / StickyStippledIconTitle, StartIconic / StartNormal, Colorset, HilightColorset, BorderColorset, HilightBorderColorset, IconTitleColorset, HilightIconTitleColorset, IconBackgroundColorset, IconTitleRelief, IconBackgroundRelief, IconBackgroundPadding, Font, IconFont, StartsOnDesk / StartsOnPage / StartsAnyWhere, StartsOnScreen, StartShaded / !StartShaded, ManualPlacementHonorsStartsOnPage / ManualPlacementIgnoresStartsOnPage, CaptureHonorsStartsOnPage / CaptureIgnoresStartsOnPage, RecaptureHonorsStartsOnPage / RecaptureIgnoresStartsOnPage, StartsOnPageIncludesTransients / StartsOnPageIgnoresTransients, IconTitle / !IconTitle, MwmButtons / FvwmButtons, MwmBorder / FvwmBorder, MwmDecor / !MwmDecor, MwmFunctions / !MwmFunctions, HintOverride / !HintOverride, !Button / Button, ResizeHintOverride / !ResizeHintOverride, OLDecor / !OLDecor, StickyIcon / SlipperyIcon, StickyAcrossPagesIcon / !StickyAcrossPagesIcon, StickyAcrossDesksIcon / !StickyAcrossDesksIcon, ManualPlacement / CascadePlacement / MinOverlapPlacement / MinOverlapPercentPlacement / TileManualPlacement / TileCascadePlacement / PositionPlacement, MinOverlapPlacementPenalties, MinOverlapPercentPlacementPenalties, DecorateTransient / NakedTransient, DontRaiseTransient / RaiseTransient, DontLowerTransient / LowerTransient, DontStackTransientParent / StackTransientParent, SkipMapping / ShowMapping, ScatterWindowGroups / KeepWindowGroupsOnDesk, UseDecor, UseStyle, !UsePPosition / NoPPosition / UsePPosition, !UseUSPosition, NoUSPosition / UseUSPosition, !UseTransientPPosition, NoTransientPPosition / UseTransientPPosition, !UseTransientUSPosition / NoTransientUSPosition / UseTransientUSPosition, !UseIconPosition / NoIconPosition / UseIconPosition, Lenience / !Lenience, ClickToFocus / SloppyFocus / MouseFocus|FocusFollowsMouse / NeverFocus, ClickToFocusPassesClickOff / ClickToFocusPassesClick, ClickToFocusRaisesOff / ClickToFocusRaises, MouseFocusClickRaises / MouseFocusClickRaisesOff, GrabFocus / GrabFocusOff, GrabFocusTransientOff / GrabFocusTransient, FPFocusClickButtons, FPFocusClickModifiers, !FPSortWindowlistByFocus / FPSortWindowlistByFocus, FPClickRaisesFocused / !FPClickRaisesFocused, FPClickDecorRaisesFocused / !FPClickDecorRaisesFocused, FPClickIconRaisesFocused / !FPClickIconRaisesFocused, !FPClickRaisesUnfocused / FPClickRaisesUnfocused, FPClickDecorRaisesUnfocused / !FPClickDecorRaisesUnfocused, FPClickIconRaisesUnfocused / !FPClickIconRaisesUnfocused, FPClickToFocus / !FPClickToFocus, FPClickDecorToFocus / !FPClickDecorToFocus, FPClickIconToFocus / !FPClickIconToFocus, !FPEnterToFocus / FPEnterToFocus, !FPLeaveToUnfocus / FPLeaveToUnfocus, !FPFocusByProgram / FPFocusByProgram, !FPFocusByFunction / FPFocusByFunction, FPFocusByFunctionWarpPointer / !FPFocusByFunctionWarpPointer, FPLenient / !FPLenient, !FPPassFocusClick / FPPassFocusClick, !FPPassRaiseClick / FPPassRaiseClick, FPIgnoreFocusClickMotion / !FPIgnoreFocusClickMotion, FPIgnoreRaiseClickMotion / !FPIgnoreRaiseClickMotion, !FPAllowFocusClickFunction / FPAllowFocusClickFunction, !FPAllowRaiseClickFunction / FPAllowRaiseClickFunction, FPGrabFocus / !FPGrabFocus, !FPGrabFocusTransient / FPGrabFocusTransient, FPOverrideGrabFocus / !FPOverrideGrabFocus, FPReleaseFocus / !FPReleaseFocus, !FPReleaseFocusTransient / FPReleaseFocusTransient, FPOverrideReleaseFocus / !FPOverrideReleaseFocus, StartsLowered / StartsRaised, IgnoreRestack / AllowRestack, FixedPosition / VariablePosition, FixedUSPosition / VariableUSPosition, FixedPPosition / VariablePPosition, FixedSize / VariableSize, FixedUSSize / VariableUSSize, FixedPSize / VariablePSize, !Closable / Closable, !Iconifiable / Iconifiable, !Maximizable / Maximizable, !AllowMaximizeFixedSize / AllowMaximizeFixedSize, IconOverride / NoIconOverride / NoActiveIconOverride, DepressableBorder / FirmBorder, MinWindowSize, MaxWindowSize, IconifyWindowGroups / IconifyWindowGroupsOff, ResizeOpaque / ResizeOutline, BackingStore / BackingStoreOff / BackingStoreWindowDefault, Opacity / ParentalRelativity, SaveUnder / SaveUnderOff, WindowShadeShrinks / WindowShadeScrolls, WindowShadeSteps, WindowShadeAlwaysLazy / WindowShadeBusy / WindowShadeLazy, EWMHDonateIcon / EWMHDontDonateIcon, EWMHDonateMiniIcon / EWMHDontDonateMiniIcon, EWMHMiniIconOverride / EWMHNoMiniIconOverride, EWMHUseStackingOrderHints / EWMHIgnoreStackingOrderHints, EWMHIgnoreStateHints / EWMHUseStateHints, EWMHIgnoreStrutHints / EWMHUseStrutHints, EWMHIgnoreWindowType / !EWMHIgnoreWindowType, EWMHMaximizeIgnoreWorkingArea / EWMHMaximizeUseWorkingArea / EWMHMaximizeUseDynamicWorkingArea, EWMHPlacementIgnoreWorkingArea / EWMHPlacementUseWorkingArea / EWMHPlacementUseDynamicWorkingArea, MoveByProgramMethod, Unmanaged, State, SnapGrid, SnapAttraction, EdgeMoveDelay, EdgeResizeDelay. EdgeMoveResistance, InitialMapCommand
در فهرست بالا برخی گزینهها بهصورت style-option/opposite-style-option فهرست شدهاند. گزینه مخالف (opposite-style-option) برای ورودیهایی که آن را دارند، رفتار پیشفرض fvwm را توصیف میکند و اگر بخواهید رفتار پیشفرض fvwm را تغییر دهید، میتوانید از آن استفاده کنید.
سیاست تمرکز (Focus policy)
مدل تمرکز میتواند با چندین گزینه اضافی تقویت شود. در نسخه fvwm-2.5.3 و بالاتر، تعداد زیادی گزینه پیشرفته وجود دارد که با «FP» یا «!FP» شروع میشوند. این گزینهها روزی جایگزین گزینههای قدیمیتر خواهند شد و ابتدا شرح داده میشوند. استفاده از هر یک از این گزینههای جدید ممکن است سازگاری با نسخههای قدیمیتر را محدود کند. بهطور کلی، گزینههایی که با «FP» شروع میشوند قابلیتی را فعال کرده، در حالی که گزینههایی که با «!FP» شروع میشوند آن را غیرفعال میکنند.
تمرکز روی پنجره
با FPLeaveToUnfocus هنگامی که نشانگر پنجره را ترک میکند، پنجره تمرکز را از دست میدهد.
با FPClickToFocus، FPClickDecorToFocus یا FPClickIconToFocus، پنجره زمانی تمرکز دریافت میکند که روی داخل پنجره، تزیینات آن، یا آیکون آن کلیک شود.
سبک FPFocusByProgram به پنجرهها اجازه میدهد خودشان تمرکز را به دست گیرند.
سبک !FPFocusByFunction دریافت تمرکز توسط پنجره از طریق دستورات Focus و FlipFocus را ممنوع میکند.
سبک FPFocusByFunctionWarpPointer کنترل میکند که آیا هنگام استفاده از دستور Focus، نشانگر به پنجره انتخابشده منتقل (warp) شود یا خیر.
سبک FPLenient اجازه تمرکز روی پنجرههایی را میدهد که آن را نمیخواهند، مانند FvwmPager یا xclock.
سبک FPFocusClickButtons فهرستی از دکمههای ماوس را میگیرد که میتوان با کلیک روی آنها، در صورت استفاده از سبک مناسب، روی پنجره تمرکز کرد یا آن را بالا آورد. پیشفرض استفاده از سه دکمه اول است ("123").
سبک FPFocusClickModifiers درست مانند دستور Key فهرستی از کلیدهای تغییردهنده (modifier) را میگیرد. برای اینکه کلیک جهت تمرکز یا بالا آوردن پنجره کار کند، باید ترکیب دقیق کلیدهای تغییردهنده فشرده شود. پیشفرض استفاده نکردن از هیچ کلید تغییردهندهای است ("N").
با سبک FPPassFocusClick، کلیکی که برای تمرکز روی پنجره استفاده شده بود به برنامه منتقل میشود.
با سبک FPAllowFocusClickFunction، کلیکی که برای تمرکز روی پنجره استفاده شده بود همچنین میتواند یک کنش عادی را که با دستور Mouse به پنجره مقید شده بود، فعال کند.
اگر سبک FPIgnoreFocusClickMotion استفاده شود، کلیک در پنجره و سپس کشیدن نشانگر در حالی که دکمه پایین نگه داشته شده است، به عنوان کلیک برای تمرکز روی پنجره به حساب نمیآید. در عوض، برنامه این رویدادها را بهطور عادی پردازش میکند. این قابلیت برای انتخاب متن در پنجره ترمینال با ماوس بدون بالا آمدن پنجره مفید است. با این حال، تضمین نمیشود که پیوندهای ماوس روی پنجره کلاینت همچنان کار کنند (به دستور Mouse مراجعه کنید). این سبک کلیک اولیه را مجبور به ارسال به برنامه میکند. مسافتی که نشانگر باید برای فعالسازی این حالت حرکت کند توسط دستور MoveThreshold کنترل میشود.
سبکهای FPSortWindowlistByFocus و !FPSortWindowlistByFocus کنترل میکنند که آیا فهرست داخلی پنجرهها به ترتیبی که پنجرهها تمرکز یافتهاند مرتب شود یا به ترتیبی که ایجاد شدهاند. مورد دوم پیشفرض برای ClickToFocus و SloppyFocus است.
کلیک روی پنجره برای بالا آوردن (Raise)
سبکهای FPClickRaisesFocused، FPClickDecorRaisesFocused و FPClickIconRaisesFocused اجازه میدهند وقتی داخل پنجره، تزیینات یا آیکون آن در حالی که پنجره از قبل دارای تمرکز است کلیک شد، پنجره بالا آورده شود.
سبکهای FPClickRaisesUnfocused، FPClickDecorRaisesUnfocused و FPClickIconRaisesUnfocused اجازه میدهند وقتی داخل پنجره، تزیینات یا آیکون آن در حالی که پنجره هنوز تمرکز ندارد کلیک شد، پنجره بالا آورده شود.
با سبک FPPassRaiseClick، کلیکی که برای بالا آوردن پنجره استفاده شده بود به برنامه منتقل میشود.
با سبک FPAllowRaiseClickFunction، کلیکی که برای بالا آوردن پنجره استفاده شده بود همچنین میتواند یک کنش عادی را که با دستور Mouse به پنجره مقید شده بود، فعال کند.
اگر سبک FPIgnoreRaiseClickMotion استفاده شود، کلیک در پنجره و سپس کشیدن نشانگر در حالی که دکمه پایین نگه داشته شده است، به عنوان کلیک برای بالا آوردن پنجره به حساب نمیآید. در عوض، برنامه این رویدادها را بهطور عادی پردازش میکند. این قابلیت برای انتخاب متن در پنجره ترمینال با ماوس بدون بالا آمدن پنجره مفید است. با این حال، تضمین نمیشود که پیوندهای ماوس روی پنجره کلاینت همچنان کار کنند (به دستور Mouse مراجعه کنید). توجه داشته باشید این سبک کلیک اولیه را مجبور به ارسال به برنامه میکند. مسافتی که نشانگر باید برای فعالسازی این حالت حرکت کند توسط دستور MoveThreshold کنترل میشود.
دریافت تمرکز هنگام ایجاد یک پنجره جدید
پنجرههای جدید عادی یا گذرا (transient) با سبک FPGrabFocus یا FPGrabFocusTransient هنگام ایجاد به صورت خودکار تمرکز را دریافت میکنند. FPGrabFocus پیشفرض برای پنجرههای دارای سبک ClickToFocus است. توجه داشته باشید حتی در صورت غیرفعال بودن این سبکها، ممکن است برنامه خودش تمرکز را در دست بگیرد. fvwm نمیتواند از این امر جلوگیری کند.
سبک OverrideGrabFocus به fvwm دستور میدهد هرگز تمرکز را از چنین پنجرهای از طریق سبکهای GrabFocus یا GrabFocusTransient پس نگیرد. این میتواند در صورتی مفید باشد که بخواهید پنجرههای گذرا فوراً تمرکز را دریافت کنند، مثلاً در یک مرورگر وب، اما نه زمانی که در یک پنجره ترمینال یا واژهپرداز کار میکنید.
سه سبک بالا با FPReleaseFocus، FPReleaseFocusTransient و FPOverrideReleaseFocus همراه هستند. اینها کنترل میکنند که آیا هنگام بسته شدن پنجره، تمرکز به پنجره دیگری بازگردانده شود یا خیر. در غیر این صورت هیچ پنجرهای یا پنجره زیر نشانگر تمرکز را دریافت میکند.
گزینههای ClickToFocusPassesClickOff و ClickToFocusPassesClick کنترل میکنند که آیا کلیک ماوس برای تمرکز روی پنجره به برنامه ارسال شود یا خیر. به همین ترتیب، ClickToFocusRaisesOff/MouseFocusClickRaisesOff و ClickToFocusRaises/MouseFocusClickRaises کنترل میکنند که آیا پنجره بالا آورده شود (اما بسته به مدل تمرکز).
نکته: در نسخههای fvwm پیش از 2.5.3، گزینههای «.....Click» فقط برای پنجرههای دارای ClickToFocus اعمال میشدند در حالی که گزینههای «.....Mouse» برای پنجرههای با سیاست تمرکز متفاوت اعمال میشدند. این وضعیت دیگر برقرار نیست.
سبک قدیمی
GrabFocus معادل
استفاده از
FPGrabFocus
FPReleaseFocus است.
سبک قدیمی GrabFocusTransient معادل استفاده از FPGrabFocusTransient + FPReleaseFocusTransient است.
سبک Lenience معادل سبک جدید FPLenient است.
عنوان پنجره
پنجرههایی با سبک TitleAtBottom، TitleAtLeft یا TitleAtRight نوار عنوان را به جای بالای پنجره به صورت معمول، در پایین، سمت چپ یا سمت راست پنجره دارند. سبک TitleAtTop جایگیری پیشفرض را بازیابی میکند. حتی اگر پنجره سبک !Title را تنظیم کرده باشد، این امر بر دستور WindowShade تأثیر میگذارد. لطفاً برای بررسی تعاملات میان آن دستور و این سبکها به دستور WindowShade مراجعه کنید. عناوین در سمت چپ یا راست پنجرهها با سبکهای زیر تقویت میشوند:
به طور معمول، متن در عناوین سمت چپ پنجره ۹۰ درجه در خلاف جهت عقربههای ساعت از حالت عمودی عادی چرخانده میشود و برای عناوین سمت راست ۹۰ درجه در جهت عقربههای ساعت میچرخد. همچنین میتوان آن را با LeftTitleRotatedCW در صورت استفاده از TitleAtLeft، و با RightTitleRotatedCCW در صورت استفاده از TitleAtRight در جهتهای مخالف چرخاند. مقادیر پیشفرض را میتوان با LeftTitleRotatedCCW و RightTitleRotatedCW بازیابی کرد. یک متن افقی عادی نیز در صورت استفاده از TitleAtTop با TopTitleRotated، و در صورت استفاده از TitleAtBottom با BottomTitleRotated قابل چرخش است. مقادیر پیشفرض با TopTitleNotRotated و BottomTitleNotRotated بازگردانده میشوند.
بهطور پیشفرض، تزیینات نوار عنوان تعریفشده با دستور TitleStyle به دنبال چرخش متن عنوان میچرخند (پاراگراف قبلی را ببینید). این قابلیت را میتوان با استفاده از سبک !UseTitleDecorRotation غیرفعال کرد. UseTitleDecorRotation به حالت پیشفرض بازمیگردد.
با سبک StippledTitle، عناوین با همان جلوهای رسم میشوند که معمولاً برای پنجرههای دارای سبک Sticky، StickyAcrossPages یا StickyAcrossDesks رزرو شده است. !StippledTitle به عناوین عادی بازمیگردد. StippledTitleOff معادل !StippledTitle است اما منسوخ شده است.
گزینه Colorset شماره مجموعهرنگ (colorset) را به عنوان تنها آرگومان خود میگیرد و رنگهای تنظیمشده توسط Color را لغو میکند. در عوض، رنگهای متناظر از مجموعهرنگ دادهشده استفاده میشوند. توجه داشته باشید که سایر ویژگیهای مجموعهرنگ استفاده نمیشوند. برای آن منظور از سبک تزیینی Colorset در دستورات TitleStyle و ButtonStyle استفاده کنید. برای توقف استفاده از مجموعهرنگ، شماره مجموعهرنگ حذف میشود.
گزینه BorderColorset هشت عدد صحیح مثبت را به عنوان آرگومان میگیرد و مجموعهرنگهای دادهشده را روی هشت جزء مجزای حاشیه پنجره اعمال میکند.
جهت سازگاری با گذشته، اگر یک عدد صحیح ارائه شود، آن مقدار روی تمام اجزای حاشیه پنجره اعمال میگردد.
حاشیه به تعاریف زیر تقسیم میشود و همان ترتیبی است که مجموعهرنگها بر حاشیه اعمال خواهند شد.
BorderColorset North, North East, East, South East, South, South West, West, North West
گزینههای North، East، South و West به لبههای بالا، چپ، پایین و راست حاشیه پنجره اشاره دارند.
گزینههای NE، SE، SW و NW به دستگیرههای (handles) پنجره اشاره دارند.
نکته: با توجه به نحوه رندر دستگیرههای پنجره، هیچ راهی وجود ندارد که یک لبه کامل پنجره را همرنگ با مقدار تعریفشده توسط North، South، East یا West درآورد.
گزینه سبک HilightBorderColorset مشابه BorderColorset کار میکند اما زمانی استفاده میشود که پنجره تمرکز دارد.
سبک !IconTitle نمایش برچسبهای آیکون را غیرفعال میکند در حالی که سبک مخالف IconTitle برچسبهای آیکون را فعال میسازد (رفتار پیشفرض). NoIconTitle معادل !IconTitle است اما منسوخ شده است.
گزینه IconTitleColorset شماره مجموعهرنگ را به عنوان تنها آرگومان خود میگیرد و رنگهای تنظیمشده توسط Color یا Colorset را لغو میکند. برای توقف استفاده از این مجموعهرنگ، آرگومان حذف میشود.
گزینه HilightIconTitleColorset شماره مجموعهرنگ را به عنوان تنها آرگومان خود میگیرد و رنگهای تنظیمشده توسط HilightColorset را لغو میکند. برای توقف استفاده از این مجموعهرنگ، آرگومان حذف میشود.
گزینه IconBackgroundColorset شماره مجموعهرنگ را به عنوان تنها آرگومان خود میگیرد و از آن برای تنظیم پسزمینه تصویر آیکون استفاده میکند. بهطور پیشفرض تصویر آیکون روی تصویر پسزمینه رسم نمیشود. برای بازگرداندن حالت پیشفرض، آرگومان حذف میشود.
گزینه IconTitleRelief یک آرگومان عددی بین -50 تا +50 پیکسل میگیرد و ضخامت برجستگی سهبعدی رسمشده در اطراف عنوان آیکون را تعیین میکند. با مقادیر منفی، عنوان آیکون ظاهری فرورفته پیدا میکند. مقدار پیشفرض 2 است و با حذف آرگومان بازگردانده میشود.
گزینه IconBackgroundRelief یک آرگومان عددی بین -50 تا +50 پیکسل میگیرد و ضخامت برجستگی سهبعدی رسمشده در اطراف پسزمینه تصویر آیکون (در صورت وجود) را تعیین میکند. با مقادیر منفی، پسزمینه آیکون ظاهری فرورفته پیدا میکند. مقدار پیشفرض 2 است و در صورت حذف آرگومان بازگردانده میشود.
گزینه IconBackgroundPadding یک آرگومان عددی بین 0 تا 50 پیکسل میگیرد و میزان فضای خالی بین برجستگی تصویر پسزمینه آیکون (در صورت وجود) و تصویر آیکون را تعیین میکند. مقدار پیشفرض 2 است و در صورت حذف آرگومان بازگردانده میشود.
گزینههای Font و IconFont نام یک قلم (فونت) را به عنوان تنها آرگومان خود میگیرند. این قلم در عنوان پنجره یا آیکون استفاده میشود. بهطور پیشفرض قلم دادهشده در دستور DefaultFont استفاده میشود. برای بازگشت به حالت پیشفرض، از این سبک بدون آرگومان نام استفاده کنید.
سبک منسوخشده IndexedWindowName باعث میشود fvwm از عناوین پنجره در قالب
name (i)
استفاده کند که در آن name نام دقیق پنجره و i یک عدد صحیح است که نمایانگر i امین پنجره با name به عنوان نام پنجره است. این سبک با مورد زیر جایگزین شده است:
TitleFormat %n (%t)
سبک ExactWindowName حالت پیشفرض را که استفاده از نام دقیق پنجره است بازمیگرداند. این سبک به نفع مورد زیر منسوخ شده است:
TitleFormat %n
سبکهای IndexedIconName و ExactIconName همانند سبکهای IndexedWindowName و ExactWindowName اما برای عناوین آیکون عمل میکنند. هر دو به نفع موارد زیر منسوخ شدهاند:
IconTitleFormat %n (%t) IconTitleFormat %n
دستور TitleFormat توصیف میکند که نام مرئی یک پنجره چگونه باید باشد، که متغیرهای جانگهدار (placeholder) زیر برای آن معتبر هستند:
%n
%i
%c
%r
%t
%I
%%
میتوان از هر مقدار فضای خالی به همراه کاراکترهای دیگر برای ساختن رشته استفاده کرد — اما یک رشته TitleFormat معتبر باید حداقل شامل یکی از متغیرهای جایگزین ذکر شده باشد. هیچگونه حذف نقلقولی روی رشته انجام نمیشود، بنابراین برای مثال عبارت زیر دقیقاً به همان صورت چاپ میشود:
TitleFormat " %n " -> [%t] -> [%c]
نکته: کاملاً امکانپذیر است که از یک TitleFormat استفاده کنید که منجر به پاک شدن کامل عنوان قابل مشاهده شود. به عنوان مثال:
TitleFormat %z
صرفاً به این دلیل که متغیر جایگزین '%z' پشتیبانی نمیشود. این یک باگ نیست بلکه جنبهای از نحوه عملکرد تجزیهکننده قالببندی است.
IconTitleFormat توصیف میکند که نام آیکون قابل مشاهده یک پنجره چگونه باید باشد، که گزینههای آن همانند TitleFormat است.
دکمههای عنوان (Title buttons)
گزینه MwmButtons باعث میشود دکمه Maximize هنگام بیشینه بودن پنجره، فرورفته به نظر برسد. برای اطلاعات بیشتر، پرچم MwmDecorMax را در ButtonStyle ببینید. برای خاموش کردن مجدد این سبک، از سبک FvwmButtons استفاده کنید.
کادرها (Borders)
گزینه MwmBorder باعث میشود برجستگی سهبعدی بیشتر با سبک Mwm همخوانی داشته باشد. گزینه FvwmBorder گزینه قبلی را خاموش میکند.
با سبک !Handles، پنجره دستگیرههای گوشههای پنجره را که معمولاً برای تغییر اندازه آن استفاده میشوند دریافت نمیکند. با !Handles، پهنای مشخصشده از سبک BorderWidth استفاده میشود. بهطور پیشفرض، یا در صورتی که Handles مشخص شده باشد، پهنای حاصل از سبک HandleWidth استفاده میشود. NoHandles معادل !Handles است اما منسوخ شده است.
گزینه HandleWidth یک آرگومان عددی میگیرد که پهنای حاشیه پنجره را در صورتی که دستگیرههای تغییر اندازه داشته باشد تعیین میکند. استفاده از HandleWidth بدون آرگومان، مقدار پیشفرض را بازمیگرداند.
گزینه CornerLength یک آرگومان عددی دریافت میکند که طول دستگیرههای گوشه را بر حسب پیکسل مشخص میکند. مقدار پیشفرض ارتفاع نوار عنوان است. استفاده از CornerLength بدون آرگومان، مقدار پیشفرض را بازمیگرداند.
گزینه BorderWidth یک آرگومان عددی میگیرد که پهنای حاشیه پنجره را در صورتی که فاقد دستگیرههای تغییر اندازه باشد تعیین میکند. این گزینه تنها در صورتی استفاده میشود که سبک !Handles نیز مشخص شده باشد. استفاده از BorderWidth بدون آرگومان، مقدار پیشفرض را بازمیگرداند.
گزینه DepressableBorder باعث میشود هنگام فشردن کلید ماوس بر روی بخشهای کادر تزئینات پنجره، آنها فرورفته به نظر برسند. این قابلیت را میتوان مجدداً با سبک FirmBorder غیرفعال کرد.
آیکونها، جمعکردن، بیشینهسازی، جابهجایی، تغییر اندازه
یک استثنا برای این قوانین وجود دارد، به این ترتیب که:
Style * Icon unknown.xpm
آیکون unknown.xpm را به تمام پنجرهها تحمیل نمیکند، بلکه صرفاً آیکون پیشفرض را مانند دستور DefaultIcon تنظیم میکند. اگر واقعاً میخواهید تمام پنجرهها دارای آیکون یکسانی باشند، میتوانید از عبارت زیر استفاده کنید:
Style ** Icon unknown.xpm
اگر ویژگی NoIcon تنظیم شده باشد، پنجره مشخصشده هنگام تبدیل به آیکون صرفاً ناپدید میشود. پنجره را میتوان از طریق لیست پنجرهها بازیابی کرد. اگر Icon بدون آرگومان تنظیم شود، ویژگی NoIcon پاک میشود اما هیچ آیکونی تعیین نمیگردد. مثالی که تنها اجازه میدهد آیکون ماژول FvwmPager وجود داشته باشد:
Style * NoIcon Style FvwmPager Icon
گزینه IconBox میتواند بدون آرگومان، با چهار آرگومان عددی (بهعلاوه یک مشخصه صفحه نمایش اختیاری)، یک رشته هندسه X11 یا رشته "none" مقداردهی شود:
IconBox [screen scr-spec] l t r b
یا
IconBox geometry
که در آن l مختصات چپ، t بالا، r راست و b پایین است. مختصات منفی نشاندهنده فاصله از سمت راست یا پایین صفحه نمایش هستند. اگر آرگومان اول کلمه screen باشد، آرگومان scr-spec صفحه RandR را که جعبه آیکون بر روی آن تعریف شده است مشخص میکند، یا علامت اختیاری 'w' برای صفحهای که مرکز پنجره در آن قرار دارد. این قابلیت تنها در حالت چند مانیتوره مفید است. تعیین مختصات به صورت "l t r b" انعطافپذیرتر از یک رشته هندسه X11 است. به عنوان مثال:
IconBox -80 240 -1 -1
جعبهای به پهنای ۸۰ پیکسل از لبه راست، ۲۴۰ پیکسل پایینتر از بالا، و ادامهدار تا پایین صفحه نمایش تعریف میکند.
شاید استفاده از یک رشته هندسه X11 آسانتر باشد:
IconBox 1000x70-1-1
یک جعبه آیکون به ابعاد ۱۰۰۰ در ۷۰ پیکسل را در پایین صفحه و از گوشه پایینی سمت راست صفحه قرار میدهد. یکی از راههای یافتن چنین هندسهای، استفاده از پنجرهای است که بر حسب پیکسل تغییر اندازه میدهد، مانند xv. سپس پنجره xv را تغییر اندازه داده و در جایی که میخواهید جعبه آیکون باشد قرار دهید. سپس از FvwmIdent برای خواندن هندسه پنجره استفاده کنید. جعبه آیکون ناحیهای از صفحه نمایش است که fvwm سعی میکند آیکونهای پنجرههای منطبق را در آن قرار دهد، تا زمانی که با آیکونهای دیگر همپوشانی نداشته باشند. چند جعبه آیکون را میتوان به عنوان نواحی سرریز تعریف کرد. وقتی اولین جعبه آیکون پر شد، دومی پر میشود. تمام جعبههای آیکون برای یک سبک باید در یک دستور Style تعریف شوند. به عنوان مثال:
Style * IconBox -80 240 -1 -1, \ IconBox 1000x70-1-1
یک دستور Style با گزینه IconBox جایگزین هر جعبه آیکونی میشود که پیشتر توسط دستور Style دیگری برای همان سبک تعریف شده بود. به همین دلیل استفاده از بکاسلش در مثال قبلی الزامی است.
نکته: در صورت استفاده از RandR، هندسه برای دستور جعبه آیکون مشخصه اضافی "@w" را برای صفحه نمایش میپذیرد. این مشخصه صفحهای را تعیین میکند که مرکز پنجره در آن قرار دارد. مشخصه صفحه نمایش اضافی در هیچ جای دیگر مجاز نیست.
اگر هرگز جعبه آیکونی تعریف نکنید، یا تمام جعبههای آیکون را پر کنید، fvwm یک جعبه آیکون پیشفرض دارد که کل صفحه را پوشش میدهد؛ این جعبه از بالا به پایین و سپس از چپ به راست پر میشود و دارای یک شبکه ۸۰ در ۸۰ پیکسلی است. برای غیرفعال کردن همه به جز جعبه آیکون پیشفرض، میتوانید از IconBox بدون آرگومان در یک دستور Style جداگانه استفاده کنید. برای غیرفعال کردن تمام جعبههای آیکون از جمله جعبه آیکون پیشفرض، میتوان آرگومان "none" را مشخص کرد.
راهنمایی: میتوانید آیکونهای خود را با یک تابع ساده fvwm در جعبه آیکون بهطور خودکار مرتب کنید. تابع "DeiconifyAndRearrange" زیر را در فایل پیکربندی خود قرار دهید:
AddToFunc DeiconifyAndRearrange + C Iconify off + C All (CurrentPage, Iconic) PlaceAgain Icon
سپس تمام جاهایی را که دستور Iconify را برای بازگردانی آیکون از حالت کوچکشده فرامیخوانید، با فراخوانی تابع جدید جایگزین کنید. به عنوان مثال عبارت زیر:
AddToFunc IconFunc + C Iconify off + M Raise + M Move + D Iconify off Mouse 1 I A Iconify off
را با کد زیر جایگزین کنید:
AddToFunc IconFunc + C DeiconifyAndRearrange + M Raise + M Move + D DeiconifyAndRearrange Mouse 1 I A DeiconifyAndRearrange
گزینه IconGrid دو آرگومان عددی بزرگتر از صفر میگیرد.
IconGrid x y
آیکونها با حرکت گامبهگام در جعبه آیکون با استفاده از مقادیر x و y شبکه آیکون و جستجو برای فضای خالی در جعبه قرار میگیرند. شبکه پیشفرض ۳ در ۳ پیکسل است که ظاهری بسیار فشرده ایجاد میکند. برای داشتن ظاهری منظمتر، از شبکهای بزرگتر از بزرگترین آیکون خود استفاده کنید. از آرگومان IconSize برای برش یا کشیدن آیکون تا حداکثر اندازه استفاده کنید. تعریف IconGrid باید پس از تعریف IconBox مربوط به آن بیاید:
Style * IconBox -80x240-1-1, IconGrid 90 90
گزینه IconFill دو آرگومان میگیرد.
IconFill Bottom Right
آیکونها با گام برداشتن در جعبه آیکون با استفاده از این آرگومانها برای کنترل جهت پر شدن جعبه، در آن جایگذاری میشوند. جهت پیشفرض از چپ به راست، و سپس از بالا به پایین است. این مورد به صورت زیر بیان میشود:
IconFill left top
برای پر کردن یک جعبه آیکون به صورت ستونی به جای سطری، ابتدا جهت عمودی (top یا bottom) را مشخص کنید. جهتها را میتوان به صورت کوتاه یا کامل نوشت: "t"، "top"، "b"، "bot"، "bottom"، "l"، "lft"، "left"، "r"، "rgt"، "right". تعریف IconFill باید پس از تعریف IconBox مربوطه بیاید:
Style * IconBox -80x240-1-1, IconFill b r
گزینه IconSize محدودیتهایی را برای اندازه تصویر آیکون تعیین میکند. هر دو تصویر آیکون ارائهشده توسط کاربر و برنامه تحت تأثیر قرار میگیرند.
IconSize [ width height [ maxwidth maxheight ] ]
تمام آرگومانها بر حسب پیکسل سنجیده میشوند. هنگامی که هر چهار آرگومان به IconSize داده میشوند، width و height حداقل اندازه یک آیکون را نشان میدهند، و maxwidth و maxheight حداکثر اندازه یک آیکون را مشخص میکنند. تصاویر آیکونی که کوچکتر از حداقل اندازه باشند فاصلهگذاری (padding) میشوند. تصاویری که بزرگتر از حداکثر اندازه باشند بریده میشوند.
اگر فقط دو آرگومان به IconSize ارسال شود، width و height اندازه مطلق یک آیکون را نشان میدهند. آیکونهای تحت پوشش این سبک برای رسیدن به اندازه مشخصشده فاصلهگذاری یا بریده میشوند.
اگر هیچ آرگومانی مشخص نشود، مقادیر پیشفرض برای هر بعد استفاده میشود. این عمل عملاً هیچ محدودیتی روی اندازه آیکون اعمال نمیکند.
میتوان از مقدار "-1" به جای هر یک از آرگومانها برای تعیین مقدار پیشفرض آن بعد استفاده کرد.
علاوه بر آرگومانهای عددی، ۱ آرگومان اضافی میتواند "Stretched"، "Adjusted" یا "Shrunk" باشد.
توجه داشته باشید که مدیریتکنندههای آیکون ارائهشده توسط ماژولها تحت تأثیر این سبک قرار نمیگیرند.
گزینه MiniIcon یک پیکسمپ را برای استفاده به عنوان آیکون مینیاتوری پنجره مشخص میکند. این آیکون مینیاتوری را میتوان در یک دکمه نوار عنوان ترسیم کرد (به ButtonStyle مراجعه کنید)، و توسط ماژولهای مختلف fvwm (FvwmIconMan و FvwmPager) قابل استفاده است. این گزینه نام یک پیکسمپ را به عنوان آرگومان میگیرد.
گزینههای WindowShadeShrinks و WindowShadeScrolls کنترل میکنند که آیا محتویات پنجرهای که با دستور WindowShade لوله (سایهدار) میشود پیمایش شود (پیشفرض) یا در جای خود ثابت بماند. حالت جمعشدن اندکی سریعتر است.
گزینه WindowShadeSteps تعداد مراحل پویانمایی را هنگام سایهدار کردن پنجره با WindowShade انتخاب میکند. این گزینه یک عدد را به عنوان آرگومان دریافت میکند. اگر عدد دارای پسوند 'p' باشد، تعداد پیکسلها را به عنوان اندازه گام به جای تعداد ثابت گامها تنظیم میکند. مقدار 0 پویانمایی را غیرفعال میکند. این حالت در صورت حذف یا نامعتبر بودن آرگومان نیز رخ میدهد.
دستور WindowShade دارای دو حالت عملیاتی است: سایهزنی مشغول (busy) و تنبل (lazy). سایهزنی مشغول میتواند ۵۰٪ کندتر از سایهزنی تنبل باشد، اما دومی ممکن است در برخی شرایط عجیب به نظر برسد، به عنوان مثال اگر کادرها، دکمهها یا عنوان پنجره با یک پیکسمپ کاشیکاریشده پر شده باشند. همچنین، دستگیرههای پنجره در حالت تنبل رسم نمیشوند و برجستگی کادر ممکن است فقط کمی قبل از رسیدن پنجره به حالت جمعشده یا بلافاصله پس از خروج از آن رسم شود. بهطور پیشفرض، fvwm در صورت عدم وجود جلوههای بصری نامطلوب (بدون احتساب دستگیرههای پنجره) از حالت تنبل و در غیر این صورت از حالت مشغول استفاده میکند. از WindowShadeAlwaysLazy یا WindowShadeBusy برای اجبار به استفاده از حالت تنبل یا مشغول استفاده کنید. تنظیمات پیشفرض با WindowShadeLazy بازگردانده میشود.
سبک ResizeOpaque به fvwm دستور میدهد تا اندازه پنجرههای مربوطه را با محتویات قابل مشاهده تغییر دهد، به جای اینکه از یک طرح کلی (outline) استفاده کند. از آنجا که این کار باعث بازترسیم مکرر برنامه میشود، بسته به حجم گرافیکی که برنامه دوباره رسم میکند، میتواند کاملاً کند باشد و باعث سوسو زدن بیش از حد پنجره شود. سبک ResizeOutline (پیشفرض) سبک ResizeOpaque را خنثی میکند. بسیاری از برنامهها دوست ندارند اندازه پنجرههایشان به صورت مات (با محتوا) تغییر کند، مانند XEmacs، Netscape یا ترمینالهایی با پسزمینه پیکسمپ. اگر از نتیجه راضی نیستید، از سبک ResizeOpaque برای این پنجرهها استفاده نکنید. برای مستثنی کردن پنجرههای خاص از تغییر اندازه مات، میتوانید از این خطوط در فایل پیکربندی خود استفاده کنید:
Style * ResizeOpaque Style rxvt ResizeOutline Style emacs ResizeOutline
گزینه Sticky پنجره را چسبنده میکند، یعنی همیشه در هر صفحه و هر میزکاری قابل مشاهده است. سبک متضاد آن، Slippery، به حالت پیشفرض بازمیگردد.
گزینه StickyIcon پنجره را در صورت آیکون شدن چسبنده میکند. این پنجره در بالای میزکار فعال از حالت آیکون خارج میشود. گزینه SlipperyIcon به حالت پیشفرض برمیگردد.
گزینههای StickyAcrossPages و StickyAcrossPagesIcon مانند Sticky و StickyIcon عمل میکنند، اما پنجره را فقط در بین صفحات میچسبانند نه میزکارها، در حالی که StickyAcrossDesks و StickyAcrossDesksIcon برعکس عمل میکنند.
پنجرههایی که به عنوان Sticky یا StickyAcrossDesks یا StickyAcrossPages علامتگذاری شدهاند، دارای نقطهچینهایی (stipples) روی نوار عنوان خواهند بود. این حالت را میتوان با سبک !StickyStippledTitle خنثی کرد. سبک StickyStippledTitle نقطهچینها را در جایی که آن پنجره نیز به عنوان Sticky علامتگذاری شده باشد بازمیگرداند. توجه داشته باشید که این سبک پیشفرض برای پنجرههای Sticky است. آیکونهای چسبنده روی عنوان آیکون دارای نقطهچین خواهند بود. این را میتوان به همین ترتیب با سبک !StickyStippledIconTitle غیرفعال کرد.
پنجرههای دارای سبک StartIconic در ابتدا به صورت آیکون نمایش داده میشوند. توجه داشته باشید که برخی از برنامهها با خارج کردن خود از حالت آیکون با این رفتار مقابله میکنند. حالت پیشفرض آیکون نکردن پنجرهها است و میتوان آن را با سبک StartNormal تنظیم کرد.
گزینه StickyIcon پنجره را در صورت آیکون شدن چسبنده میکند. پنجره روی میزکار فعال از حالت آیکون خارج میشود. گزینه SlipperyIcon به حالت پیشفرض بازمیگردد.
گزینه StickyIconPage مانند StickyIcon عمل میکند، اما آیکون را فقط در میان صفحات میچسباند نه میزکارها، در حالی که StickyIconDesk برعکس عمل میکند.
گزینه StippledIconTitle مانند StippledTitle عمل میکند به این صورت که روی عنوان آیکونها نقطهچین رسم میکند اما آیکون را چسبنده نمیکند.
گزینه IgnoreRestack باعث میشود fvwm تلاشهای کلاینتها برای بالا بردن یا پایین آوردن پنجرههای خود را نادیده بگیرد. بهطور پیشفرض، سبک متضاد آن، AllowRestack، فعال است.
گزینههای FixedPosition و FixedUSPosition باعث میشوند fvwm تلاشهای کاربر برای جابهجایی پنجره را نادیده بگیرد. همچنان امکان جابهجایی پنجره با تغییر اندازه آن وجود دارد. برای اجازه دادن به کاربر جهت جابهجایی پنجرهها، از سبک VariablePosition یا VariableUSPosition استفاده کنید.
گزینههای FixedSize و FixedUSSize باعث میشوند fvwm تلاشهای کاربر برای تغییر اندازه پنجره را نادیده بگیرد. برای اجازه دادن به کاربر جهت تغییر اندازه پنجرهها، از سبک VariableSize یا VariableUSSize استفاده کنید.
گزینههای FixedPPosition و FixedPSize باعث میشوند fvwm تلاشهای برنامه برای جابهجایی یا تغییر اندازه پنجرههایش را نادیده بگیرد. برای مجاز کردن این نوع اقدامات، از سبک VariablePPosition یا VariablePSize استفاده کنید. این سبکها گاهی ممکن است بر جایگذاری اولیه و ابعاد پنجرههای جدید (بسته به برنامه) تأثیر بگذارند. اگر پنجرهها در مکانهای عجیبی ایجاد میشوند، سبکهای VariablePPosition یا !UsePPosition را امتحان کنید. سبک FixedPSize ممکن است ابعاد پنجره را برای برخی از برنامهها به هم بریزد. در این صورت از این سبک استفاده نکنید.
گزینه MoveByProgramMethod بر نحوه واکنش fvwm به درخواستهای برنامه برای جابهجایی پنجرههایش تأثیر میگذارد. بهطور پیشفرض، fvwm سعی میکند تشخیص دهد که از کدام روش استفاده کند، اما گاهی اوقات روش اشتباه را تشخیص میدهد. ممکن است با پنجرهای مواجه شوید که وقتی برنامه اندازه آن را تغییر میدهد چند پیکسل روی صفحه جابهجا میشود، با تزئینات فریم خارج از صفحه به لبه صفحه حرکت میکند، موقعیت خود را برای بار بعد که اجرا میشود به خاطر میآورد اما در موقعیتی با جابهجایی جزئی ظاهر میشود، یا تلاش میکند تمامصفحه شود. هر دو گزینه UseGravity و IgnoreGravity را روی آن پنجره (و فقط آن پنجره) امتحان کنید و ببینید آیا کمکی میکند یا خیر. بهطور پیشفرض، fvwm از روش AutoDetect استفاده میکند. هنگامی که روش تشخیص داده شد، هرگز دوباره تغییر نمیکند. تا زمانی که fvwm نتواند روش مناسب را تشخیص دهد، از IgnoreGravity استفاده میکند. برای اجبار fvwm به تلاش مجدد برای تشخیص، ابتدا از یکی از دو گزینه دیگر استفاده کنید و سپس دوباره AutoDetect را به کار ببرید.
نکته: این گزینه برای کاهش مشکلی در مشخصات ICCCM معرفی شد. ICCCM به وضوح بیان میکند که باید از گزینه UseGravity استفاده شود، اما از گذشته برنامهها این قانون را نادیده میگرفتند.
گزینه Closable امکان اجرای توابع Close، Delete و Destroy را بر روی پنجرهها فعال میکند. این ویژگی بهطور پیشفرض روشن است. حالت متضاد آن، !Closable، از بسته شدن پنجره جلوگیری میکند.
گزینه Iconifiable امکان اجرای تابع Iconify را بر روی پنجرهها فعال میکند. این ویژگی بهطور پیشفرض فعال است. حالت متضاد آن، !Iconifiable، مانع از آیکون شدن پنجره میشود.
گزینه Maximizable امکان اجرای تابع Maximize را بر روی پنجرهها فعال میکند. این ویژگی بهطور پیشفرض فعال است. حالت متضاد آن، !Maximizable، از بیشینهسازی پنجره جلوگیری میکند.
گزینه AllowMaximizeFixedSize امکان اجرای تابع Maximize را روی پنجرههایی که اندازه آنها قابل تغییر نیست فعال میکند، مگر اینکه بیشینهسازی با استفاده از سبک !Maximizable یا از طریق هینتهای WM غیرفعال شده باشد. این ویژگی بهطور پیشفرض روشن است. حالت متضاد آن، !AllowMaximizeFixedSize، از بیشینهسازی تمام پنجرههایی که تغییرپذیر نیستند جلوگیری میکند.
گزینه ResizeHintOverride به fvwm دستور میدهد تا حداقل و حداکثر اندازه ارائهشده توسط برنامه و همچنین اندازه گام تغییر اندازه (اندازه کاراکتر در بسیاری از برنامهها) را نادیده بگیرد. این گزینه میتواند برای برنامههای معیوبی که از تغییر اندازه خودداری میکنند مفید باشد. در صورت عدم نیاز از آن استفاده نکنید. سبک پیشفرض (متضاد) NoResizeOverride است.
عبارت MinWindowSize [ width [ p | c ] height [ p | c ] ] حداقل عرض و ارتفاع یک پنجره را به fvwm اعلام میکند. مقادیر درصدی از کل مساحت صفحه نمایش هستند. اگر حرف 'p' به هر یک از مقادیر اضافه شود، اعداد به عنوان پیکسل تفسیر میشوند. اگر حرف 'c' اضافه شود، اعداد بر اساس هینتهای اندازه پنجره کلاینت هستند که میتواند برای پنجرههایی مانند ترمینالها برای تعیین تعداد سطرها یا ستونها مفید باشد. این دستور برای رسیدگی به پنجرههایی که در صورت کوچک شدن بیش از حد دچار اختلال میشوند مفید است. اگر پارامترها را حذف کنید یا مقادیر آنها نامعتبر باشد، هر دو حد روی 0 پیکسل (که مقدار پیشفرض است) تنظیم میشوند.
عبارت MaxWindowSize [ width [ p | c ] height [ p | c ] ] حداکثر عرض و ارتفاع یک پنجره را به fvwm اعلام میکند. مقادیر درصدی از کل مساحت صفحه نمایش هستند. اگر حرف 'p' به هر یک از مقادیر اضافه شود، اعداد به عنوان پیکسل تفسیر میشوند. اگر حرف 'c' اضافه شود، اعداد بر اساس هینتهای اندازه پنجره کلاینت هستند که میتواند برای پنجرههایی مانند ترمینالها برای تعیین تعداد سطرها یا ستونها مفید باشد. این دستور برای اجبار پنجرههای بزرگ برنامهها به نمایش کامل مفید است. هیچیک از مقادیر height یا width نباید کمتر از ۱۰۰ پیکسل باشد. اگر پارامترها را حذف کنید یا مقادیر آنها نامعتبر باشد، هر دو حد روی ۳۲۷۶۷ پیکسل (که مقدار پیشفرض است) تنظیم میشوند.
با IconifyWindowGroups تمام پنجرههای موجود در یک گروه پنجره یکسان، هنگام آیکون یا باز شدن هر پنجره در گروه، بهطور همزمان آیکون یا باز میشوند. حالت پیشفرض IconifyWindowGroupsOff است که این رفتار را غیرفعال میکند. اگرچه تعدادی از برنامهها از هینت گروه پنجره استفاده میکنند، اما به ندرت به روش درست استفاده میشود، بنابراین احتمالاً بهتر است از IconifyWindowGroups فقط برای برنامههای منتخب استفاده کنید.
گزینه SnapAttraction بر جابهجایی تعاملی پنجره تأثیر میگذارد: اگر در حین جابهجایی تعاملی، پنجره یا آیکون در فاصله proximity پیکسلی پنجره یا آیکون دیگری قرار گیرد، برای چسبیدن کادرها جابهجا میشود. مقدار پیشفرض 0 به این معنی است که هیچ چسبندگی رخ نمیدهد. فراخوانی این دستور بدون آرگومان، کشش چسبندگی را خاموش کرده و رفتار پیشفرض را بازیابی میکند. لطفاً به گزینه SnapGrid نیز مراجعه کنید.
آرگومان دوم اختیاری است و میتواند روی یکی از پنج مقدار زیر تنظیم شود: با All هم آیکونها و هم پنجرهها به پنجرهها و آیکونهای دیگر میچسبند. SameType اجازه میدهد پنجرهها فقط به پنجرهها و آیکونها فقط به آیکونها بچسبند. با Windows پنجرهها فقط به سایر پنجرهها میچسبند. به همین ترتیب با Icons آیکونها فقط به سایر آیکونها میچسبند. با None هیچ چسبندگی رخ نمیدهد. این گزینه در ترکیب با آرگومان سوم در صورتی که فقط میخواهید به لبههای صفحه بچسبید میتواند مفید باشد. رفتار پیشفرض All است.
سومین و آخرین آرگومان اختیاری میتواند روی یکی از چهار مقدار زیر تنظیم شود:
گزینه SnapGrid یک شبکه نامرئی روی صفحه تعریف میکند. در حین جابهجایی تعاملی، یک پنجره یا آیکون طوری قرار میگیرد که مکان آن (گوشه بالا سمت چپ) با نزدیکترین نقطه شبکه منطبق شود. تنظیمات پیشفرض x-grid-size و y-grid-size هر دو ۱ هستند که عملاً هیچ شبکهای ایجاد نمیکنند.
یک جابهجایی تعاملی با هر دو گزینه SnapGrid و SnapAttraction منجر به این میشود که پنجره به مجاورت نزدیکترین حاشیه پنجره (اگر در محدوده مجاورت چسبندگی باشد) یا موقعیت شبکه منتقل شود. پنجره کوتاهترین فاصله ممکن را برای برآورده کردن هر دو ویژگی SnapGrid و SnapAttraction طی میکند. توجه داشته باشید که مختصات x و y به هم وابسته نیستند. به عنوان مثال، یک پنجره ممکن است روی محور x به پنجره دیگری بچسبد در حالی که روی محور y به یک نقطه شبکه میچسبد. استفاده از این سبک بدون آرگومان، تنظیمات پیشفرض را بازیابی میکند.
سبکهای EdgeMoveDelay و EdgeResizeDelay تعیین میکنند که تغییر درگاه دید میزکار با جابهجایی یا تغییر اندازه پنجره روی لبه صفحه چقدر دشوار است. این پارامتر مشخص میکند که نشانگر ماوس قبل از اینکه fvwm درگاه دید را جابهجا کند، چند میلیثانیه باید روی لبه صفحه باقی بماند. دستور EdgeScroll تعیین میکند که درگاه دید تا چه اندازه پیمایش شود. اگر -1 به عنوان تأخیر داده شود، ورق زدن صفحه کاملاً غیرفعال میشود. مقادیر پیشفرض بدون تأخیر برای جابهجایی (0) و بدون ورق زدن برای تغییر اندازه (-1) هستند. استفاده از این سبکها بدون هیچ آرگومانی تنظیمات پیشفرض را بازیابی میکند. توجه داشته باشید که با
EdgeScroll 0 0
همچنان میتوان پنجرهها را در امتداد لبه صفحه فعلی جابهجا کرد یا تغییر اندازه داد. همچنین EdgeThickness را ببینید.
گزینه EdgeMoveResistance قرار دادن پنجره را دقیقاً در مجاورت لبه صفحه RandR آسانتر میکند. این گزینه یک یا دو پارامتر دریافت میکند. پارامتر اول مشخص میکند که لبه یک پنجره قبل از اینکه واقعاً تا حدی به خارج از صفحه منتقل شود، چند پیکسل باید از لبه خارجی صفحه عبور کند. پارامتر دوم اختیاری همان کار پارامتر اول را انجام میدهد، اما برای لبههای داخلی (لبه مشترک بین دو مانیتور RandR). در صورت حذف، هیچ مقاومتی بین لبههای داخلی وجود ندارد. توجه داشته باشید که مرکز پنجره در حال جابهجایی تعیین میکند که پنجره در کدام صفحه باید نگه داشته شود. هر دو مقدار بهطور پیشفرض 0 (بدون مقاومت) هستند. برای بازیابی مقادیر پیشفرض، میتوان از گزینه EdgeMoveResistance بدون هیچ پارامتری استفاده کرد.
گزینه InitialMapCommand امکان اجرای هر دستور یا تابع معتبر fvwm را هنگام ترسیم اولیه پنجره توسط fvwm فراهم میکند. مثال:
Style MyWindow StartsOnPage 0 0, InitialMapCommand Iconify
این دستور پنجرهای به نام MyWindow را در صفحه 0 0 برای میزکار فعلی قرار میدهد و بلافاصله دستور Iconify را روی آن پنجره اجرا میکند.
توجه داشته باشید که اگر از InitialMapCommand به عنوان یک گزینه سراسری برای همه پنجرهها استفاده شود، اما لازم باشد که برخی از پنجرهها این دستور روی آنها اعمال نشود، میتوان از اقدام Nop روی آن پنجرهها استفاده کرد، مانند مثال زیر:
Style * InitialMapCommand Iconify Style XTeddy InitialMapCommand Nop
جایگذاری مدیر پنجره (Window Manager placement)
PositionPlacement [Center|UnderMouse|move-arguments] هنگامی که بدون آرگومان استفاده شود، پنجرههای جدید در گوشه بالا-چپ نمایشگر قرار میگیرند. با آرگومان Center، تمام پنجرههای جدید در مرکز صفحه ظاهر میشوند، و با UnderMouse، پنجرهها در صورت امکان در زیر نشانگر موش قرار میگیرند. اگر پنجره به دلیل قرار داشتن نشانگر در لبه صفحه نتواند در صفحه جا شود، با استفاده از این گزینه به درون صفحه رانده میشود. اگر هرگونه move-arguments دیگری داده شود، دقیقاً همانند دستور Move تفسیر میشود (با این استثنا که ارجاع به موقعیت فعلی پنجره کار نمیکند زیرا پنجره هنوز جایگذاری نشده است).
CascadePlacement پنجرههای جدید را به صورت خودکار و آبشاری جایگذاری میکند.
TileCascadePlacement پنجرههای جدید را به طور خودکار در مکانی هوشمندانه قرار میدهد - مکانی که در آن با هیچ پنجره دیگری روی صفحه همپوشانی نداشته باشند. اگر چنین موقعیتی یافت نشود، CascadePlacement به عنوان روش پشتیبان استفاده میشود.
TileManualPlacement این مورد مشابه TileCascadePlacement است، اما از ManualPlacement به عنوان روش پشتیبان استفاده میکند.
MinOverlapPlacement پنجرههای جدید را به صورت خودکار در مکانی قرار میدهد که مساحت همپوشانی (به پیکسل) با سایر پنجرهها کمینه باشد. به طور پیشفرض این خطمشی جایگذاری سعی میکند از همپوشانی با آیکونها و پنجرههای لایههای بالاتر جلوگیری کند. این رفتار را میتوان با سبک MinOverlapPlacementPenalties پیکربندی کرد.
MinOverlapPercentPlacement شبیه به MinOverlapPlacement است اما سعی میکند درصد همپوشانی سایر پنجرهها را به جای مساحت همپوشانی به پیکسل کمینه کند. این خطمشی جایگذاری سعی میکند از پوشاندن کامل پنجرههای دیگر خودداری کند و حتی بیشتر تلاش میکند پنجرههای کوچک را نپوشاند. این مورد با سبکهای MinOverlapPlacementPenalties و MinOverlapPercentPlacementPenalties قابل پیکربندی است.
MinOverlapPlacementPenalties حداکثر ۶ آرگومان اعشاری مثبت یا صفر میپذیرد:
normal ontop icon sticky below strut
اگر آرگومانهای انتهایی حذف شوند، از مقادیر پیشفرض استفاده میشود که عبارتند از:
1 5 10 1 0.05 50
برای بازنشانی این سبک به مقادیر پیشفرض، یک '!' به ابتدای آن اضافه کنید. این سبک خطمشی جایگذاری MinOverlapPlacement و MinOverlapPercentPlacement را پیکربندی میکند. ضریب normal روی پنجرههای عادی، ضریب ontop روی پنجرههایی با لایه بالاتر از پنجره در حال جایگذاری، ضریب icon روی آیکونها، ضریب sticky روی پنجرههای چسبان، ضریب below روی پنجرههایی با لایه پایینتر از پنجره در حال جایگذاری، ضریب strut بر مکمل فضای کاری EWMH (اگر پنجره در حال جایگذاری سبک EWMHPlacementUseWorkingArea را داشته باشد) و پنجرههای دارای راهنمای EWMH strut (یعنی راهنمای "لطفاً مرا نپوشانید") در صورتی که پنجره در حال جایگذاری سبک EWMHPlacementUseDynamicWorkingArea را داشته باشد، اعمال میشود. این ضرایب نشاندهنده میزان مساحتی هستند که این نوع پنجرهها (یا نواحی) هنگام قرارگیری پنجره جدید محاسبه میشوند. به عنوان مثال، به طور پیشفرض مساحت پنجرههای ontop به اندازه ۵ برابر پنجرههای عادی شمرده میشود. بنابراین MinOverlapPlacement و MinOverlapPercentPlacement قبل از اینکه یک پنجره ontop را بپوشاند، ۵ برابر مساحت بیشتری از یک پنجره دیگر را پوشش میدهد. برای رفتار یکسان با پنجرههای ontop مانند سایر پنجرهها، این مقدار را روی 1 بگذارید. برای جلوگیری اکید از قرار دادن پنجرهها زیر پنجرههای ontop، این مقدار را روی عددی بالا، مثلاً 1000 قرار دهید. این سبک روی پنجرههایی که قبلاً نگاشت شدهاند اعمال میشود و نه پنجرهای که در حال حاضر جایگذاری میشود. یک استثنا برای این قاعده وجود دارد: در صورتی که پنجره در حال جایگذاری دارای سبک EWMHPlacementUseWorkingArea باشد، ضریب strut روی پنجره جایگذاریشده اثر میگذارد.
MinOverlapPercentPlacementPenalties حداکثر ۴ آرگومان عدد صحیح مثبت یا صفر میپذیرد:
cover_100 cover_95 cover_85 cover_75
اگر آرگومانهای انتهایی حذف شوند، از مقادیر پیشفرض استفاده میشود که عبارتند از:
12 6 4 1
برای بازنشانی این سبک به مقادیر پیشفرض، یک '!' به ابتدای آن اضافه کنید. این سبک بر خطمشی جایگذاری MinOverlapPercentPlacement تأثیر میگذارد و مشابه سبک MinOverlapPlacementPenalties است. ضریب cover_xx زمانی استفاده میشود که پنجره در حال جایگذاری حداقل xx درصد از پنجره را بپوشاند. این ضریب به ضریب تعیینشده توسط سبک MinOverlapPlacementPenalties اضافه میشود.
ManualPlacement (معروف به جایگذاری فعال). کاربر باید هر پنجره جدید را به صورت دستی جایگذاری کند. پنجره تا زمانی که مکانی به صورت دستی انتخاب نشود فقط به صورت یک نوار الاستیک نشان داده میشود. پنجره زمانی جایگذاری میشود که یک دکمه موش یا هر کلیدی به جز Escape فشرده شود. کلید Escape جایگذاری دستی را لغو کرده و پنجره را در گوشه بالا-چپ صفحه قرار میدهد. اگر دکمه ۲ موش در طول جایگذاری اولیه پنجره فشرده شود (به ترتیب کلید Shift و دکمه ۱ موش در صورتی که شبیهسازی Mwm با دستور Emulate فعال شده باشد)، از کاربر خواسته میشود اندازه پنجره را نیز تغییر دهد.
تعریف دکمههای قابل استفاده برای جایگذاری پنجرهها با دستور Move و زمینه خاص 'P' برای جایگذاری امکانپذیر است (به دستور Move مراجعه کنید). با این حال، نمیتوانید روش تغییر اندازه پنجره را به شکلی غیر از آنچه تحت تأثیر دستور Emulate است بازتعریف کنید. دکمه استفادهشده برای جایگذاری پنجره را میتوان با شرط PlacedByButton بررسی کرد (به دستور Current مراجعه کنید).
مثال:
Style * ManualPlacement *FvwmEvent: PassID *FvwmEvent: add_window GrowDownFunc AddToFunc StartFunction + I FvwmEvent AddToFunc GrowDownFunc + I windowid $0 (PlacedByButton 3) \ Resize bottomright keep -0p
اکنون، هر زمان که پنجرهای ایجاد شود و کاربر دکمه ۳ را برای پایان دادن به جایگذاری اولیه فشار دهد، پنجره به طور خودکار بزرگ میشود تا زمانی که به حاشیه پایینی صفحه برخورد کند.
سبکهای قدیمی جایگذاری گزینههای DumbPlacement / SmartPlacement / SmartPlacementOff، CleverPlacement / CleverPlacementOff، ActivePlacement / RandomPlacement، ActivePlacementsHonorsStartsOnPage / ActivePlacementsHonorsStartsOnPageOff همچنان پشتیبانی میشوند اما در آینده حذف خواهند شد. سبکهای قدیمی و جدید را میتوان بر اساس جدول زیر تبدیل کرد:
Style * DumbPlacement, RandomPlacement --> Style * CascadePlacement Style * DumbPlacement, ActivePlacement --> Style * ManualPlacement Style * SmartPlacement, \ RandomPlacement, CleverPlacementOff --> Style * TileCascadePlacement Style * SmartPlacement, \ ActivePlacement, CleverPlacementOff --> Style * TileManualPlacement Style * SmartPlacement, CleverPlacement --> Style * MinOverlapPlacement Style * SmartPlacement, \ ActivePlacement, CleverPlacement --> Style * MinOverlapPercentPlacement Style * ActivePlacementsHonorsStartsOnPage --> Style * ManualPlacementsHonorsStartsOnPage Style * ActivePlacementsHonorsStartsOnPageOff --> Style * ManualPlacementsHonorsStartsOnPageOff
گزینههای خطمشی جایگذاری و چینش لایهای پنجرهها
!UseUSPosition مانند !UsePPosition عمل میکند اما استفاده از موقعیت مشخصشده توسط کاربر که توسط برنامه نشان داده شده است (راهنمای USPosition) را نادیده میگیرد. به طور کلی نادیده گرفتن انتخاب کاربر کار درستی نیست، اما برخی برنامهها از راهنمای USPosition سوءاستفاده میکنند تا پنجرههای خود را بدون رضایت کاربر به نقطه خاصی از صفحه تحمیل کنند. نکته: !UseUSPosition معادل گزینه منسوخشده !USPosition است.
NoUseTransientPPosition و UseTransientPPosition مانند !UsePPosition و UsePPosition عمل میکنند اما فقط روی پنجرههای گذرا اعمال میشوند. نکته: !UseTransientPPosition معادل گزینه منسوخشده !TransientPPosition است.
NoUseIconPosition به fvwm دستور میدهد هنگام آیکونسازی پنجره، موقعیت آیکون مشخصشده توسط برنامه (راهنمای IconPosition) را نادیده بگیرد. نکته: !UseIconPosition معادل گزینه منسوخشده !IconPosition است.
StartsOnDesk یک آرگومان عددی میگیرد که شماره میزکاری است که پنجره باید در ابتدا روی آن قرار گیرد. توجه داشته باشید که برنامههای استاندارد Xt نیز میتوانند این مورد را از طریق منبع مشخص کنند (مثلاً "-xrm '*Desk: 1'").
StartsOnPage ۱، ۲ یا ۳ آرگومان عددی میگیرد. اگر یک یا سه آرگومان داده شود، آرگومان اول (یا تنها آرگومان) شماره میزکار است. اگر سه آرگومان داده شود، آرگومانهای دوم و سوم موقعیت صفحه x,y را در پنجره مجازی مشخص میکنند. اگر دو آرگومان داده شود، موقعیت صفحه را مشخص کرده و هیچ اولویتی برای میزکار قائل نمیشوند. اگر فقط یک آرگومان داده شود، StartsOnPage دقیقاً مانند StartsOnDesk عمل میکند. برای برنامههای استاندارد Xt که این کاربرد را درک میکنند، میزکار/صفحه شروع را میتوان از طریق منبع نیز مشخص کرد (مثلاً "-xrm '*page: 1 0 2'"). استفاده از StartsOnPage همراه با SkipMapping تکنیک مفیدی است زمانی که میخواهید برنامهای را در صفحه دیگری اجرا کنید و به کار خود ادامه دهید، به جای اینکه منتظر ظاهر شدن آن بمانید.
StartsOnScreen یک آرگومان میگیرد. این آرگومان باید یک نام معتبر RandR باشد. پنجره جدید روی صفحه مشخصشده قرار میگیرد. حالت پیشفرض قرار دادن پنجرهها روی صفحهای است که نشانگر موش در زمان ایجاد پنجره روی آن قرار دارد. با این حال، پنجرههایی که توسط fvwm جایگذاری نمیشوند (یعنی پنجرههایی با راهنمای USPosition ناشی از ابعاد مشخصشده توسط کاربر) معمولاً در موقعیتی نسبت به همه صفحات شناساییشده قرار میگیرند.
StartsOnPageIncludesTransients باعث میشود سبک StartsOnPage حتی برای پنجرههای گذرا نیز اعمال شود. این مورد معمولاً مفید نیست، زیرا پنجرههای گذرا معمولاً پنجرههای بالاپر هستند که میخواهید در دیدگاه نمایان شما ظاهر شوند؛ اما گاهی اوقات یک برنامه از پنجره گذرا برای مواردی مانند پنجره راهاندازی استفاده میکند که باید به مکان خاصی هدایت شود.
ManualPlacementIgnoresStartsOnPage در صورتی که هر دو گزینه ManualPlacement و SkipMapping هنگام ایجاد پنجره فعال باشند، جایگذاری StartsOnPage یا StartsOnDesk را غیرفعال میکند. این کار مانع از آن میشود که پنجرهای را به صورت تعاملی جایگذاری کنید و سپس متعجب شوید که به کجا ناپدید شده است، زیرا در میزکار یا صفحه دیگری قرار گرفته است. ManualPlacementHonorsStartsOnPage اجازه میدهد این اتفاق در هر صورت بیفتد. اگر SkipMapping فعال نباشد این گزینه تأثیری ندارد، زیرا fvwm برای انجام جایگذاری تعاملی به میزکار/صفحه مناسب سوئیچ میکند. پیشفرض ManualPlacementIgnoresStartsOnPage است؛ ManualPlacementHonorsStartsOnPage با روشی که سبک قدیمی StartsOnDesk برای مدیریت این وضعیت استفاده میکرد، مطابقت دارد.
CaptureHonorsStartsOnPage باعث میشود ضبط اولیه (یک پنجره از قبل موجود) در هنگام راهاندازی، پنجره را بر اساس مشخصات میزکار، صفحه و نمایشگر در StartsOnPage و StartsOnScreen قرار دهد. CaptureIgnoresStartsOnPage باعث میشود fvwm این تنظیمات (شامل StartsOnDesk) را در ضبط اولیه نادیده بگیرد. پیشفرض CaptureIgnoresStartsOnPage است.
RecaptureHonorsStartsOnPage باعث میشود پنجره در هنگام Restart بر اساس مشخصات میزکار، صفحه و نمایشگر در StartsOnPage و StartsOnScreen قرار گیرد یا به آن بازگردد. RecaptureIgnoresStartsOnPage باعث میشود fvwm در هنگام Restart موقعیت فعلی پنجره را حفظ کند. پیشفرض RecaptureIgnoresStartsOnPage است.
Layer یک آرگومان اختیاری میپذیرد: یک عدد صحیح غیرمنفی. این لایهای است که پنجره در آن قرار میگیرد. اگر آرگومانی داده نشود، هر مقدار تنظیمشده قبلی حذف شده و لایه پیشفرض اعمال میشود.
StaysOnTop پنجره را در بالاترین لایه قرار میدهد. این لایه را میتوان با دستور DefaultLayers تغییر داد؛ پیشفرض 6 است.
StaysPut پنجره را در لایه میانی (put) قرار میدهد. این لایه را میتوان با دستور DefaultLayers تغییر داد؛ پیشفرض 4 است.
StaysOnBottom پنجره را در پایینترین لایه قرار میدهد. این لایه را میتوان با دستور DefaultLayers تغییر داد؛ پیشفرض 2 است.
StartsLowered به fvwm دستور میدهد پنجره را در ابتدا در پایین لایه خود قرار دهد، به جای حالت پیشفرض StartsRaised.
StartShaded به fvwm میگوید پنجره را جمع (shade) کند. یک آرگومان جهت اختیاری میتواند داده شود که میتواند یکی از "North"، "South"، "West"، "East"، "NorthWest"، "NorthEast"، "SouthWest"، "SouthEast" باشد یا اگر جهتی داده نشود، پیشفرض جمع شدن به سمت شمال است.
SkipMapping به fvwm میگوید هنگامی که پنجره در ابتدا نگاشت میشود به میزکاری که پنجره در آن قرار دارد سوئیچ نکند (همراه با StartsOnDesk یا StartsOnPage مفید است).
KeepWindowGroupsOnDesk باعث میشود پنجرههای جدیدی که راهنمای گروه پنجره روی آنها تنظیم شده است، در همان میزکاری ظاهر شوند که سایر پنجرههای همان گروه قرار دارند. از آنجا که این رفتار ممکن است گیجکننده باشد، تنظیم پیشفرض ScatterWindowGroups است. در این حالت راهنمای گروه پنجره هنگام جایگذاری پنجرهها نادیده گرفته میشود.
پنجرههای گذرا (Transient windows)
پنجرهای با سبک RaiseTransient که دارای پنجرههای گذرا است، هنگام بالا آمدن تمام پنجرههای گذرای خود را بالا میآورد. سبک DontRaiseTransient این رفتار را غیرفعال میکند. سپس با همه پنجرهها طوری رفتار میشود که گویی هیچ پنجره گذرایی ندارند.
پنجرهای با سبک LowerTransient که دارای پنجرههای گذرا است، هنگام پایین رفتن تمام پنجرههای گذرای خود را پایین میبرد. سبک DontLowerTransient این رفتار را غیرفعال میکند. سپس با همه پنجرهها طوری رفتار میشود که گویی هیچ پنجره گذرایی ندارند.
سبک StackTransientParent سبکهای RaiseTransient و LowerTransient را تقویت میکند. بالا آوردن یک پنجره با سبک StackTransientParent در صورتی که پنجره در حال بالا آمدن یک پنجره گذرا باشد و پنجره اصلی آن سبک RaiseTransient داشته باشد، عمل بالا آمدن را به پنجره اصلی منتقل میکند؛ این اثر باعث میشود بالا آمدن یک پنجره گذرا دقیقاً مانند بالا آمدن پنجره اصلی آن عمل کند - کل گروه بالا میآید. رفتار مشابهی برای پایین بردن کل گروه پنجرههای گذرا زمانی که پنجره اصلی سبک LowerTransient دارد برقرار است. DontStackTransientParent این رفتار را خاموش میکند. در صورتی که از RaiseTransient و LowerTransient استفاده نشود، (Dont)StackTransientParent هیچ تأثیری ندارد.
یک شبیهسازی مناسب از بالا/پایین آوردن موتیف (Motif) روی پنجرههای گذرا به این صورت امکانپذیر است:
Style * RaiseTransient Style * LowerTransient Style * StackTransientParent
سبکهای راهنماهای توسعهیافته مدیر پنجره (Extended Window Manager Hints)
EWMHDonateIcon به fvwm دستور میدهد تا راهنمای آیکون ewmh برنامه را با آیکونی که توسط fvwm استفاده میشود تنظیم کند، در صورتی که برنامه چنین راهنمایی ارائه ندهد (و در صورتی که آیکون استفاده شده توسط fvwm پنجره آیکون نباشد). EWMHDonateMiniIcon همین کار را برای مینیآیکونها انجام میدهد. این امکان را به پیجرها، نوار وظیفه، جعبه آیکون و... سازگار میدهد تا همان (مینی) آیکونهای fvwm را نمایش دهند. توجه داشته باشید که در برخی سختافزارها (مانند نمایشگرهای ۸ بیتی) این سبکها میتوانند نگاشت پنجره را کند کنند و به طور کلی تنها یکی از این سبکها برای یک برنامه سازگار مورد نیاز است. EWMHDontDonateIcon و EWMHDontDonateMiniIcon حالت پیشفرض را که عدم تنظیم هیچ راهنمای آیکون (یا مینیآیکون) ewmh است، بازیابی میکنند.
به طور پیشفرض، اگر برنامهای یک راهنمای آیکون ewmh با اندازه کوچک (یعنی ارتفاع و عرض کمتر یا مساوی ۲۲) ارائه دهد، fvwm از این آیکون به عنوان مینیآیکون خود استفاده میکند. EWMHMiniIconOverride به fvwm دستور میدهد آیکونهای ewmh را نادیده بگیرد و از مینیآیکون ارائهشده توسط سبک MiniIcon استفاده کند. EWMHNoMiniIconOverride حالت پیشفرض را بازیابی میکند.
EWMHUseStackingOrderHints باعث میشود fvwm از راهنماهای EWMH استفاده کرده و راهنماهای EWMH را که لایه پنجره را تغییر میدهند رعایت کند. EWMHIgnoreStackingOrderHints باعث میشود fvwm راهنماهای لایه EWMH را نادیده بگیرد.
یک برنامه میتواند با یک راهنما مقداری فضای رزروشده در میزکار درخواست کند. در اصطلاح EWMH به چنین راهنمایی یک strut گفته میشود و برای محاسبه فضای کاری استفاده میشود و ممکن است برای جایگذاری پنجره و در دستور maximize استفاده شود. EWMHIgnoreStrutHints باعث میشود fvwm چنین راهنماهایی را نادیده بگیرد، در حالی که EWMHUseStrutHints باعث استفاده fvwm از آن میشود که حالت پیشفرض است.
EWMHIgnoreStateHints باعث میشود fvwm هنگام نگاشت یک پنجره جدید، راهنماهای وضعیت اولیه EWMH را نادیده بگیرد. حالت پیشفرض EWMHUseStateHints باعث میشود fvwm چنین راهنماهایی را بپذیرد.
EWMHIgnoreWindowType باعث میشود fvwm مشخصات نوع پنجره EWMH را نادیده بگیرد. حالت پیشفرض !EWMHIgnoreWindowType باعث میشود fvwm پنجرههای انواع مشخصشده را به همان شکل سبکدهی کند.
EWMHMaximizeIgnoreWorkingArea باعث میشود fvwm هنگام اجرای دستور Maximize فضای کاری EWMH را نادیده بگیرد. با EWMHMaximizeUseWorkingArea فضای کاری EWMH استفاده میشود و با EWMHMaximizeUseDynamicWorkingArea فضای کاری پویای EWMH استفاده میشود (پیشفرض).
EWMHPlacementIgnoreWorkingArea باعث میشود fvwm هنگام جایگذاری (یا جایگذاری مجدد) یک پنجره، فضای کاری EWMH را نادیده بگیرد. با EWMHPlacementUseWorkingArea فضای کاری EWMH لحاظ میشود و با EWMHPlacementUseDynamicWorkingArea فضای کاری پویای EWMH لحاظ میشود (پیشفرض). توجه داشته باشید که در خطمشیهای جایگذاری MinOverlapPlacement و MinOverlapPercentPlacement، نحوه لحاظ شدن فضای کاری (پویای) EWMH با سبک MinOverlapPlacementPenalties قابل پیکربندی است.
متفرقه (Miscellaneous)
نکته: اگر کارساز X اجازه backing store را ندهد، این سبک بیفایده است.
SaveUnder ویژگی متناظر پنجره را در کارساز X فعال میکند. برای پنجرهای که از این سبک استفاده میکند، کارساز X تلاش میکند گرافیک زیر آن را در حافظه ذخیره کند که اگر کلاینت روی همان دستگاه کارساز X اجرا شود معمولاً کندتر است. در صورت کند بودن اتصال به کارساز X (مثلاً از طریق مودم)، SaveUnder ممکن است سرعت fvwm را افزایش دهد. برای غیرفعال کردن save under از سبک SaveUnderOff استفاده کنید. این حالت پیشفرض است. به BackingStore در بالا نیز مراجعه کنید.
نکته: اگر کارساز X اجازه save under را ندهد، این سبک بیفایده است.
ParentalRelativity به کلاینتهایی که از یک پیکسمپ پسزمینه از نوع ParentRelative استفاده میکنند امکان دستیابی به شفافیت را میدهد. ماژولهای Fvwm که از مجموعهرنگهای شفاف پشتیبانی میکنند به این تنظیم نیاز دارند. Opacity حالت پیشفرض است و برای کارایی بهتر باید برای همه کلاینتهای غیرشفاف استفاده شود.
MwmDecor باعث میشود fvwm تلاش کند راهنماهای تزئینات mwm را که برنامهها گاهی استفاده میکنند شناسایی و رعایت کند. برای خاموش کردن این سبک، از سبک NoDecorHint استفاده کنید.
MwmFunctions باعث میشود fvwm تلاش کند راهنماهای عملیات ممنوعه mwm را که برنامهها گاهی استفاده میکنند شناسایی و رعایت کند. HintOverride باعث میشود fvwm عملیاتی را که mwm ممنوع میکند کمرنگ کند، اما همچنان به شما اجازه انجام عملیات را میدهد. NoFuncHint راهنماهای mwm را به طور کامل غیرفعال میکند.
OLDecor باعث میشود fvwm تلاش کند راهنماهای olwm و olvwm را که بسیاری از برنامههای قدیمیتر XView و OLIT استفاده میکنند شناسایی و رعایت کند. این گزینه را با NoOLDecor خاموش کنید.
UseDecor این سبک منسوخ شده و در آینده حذف خواهد شد. برنامههایی برای جایگزینی آن با راهحلی انعطافپذیرتر در fvwm-3.0 وجود دارد.
UseDecor یک آرگومان میپذیرد: نام تزئینی که با AddToDecor ایجاد شده است. اگر نام تزئینی مشخص نشود، از تزئین "Default" استفاده میشود. پنجرهها در واقع حاوی تزئینات نیستند، اما همیشه به یکی اختصاص داده میشوند. اگر تزئین بعداً با AddToDecor تغییر یابد، تغییرات برای تمام پنجرههایی که به آن اختصاص داده شدهاند قابل مشاهده خواهد بود. تزئین یک پنجره را میتوان با ChangeDecor مجدداً تعیین کرد.
UseStyle این سبک منسوخ شده و در آینده حذف خواهد شد. برنامههایی برای جایگزینی آن با راهحلی انعطافپذیرتر در fvwm-3.0 وجود دارد.
UseStyle یک آرگومان میگیرد که نام سبک دیگری است. به این ترتیب میتوانید کاری کنید که نامهای پنجرههای نامرتبط بدون نیاز به تایپ مجدد، ویژگیهای مشابه را به راحتی به ارث ببرند. به عنوان مثال:
Style rxvt UseStyle XTerm
هشدار: اگر سبکی از یک یا چند سبک والد ساخته شده باشد و سبکهای والد تغییر کنند، سبک مشتقشده تغییر نمیکند. برای دستیابی به این هدف باید خط UseStyle را دوباره صادر کنید.
Unmanaged پنجرههایی با گزینه سبک Unmanaged توسط fvwm نادیده گرفته میشوند. آنها تزئین نمیشوند، نمیتوان آنها را جابجا کرد یا اندازه آنها را تغییر داد و غیره. احتمالاً میخواهید از Bugopts RaiseOverUnmanaged نیز استفاده کنید. این گزینه را میتوان با سبک !Unmanaged خاموش کرد.
State مقدار اولیه یکی از ۳۲ وضعیت تعریفشده توسط کاربر را که به هر پنجره مرتبط هستند، تنظیم میکند. شماره وضعیت از ۰ تا ۳۱ متغیر است و باید به عنوان آرگومان داده شود. وضعیتها هیچ معنایی در fvwm ندارند، اما میتوان آنها را در دستورات شرطی مانند Next با شرط State بررسی کرد و با دستور State دستکاری نمود.
# turn on state 11 for xterms ... Style xterm State 11 # ... but not for rxvts. Style rxvt !State 11
پنجرههایی با سبکهای WindowListSkip در منویی که با دستور WindowList ایجاد میشود یا لیستهای نشان داده شده در ماژولهایی مانند FvwmIconMan ظاهر نمیشوند. در ماژولها معمولاً میتوان با یک گزینه این سبک را نادیده گرفت. لطفاً برای اطلاعات بیشتر به صفحه راهنمای ماژول مربوطه مراجعه کنید. برای غیرفعال کردن این ویژگی، از سبک پیشفرض WindowListHit استفاده کنید.
سبکهای CirculateSkip و CirculateHit کنترل میکنند که آیا پنجره توسط دستورات شرطی مانند Next، Prev یا All در نظر گرفته شود یا خیر. پنجرههایی با CirculateSkip هرگز توسط دستورات شرطی انتخاب نمیشوند. با این حال، سبکها را میتوان به صراحت در شرط با شرطهای CirculateHit، CirculateHitIcon یا CirculateHitShaded بازنویسی کرد، و برخی از دستورات شرطی، مانند Current و All، به طور پیشفرض این کار را انجام میدهند. سبکهای CirculateSkipIcon، CirculateHitIcon، CirculateSkipShaded و CirculateHitShaded مانند CirculateSkip و CirculateHit عمل میکنند اما فقط برای پنجرههای آیکونی یا جمعشده اعمال میشوند. نکته: اگر چندین گزینه ...Skip... ترکیب شوند، پنجرهها تنها در صورتی انتخاب میشوند که با هیچیک از شرایط داده شده مطابقت نداشته باشند. بنابراین، با
Style * CirculateSkipIcon, CirculateSkipShaded
فقط پنجرههایی انتخاب میشوند که نه آیکونی باشند و نه جمعشده. نکته: به دلایل تاریخی، دستورات شرطی نام این سبکها را به عنوان نام شرط درک میکنند. مراقب باشید آنها را اشتباه نگیرید.
مثالها (EXAMPLES)
# Change default fvwm behavior to no title-
# bars on windows! Also define a default icon.
Style * !Title, \
Icon unknown1.xpm, \
BorderWidth 4, \
HandleWidth 5
# now, window specific changes:
Style Fvwm* !Handles, Sticky, \
WindowListSkip, \
BorderWidth 0
Style FvwmPager StaysOnTop, BorderWidth 0
Style *lock !Handles, Sticky, \
StaysOnTop, WindowListSkip
Style xbiff Sticky, WindowListSkip
Style FvwmButtons !Handles, Sticky, \
WindowListSkip
Style sxpm !Handles
# Put title-bars back on xterms only!
Style xterm Title, Color black/grey
Style rxvt Icon term.xpm
Style xterm Icon rterm.xpm
Style xcalc Icon xcalc.xpm
Style xbiff Icon mail1.xpm
Style xmh Icon mail1.xpm, \
StartsOnDesk 2
Style xman Icon xman.xpm
Style matlab Icon math4.xpm, \
StartsOnDesk 3
Style xmag Icon magnifying_glass2.xpm
Style xgraph Icon graphs.xpm
Style FvwmButtons Icon toolbox.xpm
Style Maker StartsOnDesk 1
Style signal StartsOnDesk 3
# Fire up Netscape on the second desk, in the
# middle of my 3x3 virtual desktop, and do not
# bother me with it...
Style Netscape* SkipMapping, \
StartsOnPage 1 1 1
توجه داشته باشید که تمام ویژگیهای یک پنجره با هم OR میشوند. در مثال بالا "FvwmPager" ویژگی StaysOnTop را از طریق تطابق دقیق نام پنجره دریافت میکند، اما همچنین !Handles، Sticky و WindowListSkip را با تطابق با "Fvwm*" به دست میآورد. این پنجره به دلیل تطابق با "*" ویژگی !Title را دریافت میکند. اگر سبکهای متناقضی برای یک پنجره مشخص شده باشد، آخرین سبک مشخصشده استفاده میشود.
WindowStyle options
سبکهای پنجره (WINDOW STYLES)
AddButtonStyle button [state] [style] [-- [!]flag ...]
اگر state حذف شود، سبک به تمام وضعیتها اضافه میشود. اگر style و flags در پرانتز قرار گیرند، میتوان چندین تعریف state را در یک خط قرار داد. پرچمهای (Flags) سبکهای دکمه اضافی پس از تعریف قابل تغییر نیستند.
دکمهها به ترتیب تعریف رسم میشوند؛ ابتدا با جدیدترین سبک دکمه آغاز شده و سپس موارد اضافهشده با AddButtonStyle رسم میشوند. برای پاک کردن پشته سبک دکمه، تغییر پرچمهای سبک یا مشاهده توضیحات سبکها و پرچمهای موجود، دستور ButtonStyle را ببینید.
مثالها:
**ButtonStyle** 1 Pixmap led.xpm -- Top Left
**ButtonStyle** 1 ActiveDown HGradient 8 grey black
**ButtonStyle All** -- UseTitleStyle
AddButtonStyle 1 \
ActiveUp (Pixmap a.xpm) \
ActiveDown (Pixmap b.xpm -- Top)
AddButtonStyle 1 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1
در ابتدا برای این مثال، تمام وضعیتهای دکمه روی یک پیکسمپ (pixmap) تنظیم میشوند. خط دوم وضعیت «ActiveDown» را با یک گرادیان جایگزین میکند (این خط پیکسمپ اختصاصیافته در خط قبلی را که همان سبک را به تمام وضعیتها داده بود، بازنویسی میکند). سپس، پرچم UseTitleStyle برای تمام دکمهها تنظیم میشود که باعث میشود fvwm قبل از رسم دکمهها، هر سبکی را که با TitleStyle تنظیم شده رسم کند. در نهایت، AddButtonStyle برای قرار دادن پیکسمپهای اضافی برای هر دو وضعیت «ActiveUp» و «ActiveDown» استفاده میشود و یک سبک دکمه برداری روی تمام وضعیتها رسم میگردد.
AddTitleStyle [state] [style] [-- [!]flag ...]
نوارهای عنوان به ترتیب تعریف رسم میشوند؛ ابتدا با جدیدترین TitleStyle آغاز شده و سپس موارد اضافهشده با AddTitleStyle رسم میشوند. برای پاک کردن پشته سبک عنوان، تغییر پرچمهای سبک، یا مشاهده توضیحات سبکها و پرچمهای موجود، دستورات TitleStyle و ButtonStyle را ببینید.
AddToDecor decor
دستورات را به دکور با نام decor اضافه یا هدایت میکند. دکور (decor) نامی است که به مجموعهای از دستورات تأثیرگذار بر سبکهای دکمه، سبکهای نوار عنوان و سبکهای حاشیه داده میشود. اگر decor وجود نداشته باشد ایجاد میشود؛ در غیر این صورت decor موجود تغییر مییابد.
دکورهای جدید دقیقاً مانند دکور «default» بدون هیچ تعریف سبکی شروع میشوند. یک دکور معین را میتوان با گزینه UseDecor از دستور Style روی مجموعهای از پنجرهها اعمال کرد. تغییر یک دکور موجود روی تمام پنجرههایی که در حال حاضر به آن اختصاص داده شدهاند تأثیر میگذارد.
دستور AddToDecor از نظر کاربرد شبیه دستورات AddToMenu و AddToFunc است، با این تفاوت که منوها و توابع با دستورات ButtonStyle، AddButtonStyle، TitleStyle، AddTitleStyle و BorderStyle جایگزین شدهاند. دکورهای ایجادشده با AddToDecor را میتوان با ChangeDecor، DestroyDecor، UpdateDecor و گزینه Style دستکاری کرد.
مثال زیر دکور «FlatDecor» و سبک «FlatStyle» را ایجاد میکند. اینها موجودیتهای متمایزی هستند:
AddToDecor FlatDecor
+ ButtonStyle All Active (-- flat) Inactive (-- flat)
+ TitleStyle -- flat
+ BorderStyle -- HiddenHandles NoInset
Style FlatStyle \
UseDecor FlatDecor, HandleWidth 4, Colorset 0
Style xterm UseStyle FlatStyle
دکور یک پنجره موجود را میتوان با ChangeDecor دوباره تخصیص داد. یک دکور را میتوان با DestroyDecor حذف کرد.
DestroyDecor FlatDecor AddToDecor FlatDecor ... Style FlatStyle UseDecor FlatDecor
و اکنون سبک را دوباره اعمال کنید:
Style xterm UseStyle FlatStyle
BorderStyle state [style] [-- [!]flag ...]
style زیرمجموعهای از سبکهای دکمه موجود است و فقط میتواند TiledPixmap (پیکسمپهای یکنواختی که با رنگهای لبه مایل/bevel همخوانی دارند در این حالت بهترین عملکرد را دارند) یا Colorset باشد. اگر کاراکتر '!' پیشوند هر flag قرار گیرد، رفتار آن معکوس میشود. اگر style مشخص نشود، میتوان پرچمها را بدون بازنشانی سبک تغییر داد.
پرچم HiddenHandles خطوط جداکننده دستگیره گوشه را در پنجرههای دارای دستگیره پنهان میکند (این گزینه هیچ تأثیری روی پنجرههای !Handles ندارد). بهطور پیشفرض، HiddenHandles غیرفعال است.
پرچم NoInset مکمل HiddenHandles است. در صورت تعیین، لبه مایل داخلی در اطراف قاب پنجره رسم نمیشود. اگر HiddenHandles مشخص نشود، قاب کمی غیرعادی به نظر میرسد.
Raised باعث رسم الگوی برجسته میشود (پیشفرض). Sunk باعث رسم الگوی فرورفته میشود. Flat از رسم الگوی برجستگی/فرورفتگی جلوگیری میکند.
برای تزیین حاشیههای پنجره فعال و غیرفعال با یک پیکسمپ بافتدار، میتوان اینگونه مشخص کرد:
BorderStyle Active TiledPixmap marble.xpm BorderStyle Inactive TiledPixmap granite.xpm BorderStyle Active -- HiddenHandles NoInset
برای پاک کردن سبک برای هر دو وضعیت:
BorderStyle Simple
برای پاک کردن برای یک وضعیت تکی:
BorderStyle Active Simple
برای لغو تنظیم یک پرچم برای یک وضعیت معین:
BorderStyle Inactive -- !NoInset
دکمههای نوار عنوان میتوانند با پرچم UseBorderStyle سبک حاشیه را به ارث ببرند (ButtonStyle را ببینید).
ButtonState [ActiveDown bool] [Inactive bool] [InactiveDown bool]
اگر آرگومان ActiveDown برابر «False» باشد، هیچ سبک دکمه متفاوتی برای دکمههای فشردهشده استفاده نمیشود و در عوض حتی هنگام فشرده شدن دکمه، از وضعیت «ActiveUp» استفاده میشود.
اگر آرگومان Inactive برابر «False» باشد، پنجرههای فوکوسشده و غیرفوکوس شبیه هم به نظر میرسند و وضعیتهای متناظر «Active» همیشه استفاده میشوند.
اگر آرگومان InactiveDown برابر «False» باشد (فقط زمانی اعمال میشود که Inactive برابر «True» باشد)، عنوانها و دکمههای عنوان فشردهشده در پنجرههای غیرفوکوس بسته به مقادیر سایر کلمات کلیدی، با استفاده از وضعیتهای «InactiveUp» یا «ActiveUp» رسم میشوند.
ButtonStyle button [state] [style] [-- [!]flag ...]
state مشخص میکند کدام وضعیت دکمه باید تنظیم شود. وضعیتهای دکمه به شرح زیر تعریف میشوند: «ActiveUp» و «ActiveDown» به وضعیتهای فشردهنشده و فشردهشده برای دکمههای پنجرههای فعال اشاره دارند؛ در حالی که وضعیتهای «InactiveUp» و «InactiveDown» دکمههای پنجرههای غیرفعال را نشان میدهند. میانبر «Active» نشاندهنده هر دو وضعیت «ActiveUp» و «ActiveDown» است. میانبر «Inactive» نشاندهنده هر دو وضعیت «InactiveUp» و «InactiveDown» است. نامهای وضعیت مشابه که همین الان شرح داده شد، اما با پیشوند «Toggled»، در عوض برای دکمههای عنوانی استفاده میشوند که یکی از نشانههای MwmDecorMax، MwmDecorShade، MwmDecorStick یا MwmDecorLayer را دارند، در صورتی که پنجره به ترتیب بیشینهشده، لولهشده، چسبان یا در لایهای خاص قرار گرفته باشد.
AddToDecor Default + ButtonStyle 6 \ Vector 4 50x25@1 85x75@0 15x75@0 50x25@1 + ButtonStyle 6 ToggledActiveUp \ Vector 4 50x75@0 85x25@1 15x25@0 50x75@0 + ButtonStyle 6 ToggledActiveDown \ Vector 4 50x75@0 85x25@1 15x25@0 50x75@0 + ButtonStyle 6 ToggledInactive \ Vector 4 50x75@0 85x25@1 15x25@0 50x75@0 + ButtonStyle 6 - MwmDecorShade Mouse 0 6 N WindowShade
علاوه بر این، میانبرهای زیر نیز قابل استفاده هستند: «AllNormal»، «AllToggled»، «AllActive»، «AllInactive»، «AllUp»، «AllDown». اینها در واقع ماسکهای مختلفی برای ۴ وضعیت جداگانه از مجموع ۸ وضعیت هستند. این موارد نیز پشتیبانی میشوند: «AllActiveUp»، «AllActiveDown»، «AllInactiveUp»، «AllInactiveDown».
اگر state مشخص شود، آن وضعیت خاص دکمه تنظیم میگردد. اگر state حذف شود، همه وضعیتها تنظیم میشوند. مشخص کردن یک سبک، سبک فعلی را از بین میبرد (برای جلوگیری از این کار از AddButtonStyle استفاده کنید).
اگر style حذف شود، پرچمهای وابسته به وضعیت را میتوان برای سبک اصلی دکمه بدون از بین بردن سبک فعلی تنظیم کرد. مثالها (هر خط باید مستقل در نظر گرفته شود):
ButtonStyle Left -- flat ButtonStyle All ActiveUp (-- flat) Inactive (-- flat)
خط اول تمام وضعیتهای دکمههای سمت چپ را روی flat (تخت) تنظیم میکند، در حالی که خط دوم فقط وضعیتهای «ActiveUp» و «Inactive» هر دکمه را روی flat تنظیم میکند (فقط پرچمها تغییر میکنند؛ سبکهای مجزای دکمهها تغییر نمیکنند).
اگر میخواهید تمام دکمهها را به حالت پیشفرض بازنشانی کنید:
ButtonStyle Reset
برای بازنشانی وضعیت دکمه «ActiveUp» دکمه 1 به پیشفرض:
ButtonStyle 1 ActiveUp Default
برای بازنشانی تمام وضعیتهای دکمه 1 به پیشفرض دکمه شماره 2:
ButtonStyle 1 Default 2
برای هر دکمه، با قرار دادن style و flags در پرانتز میتوان چندین تعریف state را در یک خط ارائه داد. اگر در هر خط فقط یک تعریف داده شود، میتوان پرانتزها را حذف کرد.
پرچمها (flags) بر state مشخصشده تأثیر میگذارند. اگر یک '!' پیشوند هر flag باشد، رفتار آن معکوس میشود. پرچمهای وابسته به وضعیت موجود برای همه سبکها در اینجا شرح داده شدهاند (مدخل ButtonStyle به پرچمهای مستقل از وضعیت میپردازد).
Raised باعث رسم الگوی برجسته میشود.
Sunk باعث رسم الگوی فرورفته میشود.
Flat از رسم الگوی برجستگی/فرورفتگی جلوگیری میکند.
UseTitleStyle باعث میشود وضعیت دکمه دادهشده قبل از رسم سبکهای خود دکمه، سبک عنوان فعلی را رندر کند. پرچمهای Raised، Flat و Sunk دستور TitleStyle نادیده گرفته میشوند زیرا در این زمینه زائد هستند.
UseBorderStyle باعث میشود دکمه گزینههای BorderStyle تزیینشده را به ارث ببرد.
گزینههای Raised، Sunk و Flat مانعةالجمع هستند و فقط برای ButtonStyle اولیه قابل تعیین میباشند. UseTitleStyle و UseBorderStyle نیز مانعةالجمع هستند (اگرچه هر دو میتوانند خاموش باشند). حالت پیشفرض Raised است در حالی که هر دو UseBorderStyle و UseTitleStyle تنظیمنشده باقی میمانند.
مهم
برای وضعیتهای «ActiveDown» و «InactiveDown»: هنگامی که دکمهای فشرده میشود، برجستگی/فرورفتگی معکوس میشود. به همین دلیل، برای دستیابی به ظاهر برجسته در وضعیتهای «ActiveDown» یا «InactiveDown» باید معکوس برجستگی مورد نظر را مشخص کنید (یعنی Sunk برای «ActiveDown» یا «InactiveDown»). این رفتار سازگار است، اما ممکن است در ابتدا گیجکننده به نظر برسد. همین موضوع در مورد وضعیتهای «Toggled» نیز صدق میکند.
سبکهای دکمه به سه دسته غیرمخرب (non-destructive)، تا حدی مخرب (partially destructive) یا کاملاً مخرب (fully destructive) طبقهبندی میشوند. سبکهای غیرمخرب بر تصویر تأثیری نمیگذارند. سبکهای تا حدی مخرب میتوانند برخی یا تمام بخشهای تصویر زیرین را بپوشانند (مانند Pixmap). سبکهای کاملاً مخرب کل تصویر زیرین را میپوشانند (مانند Solid یا یکی از سبکهای gradient). بنابراین، هنگام چیدن چند لایه سبک با AddButtonStyle (یا AddTitleStyle برای نوارهای عنوان)، در ترتیببندی سبکها دقت کنید تا بازرسم به حداقل برسد.
سبکهای موجود عبارتند از:
Simple، Default، Solid، Colorset، Vector، ?Gradient، Pixmap، AdjustedPixmap، ShrunkPixmap، StretchedPixmap، TiledPixmap، MiniIcon
توضیحات این سبکها و آرگومانهای آنها در ادامه آمده است:
سبک Simple کاری انجام نمیدهد. هیچ آرگومانی ندارد و این سبک نمونهای از یک سبک دکمه غیرمخرب است.
سبک Default به صورت مشروط یک آرگومان میپذیرد: عددی که شماره دکمه پیشفرض برای بارگیری را مشخص میکند. اگر دستور سبک دادهشده ButtonStyle یا AddButtonStyle باشد، آرگومان اختیاری است (در صورت ارائه، دکمه فعلی را بازنویسی میکند). اگر دستوری غیر از ButtonStyle یا AddButtonStyle استفاده شود، عدد باید مشخص گردد.
سبک Solid دکمه را با یک رنگ یکدست پر میکند. رنگ حاشیه برجسته تحت تأثیر قرار نمیگیرد. رنگ به عنوان یک آرگومان تکی مشخص میشود. این سبک کاملاً مخرب است.
سبک Colorset cs [alpha] دکمه را با کالرست cs پر میکند. آرگومان اختیاری alpha یک درصد بین 0 و 100 است. این آرگومان باعث میشود fvwm پسزمینه کالرست را با استفاده از این درصد با دکمه ترکیب کند. اگر درصد 0 باشد پسزمینه کالرست پنهان میشود و اگر 100 باشد پسزمینه کالرست به طور کامل اعمال میگردد. مقدار پیشفرض 100 است. بنابراین، میزان مخرب بودن به آرگومان alpha بستگی دارد.
سبک Vector num X[offsetp]xY[offsetp]@C ... یک الگوی خطی رسم میکند. از آنجا که این یک سبک دکمه استاندارد است، کلمه کلیدی Vector اختیاری است، num تعداد مشخصات نقاط به فرم X[offsetp]xY[offsetp]@C ... است. X و Y مختصات نقطه در داخل دکمه هستند که بر حسب درصد (از 0 تا 100) داده میشوند. یک offset مطلق اختیاری بر حسب پیکسل، میتواند به عنوان «+<offset>p» برای آفست مثبت یا «-<offset>p» برای آفست منفی داده شود.
C رنگ خط را مشخص میکند (0 - رنگ سایه، 1 - رنگ هایلایت/روشن، 2 - رنگ پسزمینه، 3 - رنگ پیشزمینه، 4 - فقط نقطه را حرکت بده، چیزی رسم نکن). رنگ نقطه اول استفاده نمیشود. میتوانید تا 10000 نقطه در یک الگوی خطی استفاده کنید. این سبک تا حدی مخرب است.
مشخصات آن کمی دشوار است:
ButtonStyle 2 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1
سپس تزیین دکمه 2 از یک الگوی ۴ نقطهای متشکل از یک خط از (x=50,y=30) به (70,70) با رنگ سایه (@0)، و سپس به (30,70) با رنگ سایه، و در نهایت به (50,30) با رنگ هایلایت (@1) استفاده میکند. آیا این خیلی گیجکننده است؟ صفحات وب fvwm را برای چند مثال همراه با تصویر صفحه ببینید.
یک مثال پیچیدهتر از Vector:
ButtonStyle 8 Vector 10 45x65@2 45x75@3 \ 20x75@3 20x50@3 35x50@3 35x65@1 35x25@1 \ 75x25@1 75x65@0 35x65@0 ButtonStyle 0 Vector 10 45x65@2 45x75@0 \ 20x75@0 20x50@1 45x50@1 45x65@0 75x65@3 \ 75x25@3 35x25@3 35x47@3
سبکهای Gradient نشاندهنده گرادیانهای رنگی هستند. علامت سوال را با هر یک از انواع گرادیان تعریفشده پر کنید. لطفاً برای توضیحات نحو گرادیان به بخش گرادیانهای رنگی (Color Gradients) مراجعه کنید. سبکهای گرادیان کاملاً مخرب هستند.
سبک Pixmap یک پیکسمپ را نمایش میدهد. پیکسمپ باید به عنوان یک آرگومان مشخص شود. به عنوان مثال، دستور زیر به دکمه شماره 2 همان پیکسمپ را برای هر ۴ وضعیت (۲ فعال و ۲ غیرفعال) و به دکمه شماره 4 پیکسمپهای کاملاً متفاوتی اختصاص میدهد.
ButtonStyle 2 Pixmap my_pixmap.xpm ButtonStyle 4 \ ActiveUp (Pixmap activeup.xpm) \ ActiveDown (Pixmap activedown.xpm) \ Inactive (Pixmap inactiveup.xpm) ButtonStyle 4 \ InactiveDown Pixmap inactivedown.xpm
مشخصه پیکسمپ میتواند به عنوان یک مسیر مطلق یا نسبی داده شود (ImagePath را ببینید). اگر پیکسمپ پیدا نشود، سبک دکمه به Simple بازمیگردد. پرچمهای مخصوص سبک Pixmap عبارتند از Left، Right، Top و Bottom. اینها را میتوان برای تراز کردن پیکسمپ استفاده کرد (پیشفرض برای هر دو جهت وسطچین است). شفافیت پیکسمپ برای رنگ «None» استفاده میشود. این سبک تا حدی مخرب است.
سبک AdjustedPixmap شبیه سبک Pixmap است. اما اندازه تصویر به گونهای تغییر میکند که دقیقاً با دکمه اندازه شود.
سبک ShrunkPixmap شبیه سبک Pixmap است. اما اگر تصویر از دکمه بزرگتر باشد، اندازه تصویر برای جا شدن در دکمه کوچک میشود.
سبک StretchedPixmap شبیه سبک Pixmap است. اما اگر تصویر از دکمه کوچکتر باشد، اندازه تصویر برای پوشاندن دکمه کشیده میشود.
سبک TiledPixmap یک پیکسمپ را میپذیرد تا به صورت کاشیکاریشده به عنوان پسزمینه دکمه قرار گیرد. یک پیکسمپ به عنوان آرگومان مشخص میشود. شفافیت پیکسمپ استفاده نمیشود. این سبک کاملاً مخرب است.
سبک MiniIcon آیکون مینیاتوری پنجره را در دکمه رسم میکند، که با گزینه MiniIcon از دستور Style مشخص میشود. این سبک دکمه هیچ آرگومانی نمیپذیرد. مثال:
Style * MiniIcon mini-bx2.xpm Style xterm MiniIcon mini-term.xpm Style Emacs MiniIcon mini-doc.xpm ButtonStyle 1 MiniIcon
ButtonStyle button - [!]flag ...
پرچمهای زیر معمولاً استفاده میشوند تا به fvwm بگویند کدام دکمهها باید تحت تأثیر نشانههای توابع mwm قرار گیرند (گزینه MwmFunctions از دستور Style را ببینید). این کار به طور خودکار انجام نمیشود زیرا ممکن است برای مثال دکمههایی داشته باشید که به توابع پیچیدهای مقید شده باشند.
MwmDecorMenu باید به دکمههای نوار عنوانی اختصاص یابد که یک منو را نمایش میدهند. تخصیص پیشفرض چپترین دکمه است. وقتی پنجرهای با گزینه MwmFunctions دستور Style درخواست کند که این دکمه نشان داده نشود، پنهان میگردد.
MwmDecorMin باید به دکمههای نوار عنوانی اختصاص یابد که پنجره را کمینه یا آیکونی میکنند. تخصیص پیشفرض دومین دکمه از سمت راستترین دکمه است. وقتی پنجرهای با گزینه MwmFunctions دستور Style درخواست کند که این دکمه نشان داده نشود، پنهان میگردد.
MwmDecorMax باید به دکمههای نوار عنوانی اختصاص یابد که پنجره را بیشینه میکنند. تخصیص پیشفرض راستترین دکمه است. وقتی پنجرهای با گزینه MwmFunctions دستور Style درخواست کند که این دکمه نشان داده نشود، پنهان میگردد. هنگامی که پنجره بیشینه میشود، الگوی برداری روی دکمه به صورت فشردهشده به نظر میرسد.
MwmDecorShade باید به دکمههای نوار عنوانی اختصاص یابد که پنجره را لوله (shade) میکنند (دستور WindowShade را ببینید). هنگامی که پنجره لوله میشود، الگوی برداری روی دکمه به صورت فشردهشده به نظر میرسد.
MwmDecorStick باید به دکمههای نوار عنوانی اختصاص یابد که پنجره را چسبان (sticky) میکنند. هنگامی که پنجره چسبان است، الگوی برداری روی دکمه به صورت فشردهشده به نظر میرسد.
پرچم MwmDecorLayer layer باید به دکمههای نوار عنوانی اختصاص یابد که پنجره را در لایه شماره layer قرار میدهند. هنگامی که پنجره در آن لایه خاص قرار دارد، الگوی برداری روی دکمه به صورت فشردهشده به نظر میرسد.
ChangeDecor decor
دکور یک پنجره را به decor تغییر میدهد. decor میتواند «Default» یا نام دکوری باشد که با AddToDecor تعریف شده است. اگر decor نامعتبر باشد، هیچ اتفاقی نمیافتد. اگر از جایی درون پنجره یا حاشیه آن فراخوانی شود، آن پنجره تحت تأثیر قرار میگیرد. اگر از پنجره ریشه فراخوانی شود، کاربر مجاز است پنجره هدف را انتخاب کند. ChangeDecor فقط بر ویژگیهایی تأثیر میگذارد که با استفاده از دستور AddToDecor قابل تنظیم باشند.
ChangeDecor CustomDecor1
DestroyDecor [recreate] decor
دکور تعریفشده با AddToDecor را حذف میکند، به طوری که ارجاعات بعدی به آن دیگر معتبر نخواهند بود. پنجرههایی که از این decor استفاده میکنند به دکور «Default» بازمیگردند. پارامتر اختیاری recreate به fvwm میگوید که دکور را به طور کامل دور نیندازد، بلکه فقط محتویات آن را دور بریزد. اگر بعداً دکور دوباره ایجاد شود، پنجرهها تا زمانی که سبک UseDecor دوباره اعمال نشود از آن استفاده نمیکنند، مگر اینکه دکور با گزینه recreate نابود شده باشد. دکور با نام «Default» را نمیتوان نابود کرد.
DestroyDecor CustomDecor1
TitleStyle [justification] [Height [num]] [MinHeight [num]]
TitleStyle LeftJustified Height 24
TitleStyle [state] [style] [-- [!]flag ...]
اگر یک '!' پیشوند هر flag باشد، رفتار آن معکوس میشود. پرچمهای معتبر برای هر وضعیت شامل Raised، Flat و Sunk هستند (این موارد مانعةالجمع میباشند). مقدار پیشفرض Raised است. یادداشت موجود در ButtonStyle در رابطه با وضعیت «ActiveDown» را ببینید. مثالها:
TitleStyle ActiveUp HGradient 16 navy black TitleStyle \ ActiveDown (Solid red -- flat) \ Inactive (TiledPixmap wood.xpm) TitleStyle \ ActiveUp (-- Flat) \ ActiveDown (-- Raised) \ InactiveUp (-- Flat) \ InactiveDown (-- Sunk)
این دستور وضعیت «ActiveUp» را روی یک گرادیان افقی، وضعیت «ActiveDown» را روی قرمز یکدست و وضعیتهای «Inactive» را روی یک پیکسمپ چوبی کاشیکاریشده تنظیم میکند. در نهایت، «ActiveUp» و «InactiveUp» طوری تنظیم میشوند که تخت به نظر برسند، در حالی که «ActiveDown» طوری تنظیم میشود که فرورفته باشد (پرچم Raised برای وضعیت «ActiveDown» به دلیل معکوس شدن برجستگی باعث میشود فرورفته به نظر برسد)، و «InactiveDown» طوری تنظیم میشود که برجسته به نظر برسد. مثالی که پرچمها را برای همه وضعیتها تنظیم میکند:
TitleStyle -- flat
برای داشتن ظاهری تخت:
TitleStyle -- flat ButtonStyle All Active (-- flat) Inactive (-- flat)
دستور TitleStyle تمام سبکها و آرگومانهای ButtonStyle را میپذیرد:
Simple، Default، Solid، Colorset، Vector، ?Gradient، Pixmap، AdjustedPixmap، ShrunkPixmap، StretchedPixmap، TiledPixmap، MiniIcon.
برای توضیحات تمام این سبکها و آرگومانهای آنها، دستور ButtonStyle را ببینید.
علاوه بر این سبکها، TitleStyle یک گزینه قدرتمند MultiPixmap را نیز میپذیرد. این گزینه به شما امکان میدهد پیکسمپها، کالرستها یا رنگهای متفاوتی را برای بخشهای مختلف نوار عنوان مشخص کنید. برخی از آنها برای متناسب شدن با یک فضای خاص کاشیکاری یا کشیده میشوند؛ برخی دیگر تصاویر گسسته «انتقال» (transition) هستند. بخشهای (sections) قابل تعریف عبارتند از:
Main
LeftMain
RightMain
UnderText
LeftOfText
RightOfText
LeftEnd
RightEnd
Buttons
LeftButtons
RightButtons
هیچیک از این موارد اجباری نیستند به جز Main (یا اگر Main را تعریف نکنید باید هر دو LeftMain و RightMain را تعریف کنید). اگر هیچ پیکسمپی برای Buttons تعریف نشده باشد و UseTitleStyle برای یک یا چند دکمه مشخص شده باشد، بر حسب مورد از Main، LeftMain یا RightMain استفاده میشود.
نحو این نوع سبک به این صورت است:
MultiPixmap section style arg, ...
و برای هر آنچه میخواهید تعریف کنید ادامه مییابد. style میتواند یکی از موارد TiledPixmap، AdjustedPixmap، Colorset یا Solid باشد. دستور ButtonStyle را برای توضیحات این سبکها ببینید. در مورد بخشهای انتقال، LeftEnd، LeftOfText، RightOfText یا RightEnd، سبک AdjustedPixmap فقط اندازه پیکسمپ را در جهت «y» تغییر میدهد. برای سبکهای Colorset و Solid، عرضی معادل نصف ارتفاع نوار عنوان برای بخشهای انتقال فرض میشود.
یک مثال:
MultiPixmap Main AdjustedPixmap foo.xpm, \
UnderText TiledPixmap bar.xpm, \
Buttons Colorset 2
توجه داشته باشید که نحو قدیمی هنوز پشتیبانی میشود: اگر سبک حذف شود، TiledPixmap فرض میشود و افزودن «(stretched)» بین بخش و نام فایل به معنی AdjustedPixmap است.
UpdateDecor [decor]
این دستور عمدتاً برای سازگاری با گذشته حفظ شده است. از آنجا که تمام عناصر یک دکور بلافاصله پس از تغییر بهروزرسانی میشوند، این دستور تا حد زیادی بیاستفاده است.
تزیینات پنجره را بهروزرسانی میکند. decor یک آرگومان اختیاری است که decor مورد نظر برای بهروزرسانی را مشخص میکند. در صورت ارائه، فقط پنجرههایی که به آن decor خاص اختصاص یافتهاند بهروز میشوند. این دستور برای مثال پس از ButtonStyle، TitleStyle یا BorderStyle (احتمالاً در ترکیب با AddToDecor) مفید است. مشخص کردن یک دکور نامعتبر منجر به بهروزرسانی تمام پنجرهها میشود.
| 2026-06-28 |