| FVWM3ALL(1) | FVWM3ALL(1) |
نام (NAME)
fvwm3all - مدیر پنجرهٔ مجازی F? برای X11 - راهنمای جامع
نمای کلی (OVERVIEW)
برنامهٔ fvwm3 شامل ویژگیهای بسیاری است. به همین دلیل، مستندات آن به چندین بخش مختلف تقسیم شده است. این صفحه راهنما شامل تمامی بخشهایی است که میتوان آنها را در این صفحات راهنمای جداگانه نیز یافت:
fvwm3commands دستورهای
توکار fvwm3commands.
fvwm3menus دستورها
و
گزینههای
مربوط به fvwm3menus.
fvwm3styles گزینههای
سبک (style) برای
مدیریت
پنجرهها،
منوها و
غیره.
خلاصه دستور (SYNOPSIS)
fvwm3 [-c config-command] [-d displayname] [-f config-file] [-o logfile] [-v]
توضیحات (DESCRIPTION)
برنامهٔ Fvwm یک مدیر پنجره برای X11 است که برای سرعت بهینهسازی شده است.
هدف Fvwm داشتن مصرف حافظهٔ اندک و قابلیت سفارشیسازی و توسعهپذیری بسیار بالا است. یک میزکار مجازی بزرگ و چندین میزکار مجزا را میتوان به طور جداگانه یا همزمان استفاده کرد. میزکار مجازی چنین عمل میکند که گویی صفحهٔ نمایش بسیار بزرگ است و میتوانید در محدودهٔ میزکار پیمایش کنید. چندین میزکار مجزا نیز چنین وانمود میکنند که چند صفحهٔ مجزا برای کار وجود دارد، اما هر صفحه کاملاً مستقل و بیارتباط با سایر صفحات است.
برنامهٔ Fvwm شتابدهندههای صفحهکلید را ارائه میدهد که امکان اجرای تقریباً تمام عملکردهای مدیر پنجره، از جمله جابهجایی و تغییر اندازهٔ پنجرهها و کار با منوها را با استفاده از میانبرهای صفحهکلید فراهم میسازد.
برنامهٔ Fvwm تفاوتی میان دستورهای پیکربندی و دستورهای عملیاتی قائل نمیشود. دستورهای پیکربندی معمولاً قلمها، رنگها، محتوای منو و نگاشت عملکردهای کلید و موشواره را تعیین میکنند، در حالی که دستورهای عملیاتی کارهایی نظیر بالا آوردن یا پایین بردن پنجرهها را انجام میدهند. Fvwm چنین تمایزی قائل نیست و اجازه میدهد هر چیزی در هر زمانی تغییر یابد.
گزینهها (OPTIONS)
اینها گزینههای خط فرمانی هستند که توسط fvwm شناخته میشوند:
-i | --clientid id
-c | --cmd config-command
فرض میشود هر پودمانی که از طریق آرگومانهای خط فرمان آغاز شود، پودمانی است که دستورهای پیکربندی را بازمیگرداند. تمام پودمانهای خط فرمان باید پیش از آنکه fvwm به سراغ StartFunction و تنظیم تزیینات لبه و سبکها برود، خاتمه یابند. در صورتی که پودمانی غیر از FvwmPerl را آغاز کنید احتمال بروز بنبست (deadlock) وجود دارد، اما یک مهلت زمانی در نظر گرفته شده است تا fvwm در نهایت به کار خود ادامه دهد.
به عنوان مثال، راهاندازی پیجر از این طریق باعث مسدود ماندن fvwm تا پایان مهلت زمانی میشود، اما دستور زیر به خوبی کار خواهد کرد:
fvwm -c "AddToFunc StartFunction I Module FvwmPager"
-d | --display displayname
-f config-file
-o logfile
-h | --help
-r | --replace
-F | --restore state-file
-V | --version
-C | --visual visual-class
-I | --visualid id
-l | --color-limit limit
PseudoColor: 68 (مکعب رنگ 4x4x4 + ۴ خاکستری) GrayScale: 64 خاکستری معمولی DirectColor: 32 (مکعب رنگ 3x3x3 + ۵ خاکستری)
عمق نمایش ۴ (۱۶ رنگ)
PseudoColor: 10 (مکعب رنگ 2x2x2 + ۲ خاکستری) GrayScale: 8 خاکستری معمولی DirectColor: 10 (مکعب رنگ 2x2x2 + ۲ خاکستری)
توجه داشته باشید که اگر از یک نگاشت رنگ (color map) اختصاصی استفاده کنید (یعنی fvwm با گزینههای -C یا -I راهاندازی شود)، در این صورت پیشفرضهای دیگری اعمال میشوند.
حال اگر با رنگها به مشکل برخوردید چه باید کرد؟ نخستین کار این است که بررسی کنید آیا واقعاً نمیتوانید کارساز X خود را با عمق ۱۵، ۱۶ یا بهتر اجرا کنید. مستندات کارساز X خود را بررسی نمایید. توجه داشته باشید که برخی از سختافزارها میتوانند از دو عمق مختلف روی یک صفحه نمایش پشتیبانی کنند (معمولاً عمق ۸ و عمق ۲۴). اگر عمق ۸ پیشفرض است، میتوانید با استفاده از گزینهٔ -C با آرگومان TrueColor، برنامهٔ fvwm را وادار به استفاده از بهترین عمق کنید. بنابراین اکنون فرض میکنیم که شما به دلیل ناتوانی سختافزار/راهانداز خود یا به این دلیل که به استفاده از برنامهای نیاز دارید که باید در این حالت اجرا شود (برای مثال، به این دلیل که این برنامه به رنگهای خواندنی-نوشتنی نیاز دارد)، ناچارید در عمق ۸ با یک نمای پویا (dynamic visual) کار کنید. آنچه باید درک شود این است که شما تنها ۲۵۶ رنگ در اختیار دارید و تمام برنامههایی که از نگاشت رنگ پیشفرض استفاده میکنند باید این رنگها را به اشتراک بگذارند. مشکل اصلی این است که برنامههایی وجود دارند که از رنگهای زیاد یا حتی تمام رنگها استفاده میکنند. اگر از چنین برنامهای استفاده کنید، ممکن است دیگر هیچ رنگ آزادی باقی نماند و برخی برنامهها (که تنها از چند رنگ استفاده میکردند) ممکن است در راهاندازی با خطا مواجه شوند یا غیرقابل استفاده گردند. سه کار وجود دارد که میتوان انجام داد (و fvwm واقعاً نقش خاصی ایفا نمیکند، همهٔ برنامهها دخیل هستند). نخستین مورد این است که برنامههایی را که نگاشت رنگ (پیشفرض) شما را هدر میدهند، با یک نگاشت رنگ اختصاصی اجرا کنید؛ برای مثال، netscape را با گزینهٔ -install اجرا کنید، برنامههای KDE یا QT را با گزینهٔ --cmap اجرا کنید، یا از گزینهٔ -C برای fvwm استفاده نمایید. عیب این روش این است که از نظر بصری ناخوشایند و آزاردهنده است (برای کنترل بهتر تعویض نگاشتهای رنگ، دستور ColormapFocus را ببینید). روش دوم محدود کردن تعداد رنگهایی است که برنامهها استفاده میکنند. مجدداً، برخی برنامهها گزینههایی برای تعیین محدودیت رنگ معین دارند. در fvwm میتوانید مقادیر مختلفی را امتحان کنید: ۶۱ (یک پالت «بصری» ویژه)، ۵۶ (یک مکعب رنگ 4x4x3 به همراه ۶ خاکستری)، ۲۹ (یک مکعب رنگ 3x3x3 به همراه ۲ خاکستری)، ۱۰ یا ۹. همچنین، میتوانید از گزینهٔ -L استفاده کنید. با این حال، محدود کردن تعداد رنگها راهحل قطعی نیست. راهحل قطعی این است که سعی کنید برنامههایی که از رنگهای زیادی استفاده میکنند را وادار به استفاده از رنگهای یکسان نمایید. این کار دشواری است زیرا هیچ استاندارد رسمی برای این هدف وجود ندارد. با این وجود، برخی از جعبهابزارها (toolkits) مانند QT و GTK از مکعبهای رنگ به عنوان پالت استفاده میکنند. بنابراین، ایده این است که برنامهها/جعبهابزارهای خود را به گونهای پیکربندی کنید که همگی از یک مکعب رنگ مشترک استفاده کنند. علاوه بر این، میتوانید از رنگهای موجود در این مکعب رنگ در فایلهای پیکربندی منابع X (X resources) خود و/یا به عنوان آرگومانهای گزینههای رنگ استفاده نمایید. Fvwm میتواند از هر مکعب رنگی به فرم RxGxB با ۲ <= R <= ۶، R = G، R-1 =< B <= R و B >= ۲ استفاده کند. برای داشتن یک مکعب رنگ RxGxB، به عنوان آرگومان به -l یک عدد صحیح c بدهید به طوری که c >= R*G*B باشد و در صورت B=R کوچکتر از (R+1)(G+1)*B و در صورت B < R کوچکتر از R*G(B+1) باشد (و مخالف ۶۱). اگر c > R*G*B باشد، آنگاه ممکن است مقداری خاکستری به مکعب رنگ افزوده شود. میتوانید از دستور PrintInfo Colors [1] برای دریافت اطلاعات دربارهٔ تنظیمات رنگ fvwm خود استفاده کنید. بهویژه، این دستور پالت استفادهشده توسط fvwm را در قالب rgb چاپ میکند (آخرین عدد صحیح، تعداد دفعاتی را نشان میدهد که fvwm رنگها را تخصیص داده است).
-L | --strict-color-limit
-P | --visual-palette
-A | --allocate-palette
-S | --static-palette
--debug-stack-ring
-v | --verbose
همچنین ثبت گزارشها را میتوان با استفاده از سیگنالها به طور پویا فعال و غیرفعال کرد:
SIGUSR1 : به عنوان سیگنالی برای راهاندازی مجدد Fvwm استفاده میشود SIGUSR2 : به عنوان سیگنالی برای تغییر وضعیت باز/بسته کردن فایل گزارش اشکالزدایی استفاده میشود
برنامه Fvwm دور بیشتر پنجرهها یک حاشیه تزئینی قرار میدهد. این حاشیه متشکل از یک نوار در هر طرف و یک قطعه کوچک L-شکل در هر گوشه است. یک نوار اضافی در بالا به نام title-bar (نوار عنوان) وجود دارد که برای نمایش نام پنجره به کار میرود. علاوه بر این، تا ۱۰ دکمه نوار عنوان میتواند وجود داشته باشد. نوارهای بالا، کنارهها و پایین در مجموع با عنوان side-bars (نوارهای کناری) شناخته میشوند. قطعات گوشه نیز frame (قاب) نام دارند.
در پیکربندی کمینه پیشفرض، کشیدن کلید ۱ موشواره روی frame یا side-bars عملیات تغییر اندازه پنجره را آغاز میکند. کشیدن کلید ۲ موشواره روی frame یا side-bars عملیات جابهجایی را آغاز میکند. عملیات بالا بردن/پایین بردن پنجره (raise/lower) با یکبار کلیک روی حاشیهها مقید شده است. برای عنوان پنجره نیز به همین صورت است.
تا ده دکمه نوار عنوان میتواند وجود داشته باشد. کاربرد آنها کاملاً توسط کاربر قابل تعریف است. یک پیکربندی پرکاربرد از یک دکمه در سمت چپ برای باز کردن فهرستی از گزینههای پنجره و دو دکمه در سمت راست برای آیکون کردن و بیشینهسازی پنجره استفاده میکند. پیکربندی رایج دیگری یک دکمه بستن را به سمت راست اضافه میکند. تعداد دکمههای نوار عنوانِ مورد استفاده بستگی به این دارد که کدام یک از آنها به اقداماتی از موشواره مقید (bound) شده باشند. دستور Mouse را ببینید.
میزکار مجازی (THE VIRTUAL DESKTOP)
برنامه Fvwm چندین میزکار مجازی را برای کاربرانی که مایل به استفاده از آنها هستند فراهم میکند. صفحه نمایش یک درگاه نمایش (viewport) به روی یک desktop (میزکار) است که ممکن است بزرگتر از صفحه نمایش باشد. چندین میزکار مجزا قابل دسترسی هستند (مفهوم: یک میزکار برای هر پروژه، یا یک میزکار برای هر برنامه کاربردی، هنگامی که دید برنامهها مجزا باشد). از آنجا که هر میزکار میتواند بزرگتر از صفحه نمایش فیزیکی باشد و به m در n صفحه (page) تقسیم شود که هر کدام به اندازه صفحه نمایش فیزیکی هستند، پنجرههایی که بزرگتر از صفحه نمایش هستند یا گروههای بزرگی از پنجرههای مرتبط را میتوان بهراحتی مشاهده کرد.
اندازه (m در n) (یعنی تعداد صفحهها) میزکارهای مجازی را میتوان در هر زمانی با استفاده از دستور DesktopSize تغییر داد. تمام میزکارهای مجازی باید دارای اندازه یکسانی باشند (هستند). نیازی به مشخص کردن تعداد کل میزکارهای متمایز نیست، اما در کل به حدود ۴ میلیارد محدود شده است. تمام پنجرههای یک محدوده از میزکارها را میتوان در FvwmPager، که یک نمای مینیاتوری از میزکارها است، مشاهده کرد. این پیجر یک برنامه جانبی به نام ماژول است که وجود آن برای کارکرد مدیر پنجره ضروری نیست. پنجرهها همچنین میتوانند با استفاده از دستور WindowList یا ماژول FvwmIconMan فهرست شوند.
مدیر پنجره Fvwm پنجرهها را در میزکار در یک ترتیب پشتهای لایهبندیشده نگه میدارد؛ پنجرهای در لایه پایینتر هرگز پنجرهای در لایه بالاتر را نمیپوشاند. لایه یک پنجره را میتوان با استفاده از دستور Layer تغییر داد. مفهوم لایهها تعمیمی از پرچم StaysOnTop در نگارشهای قدیمیتر fvwm است. گزینههای Style مربوط به StaysOnTop و StaysPut اکنون با قرار دادن پنجرهها در لایههای مناسب پیادهسازی شدهاند و گزینه سبک StaysOnBottom که پیشتر ناموجود بود نیز اضافه شده است.
پنجرههای Sticky (چسبان) پنجرههایی هستند که با «چسبیدن به شیشه صفحه نمایش»، فراتر از میزکار مجازی عمل میکنند. آنها همیشه روی صفحه نمایش ثابت میمانند. این برای مواردی مانند ساعتها و xbiffها بسیار راحت است، بنابراین کافی است تنها یک ابزارک از این دست را اجرا کنید تا همیشه همراه شما بماند. آیکونها نیز در صورت تمایل میتوانند طوری تنظیم شوند که به شیشه بچسبند.
هندسه پنجرهها (geometries) نسبت به درگاه نمایش (viewport) فعلی تعیین میشود. بدین معنا که:
xterm -geometry +0+0
پنجرهای در گوشه بالا-چپ بخش مرئی صفحه ایجاد میکند. تعیین موقعیتهایی که پنجرهها را روی میزکار مجازی، اما خارج از صفحه نمایش قرار میدهند نیز مجاز است. به عنوان مثال، اگر صفحه نمایش مرئی ۱۰۰۰ در ۱۰۰۰ پیکسل باشد، و اندازه میزکار ۳×۳ باشد، و درگاه نمایش فعلی در گوشه بالا-چپ میزکار قرار گرفته باشد، اجرای:
xterm -geometry +1000+1000
پنجرهای را درست بیرون از گوشه پایین-راست صفحه قرار میدهد. این پنجره را میتوان با بردن موشواره به گوشه پایین-راست صفحه و منتظر ماندن برای پیمایش آن به داخل نما، پیدا کرد. تعیین موقعیتی به شکل:
xterm -geometry -5-5
گوشه پایین-راست پنجره را در فاصله ۵ پیکسلی از گوشه پایین-راست بخش مرئی صفحه قرار میدهد. همه برنامههای کاربردی از هندسه پنجره با آفستهای منفی پشتیبانی نمیکنند. برخی برنامهها گوشه بالا-راست پنجره را ۵ پیکسل بالاتر و سمت چپ گوشه بالا-چپ صفحه قرار میدهند؛ برخی دیگر نیز ممکن است رفتارهای کاملاً عجیبی نشان دهند.
یک افزونه مختص fvwm برای رشتههای geometry وجود دارد که میتواند تعیین هندسه را نسبت به صفحه نمایش دادهشده نیز اجباری کند. برای مثال:
xterm -geometry +0+0@n
که در آن 'n' میتواند نام یک نمایشگر RandR، یا یک شماره نمایشگر اختصاصیافته باشد. برای جزئیات بیشتر، بخش پشتیبانی RANDR (RANDR SUPPORT) را ببینید.
چندین راه برای نگاشت یک پنجره روی میزکار یا صفحهای غیر از صفحه فعال فعلی وجود دارد. با این حال، روش هندسی ذکرشده در بالا (مشخص کردن مختصات x,y بزرگتر از اندازه صفحه نمایش فیزیکی)، دچار این محدودیت است که نسبت به درگاه نمایش فعلی تفسیر میشود: پنجره ممکن است بهطور پیوسته روی یک صفحه خاص ظاهر نشود، مگر اینکه همیشه برنامه را از همان صفحه فراخوانی کنید.
روشی بهتر برای قرار دادن پنجرهها در صفحهای (page)، نمایشگری (screen) یا میزکاری (desk) متفاوت از درگاه نمایشِ در حال حاضر نگاشتشده، استفاده از مشخصههای سبک StartsOnPage یا StartsOnScreen (جانشینهای سبک قدیمیتر StartsOnDesk) در فایل config شماست. این جایگذاری یکنواخت است: به مکان فعلی شما در میزکار مجازی وابسته نیست.
برخی از برنامههای کاربردی که آرگومانهای خط فرمان استاندارد Xt و منابع X (X resources) را درک میکنند، مانند xterm و xfontsel، به کاربر اجازه میدهند که میزکار یا صفحه را هنگام راهاندازی در خط فرمان تعیین کند:
xterm -xrm "*Desk:1"
یک xterm را روی میزکار شماره ۱ اجرا میکند؛
xterm -xrm "*Page:3 2 1"
یک xterm را دو صفحه به سمت راست و یک صفحه به سمت پایین از صفحه گوشه بالا-چپِ میزکار شماره ۳ اجرا میکند. با این حال همه برنامهها متوجه استفاده از این گزینهها نمیشوند. شما میتوانید با قرار دادن خطوط زیر در فایل .Xdefaults خود به همان نتایج دست پیدا کنید:
XTerm*Desk: 1
یا
XTerm*Page: 3 2 1
Fvwm به بهترین نحو با استفاده از پروتکل RandR در X11 از چند نمایشگر پشتیبانی میکند. اگر fvwm همراه با پروتکل RandR ساخته نشده باشد، پشتیبانی از چند نمایشگر بسیار محدود خواهد بود و پیشنهاد میشود که آن را با RandR بازسازی (rebuild) کنید. همچنین توصیه میشود در نمایشگرهای چندگانه از 'EdgeScroll 0 0' استفاده شود تا هنگام حرکت دادن موشواره بین نمایشگرها از تغییر صفحه جلوگیری گردد.
اگر Fvwm با پشتیبانی از RandR کامپایل شده باشد، خروجیهایی (نمایشگرهایی) را که مییابد ردگیری میکند. این خروجیها با نام ذخیره میشوند که میتوان آنها را با اجرای دستور xrandr(1) پیدا کرد.
هنگامی که Fvwm مانیتورها را شناسایی میکند، آنها را با ترتیبی مشخص به یک درخت میافزاید و به هر مانیتور شمارهای اختصاص مییابد. این ترتیب از بالا به پایین و از چپ به راست است، بنابراین برای مثال، نمودار زیر چیدمان مانیتورها و شماره اختصاصیافته به آنها را نشان میدهد.
A (0) B (1) C (2) D (3)
بنابراین امکانپذیر است که به مانیتور دوم ارجاع داده و نام آن را از طریق متغیرهای بسط به این صورت چاپ کرد:
$[monitor.1.name]
که نام B را چاپ خواهد کرد.
با انجام این کار، Fvwm رویدادهای مربوط به RandR را ردگیری میکند، مانند زمانی که اندازه یک خروجی معین تغییر میکند یا خروجیای اضافه یا حذف میشود.
این رویدادها توسط FvwmEvent کنترل میشوند.
رفتار میزکار (DESKTOP BEHAVIOUR)
از آنجا که Fvwm قابلیت ردگیری خروجیها را دارد، میتوان به Fvwm اعلام کرد که چگونه با آنها رفتار کند. این امر از طریق دستور DesktopConfiguration کنترل میشود. بهطور پیشفرض، Fvwm با تمام خروجیهایی که مییابد به عنوان یک صفحه نمایش بزرگ رفتار میکند، اگرچه میتوان به Fvwm دستور داد که با نمایشگرها مستقل از یکدیگر رفتار نماید.
مقداردهی اولیه (INITIALIZATION)
در طول مقداردهی اولیه، fvwm به دنبال یک فایل پیکربندی میگردد که نگاشتهای کلیدها و دکمهها و بسیاری موارد دیگر را توصیف میکند. قالب این فایلها در ادامه توضیح داده شده است. Fvwm ابتدا برای فایلهای پیکربندی با استفاده از دستور زیر جستجو میکند:
Read config
این دستور فایل config را در دایرکتوریهای $FVWM_USERDIR و $FVWM_DATADIR جستجو میکند، همانطور که در Read توضیح داده شده است. اگر این کار ناموفق باشد، برای سازگاری با نسخههای پیشین فایلهای بیشتری بررسی میشوند. در اینجا فهرست کاملی از تمام مکانهای فایلی که در نصب پیشفرض بررسی میشوند آمده است (تنها از اولین فایل یافتشده استفاده میشود):
$HOME/.fvwm/config /usr/local/share/fvwm/config $HOME/.fvwm/.fvwm2rc $HOME/.fvwm2rc /usr/local/share/fvwm/.fvwm2rc /usr/local/share/fvwm/system.fvwm2rc /etc/system.fvwm2rc
لطفاً توجه داشته باشید، تضمینی وجود ندارد که ۵ مکان آخر در آینده نیز پشتیبانی شوند.
اگر فایل پیکربندی پیدا نشود، دکمه چپ موشواره یا
یا
کلیدها روی پنجره ریشه (root window)، منوها و فرمهایی را باز میکنند که میتوانند یک فایل پیکربندی اولیه بسازند.
دستور Fvwm دو متغیر محیطی را تنظیم میکند که توسط فرزندان آن به ارث برده میشوند. اینها عبارتند از $DISPLAY که نمایشگری را که fvwm در آن اجرا میشود توصیف میکند. $DISPLAY ممکن است unix:0.0 یا :0.0 باشد که در صورت انتقال از طریق ssh به دستگاهی دیگر چندان خوب کار نمیکند، بنابراین $HOSTDISPLAY روی توصیفی از نمایشگر که برای شبکه آماده است تنظیم میشود. $HOSTDISPLAY همواره از پروتکل انتقال TCP/IP (حتی برای اتصالات محلی) استفاده میکند، بنابراین برای اتصالات محلی باید از $DISPLAY استفاده شود، زیرا ممکن است از سوکتهای دامنه یونیکس (Unix-domain sockets) که سریعتر هستند استفاده کند.
اگر میخواهید برخی برنامهها یا ماژولها را همراه با fvwm اجرا کنید، میتوانید به سادگی
Exec app
یا
Module FvwmXxx
را در config خود قرار دهید، اما این کار توصیه نمیشود؛ تنها در صورتی این کار را انجام دهید که بدانید مشغول چه کاری هستید. معمولاً مهم است که برنامهها یا ماژولها پس از خوانده شدن کامل پیکربندی شروع به کار کنند، زیرا پیکربندی حاوی شیوهها یا تنظیمات ماژولی است که میتواند ظاهر و کارکرد پنجرهها را تحت تأثیر قرار دهد.
روش استاندارد برای راهاندازی برنامهها یا ماژولها هنگام بالا آمدن fvwm این است که آنها را به یک تابع مقداردهی اولیه (معمولاً StartFunction یا InitFunction) بیفزایید. به این ترتیب، آنها تنها پس از اینکه fvwm خواندن و اجرای فایل config را به پایان رساند آغاز به کار میکنند.
نرمافزار Fvwm سه تابع ویژه برای مقداردهی اولیه دارد: StartFunction که هنگام راهاندازی و راهاندازی مجدد اجرا میشود؛ InitFunction و RestartFunction که (به ترتیب) در طول مقداردهی اولیه و راهاندازی مجدد درست پس از StartFunction اجرا میگردند. این توابع را میتوان در فایل config کاربر با استفاده از دستور AddToFunc (که بعداً توضیح داده شده است) سفارشی کرد تا ماژولها، xtermها یا هر چیزی را که مایلید توسط fvwm راهاندازی شوند آغاز کند.
همچنین Fvwm یک تابع خروج ویژه دارد: ExitFunction که هنگام خروج یا راهاندازی مجدد، پیش از پایان واقعی برنامه اجرا میشود. از این تابع میتوان برای متوقف کردن صریح ماژولها و موارد دیگر استفاده کرد.
اگر fvwm تحت یک مدیر نشست (session manager) اجرا شود، توابع SessionInitFunction و SessionRestartFunction به جای InitFunction و RestartFunction اجرا میشوند. این کار به تنظیم فایل config کاربر کمک میکند تا هم برای اجرا تحت مدیر نشست و هم بدون آن مناسب باشد. بهطور کلی راهاندازی xtermها یا برنامههای دیگر در توابع "Session*" ایده بدی است. همچنین میتوان تصمیم گرفت که هنگام اجرا تحت مدیر نشست یا بدون آن، ماژولهای متفاوتی راهاندازی شوند. برای اهداف مشابه، SessionExitFunction به جای ExitFunction استفاده میشود.
DestroyFunc StartFunction AddToFunc StartFunction + I Module FvwmPager * * + I Module FvwmButtons DestroyFunc InitFunction AddToFunc InitFunction + I Module FvwmBanner + I Module FvwmIconMan + I Exec xsetroot -solid cyan + I Exec xterm + I Exec netscape DestroyFunc RestartFunction AddToFunc RestartFunction + I Module FvwmIconMan DestroyFunc SessionInitFunction AddToFunc SessionInitFunction + I Module FvwmBanner DestroyFunc SessionRestartFunction AddToFunc SessionRestartFunction + I Nopاگر برخی از توابع خاص خالی هستند، نیازی به تعریف همهی آنها ندارید. همچنین توجه داشته باشید که تمام این توابع خاص اکنون میتوانند با استفاده از StartFunction و ExitFunction شبیهسازی شوند، مانند زیر:
DestroyFunc StartFunction AddToFunc StartFunction + I Test (Init) Module FvwmBanner + I Module FvwmPager * * + I Test (Restart) Beep DestroyFunc ExitFunction AddToFunc ExitFunction + I Test (Quit) Echo Bye-bye + I KillModule MyBuggyModule + I Test (ToRestart) Beep
گزینههای کامپایل (COMPILATION OPTIONS)
برنامه fvwm دارای تعدادی گزینه در زمان کامپایل است. اگر در استفاده از یک دستور یا قابلیت خاص مشکلی دارید، بررسی کنید که آیا پشتیبانی از آن در زمان کامپایل گنجانده شده است یا خیر. قابلیتهای اختیاری در فایل config.h که در طول کامپایل تولید میشود، شرح داده شدهاند.
آیکونها و تصاویر (ICONS AND IMAGES)
برنامه fvwm میتواند تصاویر .xbm، .xpm، .png و .svg را بارگذاری کند. تصاویر XBM تکرنگ هستند. fvwm همواره میتواند فایلهای XBM را نمایش دهد. قالبهای XPM و PNG تصاویر رنگی هستند. SVG یک قالب تصویری گرافیک برداری است. گزینههای زمان کامپایل تعیین میکنند که آیا fvwm میتواند آیکونها و تصاویر XPM، PNG یا SVG را نمایش دهد یا خیر. برای اطلاعات بیشتر فایل INSTALL.fvwm را ببینید.
گزینهٔ زمان کامپایل مرتبط SHAPE میتواند باعث شود fvwm آیکونهای شکلدار و شکیل را نمایش دهد.
گزینههای رندر SVG (SVG rendering options)
تصاویر SVG از فایلهای متنی (XML) تولید میشوند. یک فایل SVG واقعاً ساده ممکن است چیزی شبیه به این باشد:
<svg width="120" height="80"> <rect fill="red" width="40" height="40" x="0" y="0" /> <rect fill="lime" width="40" height="40" x="40" y="0" /> <rect fill="blue" width="40" height="40" x="80" y="0" /> <rect fill="cyan" width="40" height="40" x="0" y="40" /> <rect fill="magenta" width="40" height="40" x="40" y="40" /> <rect fill="yellow" width="40" height="40" x="80" y="40" /> </svg>
بهطور پیشفرض، تصاویر SVG همانگونه که سازندهٔ تصویر در نظر داشته رندر میشوند. اما از آنجا که SVG یک قالب گرافیک برداری است، تصاویر میتوانند در هر اندازه و چرخشی رندر شوند؛ برای مثال این امکان فراهم میشود که از یک فایل آیکون یکسان، با رندرهایی در اندازههای مختلف برای سبکهای Icon و MiniIcon استفاده کرد.
گزینههای رندر بهصورت یک رشته که به انتهای نام فایل SVG اضافه میشود، مطابق زیر مشخص میگردند:
_image.svg_:[!] [(1) _size_] [(2) _position_] [(3) _rotation_] [(4)
_scale_] ...
{empty}(1) [-]_width_{x}[-]_height_
{empty}(2) {- | +}_xpos_{- | +}_ypos_
{empty}(3) @[-]_angle_
{empty}(4) {* | }[-]_factor_[x | y]
رشتهٔ گزینهها همواره با یک دونقطه (':') آغاز میشود تا از نام فایل جدا گردد. یک رشتهٔ گزینهٔ خالی میتواند این دونقطه را نادیده بگیرد، اما اگر نام فایل شامل هرگونه دونقطهای باشد، همچنان گنجاندن آن برای جلوگیری از ابهام ایدهٔ خوبی است.
filename_without_colon.svg filename:with:colon.svg:
علامت تعجب ('!') کل تصویر نهایی را ترانهاده میکند (شامل ناحیهٔ رندر)، یعنی تمام مختصات افقی و عمودی با یکدیگر جابهجا میشوند.
image.svg:!
مقادیر width و height ابعاد ناحیهٔ رندر را به پیکسل مشخص میکنند، یعنی ابعاد تصویر حاصل. تصویر اصلی طوری برازش میشود که تمام ناحیهٔ رندر را پر کند.
image.svg:60x60
برای حفظ نسبت تصویر، از مقدار 0 برای width یا height استفاده کنید.
image.svg:0x60 image.svg:60x0
علامت '-' پیش از width، ناحیهٔ رندر را بهصورت افقی آینهای میکند.
image.svg:-0x0
علامت '-' پیش از height، ناحیهٔ رندر را بهصورت عمودی آینهای میکند.
image.svg:0x-0
مقادیر xpos و ypos جابهجایی و انتقال تصویر را به پیکسل مشخص میکنند. مقدار مثبت برای xpos تصویر را به راست جابهجا میکند. مقدار مثبت برای ypos آن را به پایین میبرد. جابهجایی بخشی از آن به بیرون از ناحیهٔ رندر منجر به بریده شدن تصویر میشود.
image.svg:-30-0 image.svg:-0+10 image.svg:-30+10
مقدار angle چرخش حول مرکز واقعی تصویر را بر حسب درجه مشخص میکند. این عمل ممکن است منجر به بریده شدن تصویر شود. مقدار مثبت تصویر را در جهت عقربههای ساعت میچرخاند. مقادیر ممیز شناور نیز پذیرفته میشوند.
image.svg:@180 image.svg:@-90 image.svg:@30 image.svg:@57.3factor مقیاسبندی تصویر اصلی (نه ناحیه رندر) را مشخص میکند. بزرگنمایی آن منجر به بریدهشدن تصویر میشود. مقادیر ممیز شناور پشتیبانی میشوند. تقسیم بر صفر نادیده گرفته میشود. اگر بلافاصله پس از factor یک 'x' یا یک 'y' قرار گیرد، مقیاسبندی بهترتیب افقی یا عمودی خواهد بود. در غیر این صورت مقیاسبندی یکنواخت است.
image.svg:*2 image.svg:/2 image.svg:/3x image.svg:/2y
کوچکنمایی یک تصویر انتقالیافته یا چرخاندهشده میتواند مانع از بریدهشدن آن شود.
image.svg:@30*0.6
استفاده مکرر از انتقال، چرخش و مقیاسبندی مجاز است. انتقال و چرخش جمعپذیر هستند. مقیاسبندی ضربپذیر است.
image.svg:*2/3 image.svg:/3x/2y
هنگام ترکیب تبدیلات آفین، ابتدا همیشه مقیاسبندی، سپس چرخش و در نهایت انتقال انجام میگیرد.
image.svg:-30+10@30/3x/2y
برای آینهای کردن تصویر اصلی از یک factor مقیاس منفی استفاده کنید.
image.svg:-30+10@30/-3x/2y
آینهای کردن ناحیه رندر پس از هرگونه مقیاسبندی، چرخش یا انتقال تصویر انجام میشود.
image.svg:-0x0-30+10@30/3x/2y
ترانهادن در آخرین مرحله و پس از تمام کارهای دیگر انجام میشود.
image.svg:!-0x0-30+10@30/3x/2y
یک ماژول، برنامهای مجزا است که به عنوان یک فرآیند جداگانه در Unix اجرا میشود، اما دستورها را برای اجرا به fvwm میفرستد. کاربران میتوانند ماژولهای خود را بنویسند تا بدون حجیمکردن یا به خطر انداختن یکپارچگی خودِ fvwm، هرگونه دستکاری دلخواه یا نامتعارفی را انجام دهند.
ماژولها باید توسط fvwm راهاندازی (spawn) شوند تا بتواند دو لوله (pipe) را برای ارتباط بین fvwm و ماژول برقرار سازد. این لولهها هنگام شروع ماژول از پیش باز هستند و توصیفکنندههای فایل برای لولهها به عنوان آرگومانهای خط فرمان در اختیار آن قرار میگیرند.
ماژولها میتوانند در هر زمانی در طول نشست X با استفاده از دستور Module توسط fvwm اجرا شوند. ماژولها میتوانند در کل مدت نشست X باقی بمانند، یا یک وظیفه منفرد را انجام داده و خارج شوند. اگر هنگام صدور فرمان خروج به fvwm، ماژول همچنان فعال باشد، fvwm لولههای ارتباطی را میبندد و منتظر دریافت یک سیگنال SIGCHLD از طرف ماژول میماند که نشان میدهد ماژول بستهشدن لوله را تشخیص داده و خارج شده است. اگر ماژولها موفق به تشخیص بستهشدن لوله نشوند، fvwm در هر صورت پس از حدود 30 ثانیه خارج میشود. تعداد ماژولهای در حال اجرای همزمان توسط حداکثر تعداد فایلهای همزمانِ باز در سیستمعامل محدود میشود که معمولاً بین 60 تا 256 است.
ماژولها صرفاً دستورها را به موتور دستورات fvwm ارسال میکنند. دستورها دقیقاً مانند یک مقیدسازی ماوس در فایل پیکربندی config قالببندی میشوند. همچنین برخی اطلاعات کمکی نیز منتقل میشوند، همانند آنچه در ماژول نمونهٔ FvwmButtons دیده میشود.
لطفاً برای جزئیات به بخش Module Commands مراجعه کنید.
سازگاری با ICCCM (ICCCM COMPLIANCE)
برنامه fvwm تلاش میکند با استاندارد ICCCM 2.0 سازگار باشد. برای اطلاعات بیشتر http://tronche.com/gui/x/icccm را بررسی کنید. علاوه بر این، ICCCM بیان میکند که برنامهها باید قادر به دریافت هر کلید فشردهشدهای باشند، که این امر با رویکرد میانبرهای صفحهکلید استفادهشده در fvwm و اغلب مدیر پنجرههای دیگر سازگار نیست. بهویژه، شما نمیتوانید میانبرهای صفحهکلید یکسانی داشته باشید که هم در fvwm شما و هم در یک fvwm دیگر که در Xnest (یک کارساز تو در توی X که درون یک پنجره اجرا میشود) اجرا میشود، کار کنند. همین مشکل در مورد مقیدسازیهای ماوس نیز وجود دارد.
استاندارد ICCCM بیان میکند پنجرههایی که دارای ویژگی زیر هستند:
WM_HINTS(WM_HINTS): Client accepts input or input focus: False
نباید توسط مدیر پنجره فوکوس ورودی صفحهکلید را دریافت کنند. با این حال، این پنجرهها خودشان میتوانند فوکوس ورودی را به دست آورند. تعدادی از برنامهها این ویژگی را تنظیم میکنند، اما با این وجود انتظار دارند که مدیر پنجره به هر حال به آنها فوکوس صفحهکلید بدهد؛ بنابراین fvwm سبکی برای پنجره به نام Lenience ارائه میدهد که به fvwm اجازه میدهد این قاعدهٔ ICCCM را نادیده بگیرد. حتی با وجود این سبک پنجره، هیچ تضمینی وجود ندارد که برنامه فوکوس را بپذیرد.
تفاوتهای بین ICCCM 1.1 و 2.0 شامل توانایی تحویل گرفتن کنترل از یک مدیر پنجرهٔ در حال اجرای سازگار با ICCCM 2.0 است؛ بنابراین
fvwm; vi ~/.fvwm/config; fvwm -replace
مشابه دستور Restart عمل میکند. البته دقیقاً یکسان نیست، چرا که اگر مدیر پنجره به عنوان آخرین کلاینت در فایل .Xclients یا .Xsession شما اجرا شده باشد، بستن مدیر پنجرهٔ در حال اجرای قبلی ممکن است نشست X شما را خاتمه دهد.
قابلیتهای افزودهٔ دیگر شامل پشتیبانی از نصب جدول رنگ (colormap) سمت کلاینت (برای جزئیات به ICCCM مراجعه کنید) و اشارهٔ اضطرار (urgency hint) است. کلاینتها میتوانند این نشانگر را در ویژگی WM_HINTS پنجرهٔ خود تنظیم کرده و انتظار داشته باشند مدیر پنجره توجه کاربر را به آن پنجره جلب کند. برنامه fvwm دارای دو تابع با قابلیت تعریف مجدد برای این منظور به نامهای "UrgencyFunc" و "UrgencyDoneFunc" است که هنگام تنظیم یا پاک شدن نشانگر اجرا میشوند. تعاریف پیشفرض آنها عبارتند از:
AddToFunc UrgencyFunc + I Iconify off + I FlipFocus + I Raise + I WarpToWindow !raise 5p 5p AddToFunc UrgencyDoneFunc + I Nop
Fvwm تلاش میکند مشخصات راهنماهای گسترشیافته مدیر پنجره (بهطور خلاصه ewmh یا EWMH): https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html و برخی از الحاقات این مشخصات را رعایت کند.
این پشتیبانی با سبکها (styles) و دستورها قابل پیکربندی است. این سبکها و دستورها دارای پیشوند EWMH هستند (بنابراین میتوانید آنها را بهراحتی در این صفحه راهنما پیدا کنید).
یک زمینه (Context) جدید 'D' برای دستورهای Key، PointerKey و Mouse وجود دارد. این زمینه برای برنامههای میزکار است (مانند kdesktop و میزکار Nautilus).
هنگامی که یک نوار وظیفه (taskbar) سازگار از fvwm میخواهد پنجرهای را فعال کند (معمولاً زمانی که روی دکمهای که نمایانگر پنجره در چنین نوار وظیفهای است کلیک میکنید)، آنگاه fvwm تابع پیچیده EWMHActivateWindowFunc را فراخوانی میکند که بهطور پیشفرض Iconify Off، Focus و Raise است. میتوانید این تابع را دوباره تعریف کنید. برای مثال:
DestroyFunc EWMHActivateWindowFunc AddToFunc EWMHActivateWindowFunc I Iconify Off + I Focus + I Raise + I WarpToWindow 50 50
علاوه بر این، اشارهگر ماوس را به مرکز پنجره منتقل میکند.
مشخصات EWMH مفهوم ناحیه کاری (Working Area) را معرفی میکند. بدون پشتیبانی ewmh، ناحیه کاری کل صفحه نمایش قابل مشاهده است (یا تمام نمایشگرهای شما در صورتی که یک پیکربندی چندنمایشگره با RandR داشته باشید). با این حال، برنامههای سازگار (مانند یک پنل) میتوانند درخواست رزرو فضا در لبههای صفحه را داشته باشند. در این صورت، ناحیه کاری برابر است با کل صفحه نمایش قابل مشاهده شما منهای این فضاهای رزروشده. اگر بتوان یک پنل را با کلیک روی یک دکمه پنهان کرد، ناحیه کاری تغییر نمیکند (چرا که میتوانید در هر زمان پنل را از حالت پنهان خارج کنید)، اما ناحیه کاری پویا (Dynamic Working Area) بهروزرسانی میشود: فضای رزروشده توسط پنل برداشته میشود (و در صورت باز شدن دوباره پنل، مجدداً اضافه میگردد). ناحیه کاری پویا ممکن است هنگامی که fvwm پنجرهای را جایگذاری یا بیشینه (maximize) میکند استفاده شود. برای اینکه بدانید آیا برنامهای فضا رزرو کرده است، میتوانید دستور "xprop | grep _NET_WM_STRUT" را در یک ترمینال تایپ کرده و برنامه را انتخاب کنید. اگر چهار عدد ظاهر شوند، این اعداد فضای رزروشده را به گونهای که در دستور EwmhBaseStruts توضیح داده شده است، تعریف میکنند.
پیکربندی (CONFIGURATION)
فایلهای پیکربندی (Configuration Files)
از فایل پیکربندی برای توصیف مقیدسازیهای کلید و ماوس، رنگها، اندازه نمایشگر مجازی و موارد مرتبط استفاده میشود. فایل پیکربندی مقداردهی اولیه معمولاً config (یا .fvwm2rc) نامیده میشود. با استفاده از دستور Read، بهراحتی میتوان فایلهای پیکربندی جدید را در حین کار خواند.
سطرهایی که با '#' شروع میشوند توسط fvwm نادیده گرفته میشوند. از سطرهایی که با '*' آغاز میشوند انتظار میرود حاوی دستورهای پیکربندی ماژول باشند (نه دستورهای پیکربندی خود fvwm). همانند اسکریپتهای شل، خطوط جدید تعبیهشده در یک سطر از فایل پیکربندی را میتوان با قرار دادن یک بکاسلش در پیش از آنها نقلقول کرد. تمام سطرهایی که به این شیوه پیوند داده شدهاند به عنوان یک تکسطر در نظر گرفته میشوند. خود نویسه خط جدید نادیده گرفته میشود.
برنامه Fvwm هیچ تمایزی بین دستورهای پیکربندی و دستورهای عملیاتی قائل نمیشود، بنابراین هر آنچه در بخش دستورهای fvwm ذکر شده است میتواند روی یک سطر مجزا قرار گیرد تا fvwm هنگام خواندن فایل پیکربندی آن را اجرا کند، یا میتواند به عنوان یک دستور اجرایی در یک منو قرار گیرد یا به یک دکمه ماوس یا کلید صفحهکلید مقید شود. تصمیمگیری در این مورد که کدام توابع برای راهاندازی اولیه و کدامیک برای زمان اجرا مناسب هستند، به عهده کاربر گذاشته شده است.
پیکربندی ارائهشده (Supplied Configuration)
یک فایل پیکربندی نمونه همراه با توزیع fvwm ارائه شده است. این فایل به خوبی مستندسازی شده (دارای کامنت) و میتواند به عنوان منبعی از مثالها برای پیکربندی fvwm استفاده شود. این فایل ممکن است از فایل /usr/local/share/fvwm/config کپی شود.
همچنین، منوی پیشساخته (که در صورت پیدا نشدن فایل پیکربندی در دسترس است) دارای گزینههایی برای ایجاد یک فایل پیکربندی اولیه برای کاربر است..SH "قلمها (FONTS)"
نام قلمها و بارگذاری قلم
قلمهای مورد استفاده برای متن عنوان پنجره، عنوان آیکونها، منوها و پنجرهٔ ابعاد و مکان (geometry window) را میتوان با استفاده از دستورهای Font و IconFont در Style، دستور Font در MenuStyle و دستور DefaultFont تعیین کرد. همچنین، تمام ماژولهایی که از متن استفاده میکنند، دستور(های) پیکربندی برای تعیین قلم(ها) دارند. تمام این سبکها و دستورها یک نام قلم را به عنوان آرگومان میپذیرند. این بخش توضیح میدهد که نام قلم برای fvwm چیست و fvwm چه قلمهایی را بارگذاری میکند.
نخست، میتوانید از آنچه که میتوانیم آن را نام معمول قلم بنامیم استفاده کنید، برای نمونه:
-adobe-courier-bold-r-normal--10-100-75-75-m-60-ISO8859-1 -adobe-courier-bold-r-normal--10-* -*-fixed-medium-o-normal--14-*-ISO8859-15
یعنی میتوانید از یک توصیف منطقی قلم اکس (بهاختصار XLFD) استفاده کنید. سپس «اولین» قلمی که با این توصیف مطابقت داشته باشد بارگذاری شده و استفاده میشود. این «اولین» قلم به مسیر قلمهای شما (font path) و همچنین به محلیسازی (locale) شما بستگی دارد. قلمهایی که با مجموعه نویسهٔ (charset) محلیسازی همخوانی دارند، به ترتیب اولویت بارگذاری میشوند. برای نمونه با:
-adobe-courier-bold-r-normal--10-*
اگر مجموعه نویسهٔ محلیسازی ISO8859-1 باشد، fvwm تلاش میکند قلمی را بارگذاری کند که با این الگو مطابقت دارد:
-adobe-courier-bold-r-normal--10-*-ISO8859-1
با مجموعه نویسهٔ محلیسازی ISO8859-15، fvwm تلاش میکند این قلم را بارگذاری کند:
-adobe-courier-bold-r-normal--10-*-ISO8859-15.
نام قلم میتواند به عنوان یک XLFD گسترشیافته ارائه شود. این یک فهرست جداشده با کاما از نامهای قلم XLFD (ساده) است، برای نمونه:
-adobe-courier-bold-r-normal--14-*,-*-courier-medium-r-normal--14-*
هر نام قلم ساده به نوبت بررسی میشود تا قلمی منطبق با مجموعه نویسهٔ محلیسازی پیدا شود و اگر این کار ناموفق بود، هر نام قلم ساده بدون محدودیت روی مجموعه نویسه امتحان خواهد شد.
جزئیات بیشتر دربارهٔ XLFD را میتوان در صفحهٔ راهنمای X، سند قراردادهای توصیف منطقی قلم اکس (موسوم به xlfd) و صفحات راهنمای XLoadFont و XCreateFontSet یافت. برخی از ابزارهای کمکی مفید قلم عبارتند از: xlsfonts، xfontsel، xfd و xset.
اگر از پشتیبانی Xft برخوردارید، میتوانید یک نام (توصیف) قلم Xft برای یک قلم TrueType (یا Type1) را با پیشوند "xft:" تعیین کنید، برای نمونه:
"xft:Luxi Mono" "xft:Luxi Mono:Medium:Roman:size=14:encoding=iso8859-1"
«اولین» قلمی که با توصیف مطابقت داشته باشد بارگذاری میشود. این اولین قلم در Xft1 به فایل پیکربندی XftConfig و در Xft2 به فایل /etc/fonts/fonts.conf بستگی دارد. میتوان صفحهٔ راهنمای Xft و با Xft2 صفحهٔ راهنمای fontconfig را مطالعه کرد. اولین رشتهای که پس از "xft:" میآید همیشه به عنوان خانواده (family) در نظر گرفته میشود. در مثال دوم Luxi Mono خانواده قلم است (سایر خانوادههای TTF در XFree عبارتند از: "Luxi Serif" و "Luxi Sans")، مقدار Medium وزن قلم (Weight) است (سایر وزنهای ممکن: Light، DemiBold، Bold، Black)، مقدار Roman زاویه یا سبک قلم (slant یا style) است (سایر احتمالات: Regular، Oblique، Italic)، مقدار size اندازه قلم بر حسب پوینت (point size) را مشخص میکند (برای اندازه بر حسب پیکسل از pixelsize= استفاده کنید)، و encoding امکان تعیین اجباری یک مجموعه نویسه را فراهم میکند (تنها iso8859-1 یا iso10646-1؛ اگر هیچ انکودینگی مشخص نشود، مجموعه نویسهٔ محلیسازی فرض میشود). یک پارامتر مهم "minspace=bool" است که در آن bool برابر با True یا False میباشد. اگر bool برابر با False باشد (حالت پیشفرض؟)، Xft ارتفاع قلم بیشتری را نسبت به حالت True به fvwm اختصاص میدهد. این ممکن است جایگذاری متن، ارتفاع عنوان آیکون و پنجره، فاصلهٔ خطوط در منوها و FvwmIdent، ارتفاع دکمه در برخی ماژولهای fvwm و ... را تغییر دهد. در مانیتورهای LCD میتوانید "rgba=mode" را امتحان کنید که در آن mode یکی از مقادیر rgb، bgr، vrgb یا vbgr برای فعالسازی رندر زیرپیکسلی (subpixel rendering) است. بهترین حالت به نحوهٔ چیدمان پیکسلهای مانیتور LCD شما بستگی دارد. میتوانید مشخصات دیگری را نیز با جداکنندهٔ ":" وارد کنید، مانند "foundry=foundry_name"، "spacing=type" که در آن type میتواند monospace، proportional یا charcell باشد، "charwidth=integer"، "charheight=integer" یا "antialias=bool" که bool برابر با True یا False است. به نظر میرسد این پارامترها همیشه اعمال نمیشوند.
برای بررسی اینکه واقعاً کدام قلمهای Xft بارگذاری شدهاند، میتوانید پیش از اجرای fvwm متغیر XFT_DEBUG=1 را export کرده و لاگ خطاهای سیستم را بررسی کنید. در Xft2 میتوانید از fc-list برای فهرست کردن قلمهای در دسترس استفاده نمایید. به هر حال، پشتیبانی از Xft (از دیدگاه X و fvwm) آزمایشی است و کیفیت رندرینگ به چندین پارامتر بستگی دارد (نسخههای XFree و freetype و کارت(های) گرافیک شما).
پس از نام یک قلم Xft میتوانید با استفاده از یک ";" نام قلم XLFD (ساده یا گسترشیافته) را اضافه کنید، مانند:
xft:Verdana:pixelsize=14;-adobe-courier-bold-r-normal--14-*
سپس، اگر بارگذاری قلم Xft با شکست مواجه شود یا fvwm از Xft پشتیبانی نکند، fvwm قلم "-adobe-courier-bold-r-normal—14-*" را بارگذاری میکند. این ویژگی امکان نوشتن فایلهای پیکربندی قابل حمل (portable) را فراهم میسازد..SS "کدگذاری قلم و رشته (Font and string encoding)"
هنگامی که یک قلم بارگذاری میشود، fvwm کدگذاری (یا charset) آن را با استفاده از نامش (دو فیلد آخر نام) پیدا میکند. fvwm فرض میکند رشتههایی که با این قلم نمایش داده میشوند از این کدگذاری استفاده میکنند (یک استثنا این است که اگر یک قلم iso10646-1 بارگذاری شود، آنگاه UTF-8 برای کدگذاری رشته در نظر گرفته میشود). در وضعیت عادی، (i) قلم با دادن نام قلم بدون تعیین کدگذاری بارگذاری میشود، (ii) کدگذاری قلم بارگذاریشده همان کدگذاری محلی (locale encoding) است، و سپس (iii) رشتههای موجود در فایلهای پیکربندی fvwm و همچنین نام پنجره و آیکون باید از کدگذاری محلی استفاده کنند. با Xft وضعیت کمی متفاوت است چرا که Xft تنها از iso10646-1 و iso8859-1 پشتیبانی میکند. اگر یکی از این کدگذاریها را در نام قلم Xft تعیین نکنید، fvwm تبدیل رشتهها را با استفاده از (iii) انجام میدهد. توجه داشته باشید که در قلمهای چندبایتی (بهویژه با قلمهای «CJK») برای رندر مناسب متن، کدگذاری محلی باید همان مجموعه نویسههای (charset) قلم باشد.
برای نادیدهگرفتن قواعد پیشین، میتوان کدگذاری رشته را در ابتدای توصیف قلم به صورت زیر مشخص کرد:
StringEncoding=enc:_full_font_name_
که در آن enc کدگذاری پشتیبانیشده توسط fvwm است (معمولاً مجموعه نویسه نام قلم به همراه برخی کدگذاریهای یونیکد: UTF-8، USC-2، USC-4 و UTF-16).
برای نمونه، ممکن است از یک مجموعه نویسه محلی iso8859-1 استفاده کنید و یک FvwmForm به زبان روسی با استفاده از کدگذاری koi8-r داشته باشید. در این حالت، فقط کافی است با تعیین کدگذاری در نام قلم، از FvwmForm بخواهید یک قلم koi8-r را بارگذاری کند. در یک زبان چندبایتی، (از آنجا که قلم چندبایتی تنها زمانی بهخوبی کار میکند که کدگذاری محلی همان مجموعه نویسه قلم باشد)، باید از یک قلم iso10646-1 استفاده کنید:
StringEncoding=jisx0208.1983-0:-*-fixed-medium-r-*-ja-*-iso10646-1
یا
"StringEncoding=jisx0208.1983-0:xft:Bitstream Cyberbit"
اگر پیکربندی FvwmForm شما از کدگذاری jisx0208.1983-0 استفاده میکند. امکان دیگر این است که برای پیکربندی FvwmForm خود از کدگذاری UTF-8 استفاده کرده و از یک قلم iso10646-1 بهره ببرید:
-*-fixed-medium-r-*-ja-*-iso10646-1
یا
"StringEncoding=UTF-8:xft:Bitstream Cyberbit"
یا به طور معادل
"xft:Bitstream Cyberbit:encoding=iso10646-1"
به طور کلی، قلمهای iso10646-1 همراه با کدگذاری رشته UTF-8 امکان نمایش هر نویسهای را در یک منوی مفروض، FvwmForm و غیره فراهم میکنند.
امروزه بیش از پیش از یونیکد استفاده میشود و فایلهای متنی از کدگذاری UTF-8 بهره میبرند. با این حال، در عمل نویسههای مورد استفاده در محدوده مجموعه نویسه محلی شما هستند. برای صرفهجویی در حافظه (یک قلم iso10646-1 ممکن است تعداد بسیار زیادی نویسه داشته باشد) یا به این دلیل که قلم زیبایی بدون مجموعه نویسه iso10646-1 دارید، میتوانید کدگذاری رشته را روی UTF-8 تنظیم کرده و از قلمی با مجموعه نویسه محلی استفاده کنید:
StringEncoding=UTF-8:-*-pretty_font-*-12-*
در بیشتر موارد، fvwm کدگذاری قلم را به درستی تشخیص میدهد. با این حال، برخی قلمها به نامهای کدگذاری معتبر ختم نمیشوند. هنگامی که نام قلم عادی نیست، برای نمونه:
-misc-fixed-*--20-*-my_utf8-36
باید کدگذاری را بعد از نام قلم و با استفاده از یک اسلش به عنوان جداکننده اضافه کنید. برای نمونه:
MenuStyle * Font -misc-fixed-*--20-*-my_utf8-36/iso10646-1
اگر fvwm کدگذاری را پیدا کند، از توابع سیستمی iconv برای انجام تبدیل میان کدگذاریها استفاده میکند. متأسفانه هیچ استانداردی وجود ندارد. برای تبدیل میان iso8859-1 و UTF-8: یک سیستم گنو از «ISO-8859-1» و سایر سیستمها از «iso881» برای تعریف مبدلها استفاده میکنند (این دو نام توسط fvwm پشتیبانی میشوند). علاوه بر این، در برخی موارد ممکن است استفاده از مبدلهای مختص به دستگاه ضروری باشد. بنابراین، اگر با مشکلاتی مواجه شدید میتوانید اطلاعاتی درباره پیادهسازی iconv خود به دست آورید (دستور «man iconv» ممکن است کمک کند) و نامی را که مبدل میان کدگذاری قلم و UTF-8 را تعریف میکند، در انتهای نام قلم پس از راهنمای کدگذاری و یک / قرار دهید (راه حل ممکن دیگر استفاده از GNU libiconv است). برای نمونه استفاده کنید از:
Style * Font -misc-fixed-*--14-*-iso8859-1/*/latin1
تا از latin1 برای تعریف مبدل کدگذاری iso8859-1 استفاده شود. علامت «*» بین «/»ها به fvwm اعلام میکند که کدگذاری را از انتهای نام قلم تشخیص دهد. استفاده کنید از:
Style * Font \ -misc-fixed-*--14-*-local8859-6/iso8859-6/local_iso8859_6_iconv
تا fvwm مجبور شود از قلمی با کدگذاری iso8859-6 استفاده کند (این ویژگی برای متنهای دوطرفه/راستبهچپ مفید است) و از local_iso8859_6_iconv برای تعریف مبدلها بهره ببرد..SS "جلوههای سایه قلم (Font Shadow Effects)"
به قلمها میتوان جلوههای سهبعدی داد. در ابتدای نام قلم (یا درست پس از یک مشخصه احتمالی StringEncoding) عبارت زیر را اضافه کنید:
Shadow=size [offset] [directions]]:
size یک عدد صحیح مثبت است که تعداد پیکسلهای سایه را مشخص میکند. offset یک عدد صحیح مثبت اختیاری است که فاصله سایه از لبه نویسه را بر حسب پیکسل مشخص میکند. مقدار پیشفرض offset صفر است. directions مجموعهای اختیاری از جهتهایی است که سایه از نویسه به سمت آنها منشعب میشود. directions فهرستی از جهتهای fvwm است که با فاصله از هم جدا شدهاند:
N, North, Top, t, Up, u, -
E, East, Right, r, Right, r, ]
S, South, Bottom, b, Down, d, _
W, West, Left, l, Left, l, [
NE, NorthEast, TopRight, tr, UpRight, ur, ^
SE, SouthEast, BottomRight, br, DownRight, dr, >
SW, SouthWest, BottomLeft, bl, DownLeft, dl, v
NW, NorthWest, TopLeft, tl, UpLeft, ul, <
C, Center, Centre, .
سایه در هر جهتِ تعیینشده نمایش داده میشود. All معادل تمام جهتها است. direction پیشفرض BottomRight است. با جهت Center، سایه کل رشته را احاطه میکند. از آنجا که این جهت یک ابرمجموعه از تمام جهتهای دیگر است، مشخص کردن آن به همراه هر جهت دیگری بیهوده خواهد بود.
جلوه سایه تنها با مجموعهرنگها (colorsets) کار میکند. رنگ سایه با استفاده از گزینه fgsh در دستور Colorset تعریف میشود. لطفاً برای جزئیات در مورد مجموعهرنگها به بخش Colorsets مراجعه کنید.
نکته: ممکن است هماهنگ کردن قلم و رنگهای fg، fgsh و bg برای ایجاد جلوهای چشمنواز دشوار باشد، اما میتواند نمای بسیار زیبایی ایجاد کند.
متن دوجهته (BI-DIRECTIONAL TEXT)
متون عربی و عبری برای نمایش صحیح نیازمند پشتیبانی از متن دوجهته هستند؛ این بدان معناست که رشتههای منطقی باید پیش از نمایش دیداری تبدیل شوند، به طوری که زیررشتههای چپبهراست و راستبهچپ مشخص شده و بازآرایی شوند. در fvwm اگر قلمهای استفادهشده برای نمایش متن جزو یکی از مجموعهنویسههایی باشند که نیازمند پشتیبانی bidi (دوجهته) هستند، این کار بهطور خودکار در عنوان پنجرهها، منوها، برچسبهای ماژولها و سایر بخشها انجام میشود. به عنوان مثال، این موارد شامل iso8859-6، iso8859-8 و iso10646-1 (یونیکد) است، اما سایر قلمهای iso8859-* را شامل نمیشود.
این پشتیبانی از متن دوجهته با استفاده از گزینه زمان کامپایل کتابخانه fribidi انجام میشود؛ به INSTALL.fvwm مراجعه کنید.
کلیدهای میانبر (KEYBOARD SHORTCUTS)
تقریباً تمام عملیاتهای مدیر پنجره را میتوان از طریق صفحهکلید انجام داد، بنابراین کاربری بدون ماوس امکانپذیر است. علاوه بر پیمایش در میزکار مجازی با انتساب دستور Scroll به کلیدهای مناسب، میتوان دستورهای Popup، Move، Resize و هر دستور دیگری را نیز به کلیدها پیوند داد. پس از آغاز یک دستور، نشانگر با استفاده از کلیدهای جهتنمای بالا، پایین، چپ و راست حرکت داده میشود و با فشردن کلید return عملیات خاتمه مییابد. نگه داشتن کلید Shift باعث میشود نشانگر در گامهای بزرگتری حرکت کند و نگه داشتن کلید control گامهای حرکت نشانگر را کوچکتر میکند. بهجای کلیدهای جهتنما میتوان از کنترلهای استاندارد حرکت مکاننما در emacs و vi نیز استفاده کرد.
مدیریت نشست (SESSION MANAGEMENT)
مدیر پنجره Fvwm بر اساس «پروتکل مدیریت نشست اکس» (X Session Management Protocol) از مدیریت نشست پشتیبانی میکند. این برنامه موقعیت پنجره، اندازه، ترتیب چیدمان (stacking order)، میزکار (desk)، چسبندگی (stickiness)، جمعشدگی (shadiness)، بیشینهبودن (maximizedness) و کمینهبودن به آیکون (iconifiedness) را برای همه پنجرهها ذخیره و بازیابی میکند. علاوه بر این، برخی از وضعیتهای سراسری نیز ذخیره میشوند.
برنامه Fvwm هیچ اطلاعاتی در رابطه با سبکها (styles)، تزئینات (decors)، توابع یا منوها ذخیره نمیکند. اگر هر یک از این منابع را در طول یک نشست تغییر دهید (برای مثال با اجرای دستورهای Style یا با استفاده از ماژولهای گوناگون)، این تغییرات پس از ذخیره و راهاندازی مجدد نشست از بین میروند. برای دائمی شدن، چنین تغییراتی باید به فایل پیکربندی اضافه شوند..SH "آرگومانهای بولی (BOOLEAN ARGUMENTS)"
تعدادی از دستورها یک یا چند آرگومان بولی میگیرند. این آرگومانها چند ورودی معادل را میپذیرند: مقادیر «yes»، «on»، «true»، «t» و «y» همگی به عنوان درست (true) و مقادیر «no»، «off»، «false»، «f» و «n» به عنوان نادرست (false) ارزیابی میشوند. برخی دستورها «toggle» را نیز میپذیرند که به این معنی است که اگر قابلیت در حال حاضر فعال باشد، غیرفعال میشود و بالعکس.
انتسابهای توکار کلید و موشواره (BUILTIN KEY AND MOUSE BINDINGS)
دستورهای زیر به صورت توکار در fvwm تعریف شدهاند:
Key Help R A Popup MenuFvwmRoot Key F1 R A Popup MenuFvwmRoot Key Tab A M WindowList Root c c NoDeskSort Key Escape A MC EscapeFunc Mouse 1 R A Menu MenuFvwmRoot Mouse 1 T A FuncFvwmRaiseLowerX Move Mouse 1 FS A FuncFvwmRaiseLowerX Resize Mouse 2 FST A FuncFvwmRaiseLowerX Move AddToFunc FuncFvwmRaiseLowerX + I Raise + M $0 + D Lower
کلیدهای Help و F1 یک منوی توکار را فرامیخوانند که fvwm آن را ایجاد میکند. این ویژگی در درجه اول برای کاربران تازهکاری است که هنوز فایل پیکربندی اختصاصی خود را نساختهاند. فشردن هر یک از این دو کلید روی پنجره ریشه (پسزمینه)، منویی را باز میکند تا به شما در شروع کار کمک کند.
فشردن کلید Tab در هر کجای صفحه، در حالی که کلید Alt (همان کلید روی صفحهکلیدهای PC) پایین نگه داشته شده است، فهرستی از پنجرهها را باز میکند.
دکمه ۱ موشواره روی نوار عنوان یا قاب کناری میتواند پنجره را جابهجا کرده، بالا بیاورد یا پایین ببرد.
دکمه ۱ موشواره روی گوشههای پنجره میتواند اندازه پنجره را تغییر دهد، آن را بالا بیاورد یا پایین ببرد.
شما میتوانید این انتسابها را بازنویسی یا حذف کنید. برای حذف انتساب فهرست پنجرهها، از این دستور استفاده کنید:
Key Tab A M -
اجرای دستور (COMMAND EXECUTION)
دستورات ماژول و تابع (Module and Function Commands)
اگر fvwm با دستوری مواجه شود که آن را تشخیص نمیدهد، بررسی میکند تا ببیند آیا دستور مشخصشده باید بهصورت
Function (rest of command)
یا
Module (rest of command)
میبوده است یا خیر. این سازوکار اجازه میدهد تا توابع پیچیده یا ماژولها بهگونهای فراخوانی شوند که در فایل پیکربندی کاملاً شفاف و یکپارچه به نظر برسند.
مثال: فایل config شامل این خط است:
HelpMe
برنامه fvwm ابتدا به دنبال یک دستور fvwm به نام «HelpMe» میگردد و شکست میخورد. سپس به دنبال یک تابع پیچیده تعریفشده توسط کاربر به نام «HelpMe» میگردد. اگر چنین تابعی وجود نداشته باشد، fvwm تلاش میکند ماژولی به نام «HelpMe» را اجرا کند..SS "اجرای با تأخیر دستورها (Delayed Execution of Commands)"
نکته: دستورهای فراوانی وجود دارند که بر ظاهر و احساس (look and feel) پنجرههای خاص، برخی یا همهٔ پنجرهها اثر میگذارند، مانند Style، Mouse، Colorset، TitleStyle و بسیاری دیگر. به دلایل کارایی (performance)، چنین تغییراتی بیدرنگ اعمال نمیشوند، بلکه تنها زمانی اعمال میگردند که fvwm بیکار (idle) باشد، یعنی هیچ تعامل کاربری یا ورودی ماژولی در انتظار نباشد. بهویژه، گزینههای جدید Style که درون یک تابع تنظیم میشوند، تا پس از پایان یافتن تابع اعمال نخواهند شد. این امر گاهی میتواند منجر به اثرات ناخواسته شود.
برای اجبار به اعمال فوری همهٔ تغییرات معلق، از دستورهای UpdateStyles، Refresh یا RefreshWindow استفاده کنید.
نقلقول (QUOTING)
علامتهای نقلقول تنها زمانی لازم هستند که بخواهید fvwm دو یا چند کلمه را بهعنوان یک آرگومان واحد در نظر بگیرد. نقلقولهای غیرضروری نیز مجاز هستند. اگر میخواهید یک نویسهٔ نقلقول در متن خود داشته باشید، باید آن را با استفاده از نویسهٔ backslash فراردهی (escape) کنید. برای مثال، اگر یک منوی بازشو با نام "Window-Ops" داشته باشید، به نقلقول نیازی ندارید:
Popup Window-Ops
اما اگر خط تیره را با یک فاصله جایگزین کنید، به نقلقول نیاز خواهید داشت:
Popup "Window Ops"
نویسههای نقلقول پشتیبانیشده عبارتاند از نقلقول دوگانه (double quotes)، نقلقول تکی (single quotes) و نقلقول تکی وارونه (reverse single quotes). با هر سه نوع نقلقول به یک شیوه رفتار میشود. نویسههای منفرد را میتوان با یک backslash پیشین نقلقول کرد. نقلقول کردن نویسههای منفرد حتی درون دیگر انواع نقلقول نیز کار میکند.
گسترش دستور (COMMAND EXPANSION)
هر زمان که یک خط فرمان fvwm اجرا میشود، fvwm گسترش پارامتر (parameter expansion) را انجام میدهد. یک پارامتر عبارت است از یک '$' که به دنبال آن کلمهای محصور در قلابها ($[...]) یا یک نویسهٔ ویژهٔ منفرد قرار میگیرد. اگر fvwm با یک پارامتر بدون نقلقول در خط فرمان مواجه شود، آن را به رشتهای که توسط نام پارامتر مشخص شده گسترش میدهد. پارامترهای ناشناخته دستنخورده باقی میمانند. گسترش پارامتر پیش از بررسی نقلقولها انجام میشود. برای داشتن یک '$' واقعی از "$$" استفاده کنید.
اگر پیش از یک دستور یک '-' قرار گیرد، گسترش پارامتر انجام نمیشود. این قاعده برای دستوری اعمال میشود که بلافاصله پس از '-' میآید، یعنی جایی که گسترش بهطور معمول در آن صورت میگرفت. هنگام استفاده همراه با دیگر دستورهای پیشوندی، این علامت باید پیش از پیشوند دیگر اضافه شود.
مثال:
Pick -Exec exec xmessage '$[w.name]'
یک کادر گفتگوی xmessage را با "$[w.name]" بهصورت گسترشنیافته باز میکند.
متغیرهای طولانیتر ممکن است حاوی متغیرهای دیگری درون نام خود باشند که پیش از متغیر بیرونی گسترش مییابند.
در نسخههای پیشین fvwm، برخی از متغیرهای تکحرفی پشتیبانی میشدند. اکنون استفاده از آنها منسوخ شده است، زیرا مشکلات متعددی ایجاد میکنند. باید بهجای آنها از جایگزینهای طولانیتر استفاده کنید.
مثال:
# Print the current desk number, horizontal page number # and the window's class (unexpanded here, no window). Echo $[desk.n] $[page.nx] $[w.class]
نکته: اگر دستور بیرون از زمینهٔ (context) یک پنجره فراخوانی شود، بهجای نام کلاس، "$[w.class]" را چاپ میکند. معمولاً قرار داشتن نشانگر ماوس روی یک پنجره برای داشتن زمینهٔ پنجره کافی نیست. برای اجبار به استفاده از پنجرهای که فوکوس دارد، میتوان از دستور Current استفاده کرد:
Current Echo $[desk.n] $[page.nx] $[w.class]
پارامترهای شناختهشده برای fvwm عبارتاند از:
$$
$.
$0 تا $9
$*
$[n]
$[n-m]
$[n-]
$[*]
$[version.num]
$[version.info]
$[version.line]
$[vp.x] $[vp.y] $[vp.width] $[vp.height]
$[dwa.x] $[dwa.y] $[dwa.width] $[dwa.height]
$[desk.count]
$[desk.n]
$[desk.name<n>]
$[desk.width] $[desk.height]
$[desk.pagesx] $[desk.pagesy]
$[page.nx] $[page.ny]
$[w.id]
$[w.name] $[w.iconname] $[w.class] $[w.resource] $[w.visiblename] $[w.iconfile] $[w.miniiconfile] $[w.iconfile.svgopts] $[w.miniiconfile.svgopts]
توجه داشته باشید که ۵ متغیر اول ممکن است شامل هر نوع نویسهای باشند، بنابراین این متغیرها نقلقولگذاری میشوند. به این معنی که مقدار با نویسههای نقلقول تکی احاطه شده و هر نقلقول تکی موجود در آن با یک بکاسلش پیشوندگذاری میشود. این امر تضمین میکند که دستوراتی مانند:
Style $[w.resource] Icon norm/network.png
صرفنظر از هرگونه نماد خاصی که مقدار ممکن است شامل آن باشد، مانند فاصلهها و انواع مختلف نقلقول، به درستی کار کنند.
در مورد نام نمایان پنجره، این مقداری است که از عنوان لفظی پنجره نمایشدادهشده در نوار عنوان برگردانده میشود. معمولاً این مقدار پس از گسترش همان $[w.name] خواهد بود، اگرچه در صورت استفاده از IndexedWindowName این تمایز مفیدتر است، و امکان ارجاع به پنجره خاص را از طریق نام نمایان آن برای گنجاندن در مواردی مانند دستورات Style فراهم میکند.
$[w.x] $[w.y] $[w.width] $[w.height]
$[w.pagex] $[w.pagey]
$[w.desk]
$[w.layer]
$[w.screen]
$[cw.x] $[cw.y] $[cw.width] $[cw.height]
$[i.x], $[it.x], $[ip.x] $[i.y], $[it.y], $[ip.y] $[i.width], $[it.width], $[ip.width] $[i.height], $[it.height], $[ip.height]
$[pointer.x] $[pointer.y]
$[pointer.wx] $[pointer.wy]
$[pointer.cx] $[pointer.cy]
$[pointer.screen]
این متغیر منسوخ شده است؛ در عوض از $[monitor.current] استفاده کنید.
$[monitor.<n>.x], $[monitor.<n>.y], $[monitor.<n>.width], $[monitor.<n>.height], $[monitor.<n>.desk], $[monitor.<n>.pagex], $[monitor.<n>.pagey] $[monitor.primary], $[monitor.prev_primary], $[monitor.current], $[monitor.prev] $[monitor.output], $[monitor.number] $[monitor.count], $[monitor.<n>.prev_desk], $[monitor.<n>.prev_pagex], $[monitor.<n>.prev_pagey]
مقدار <n> باید یک نام خروجی معتبر xrandr(1) باشد.
مقدار "x" موقعیت x نمایشگر را برمیگرداند؛ "y" موقعیت y نمایشگر را برمیگرداند؛ "width" عرض نمایشگر (به پیکسل) را برمیگرداند؛ "height" ارتفاع نمایشگر (به پیکسل) را برمیگرداند.
مقدار "number" موقعیت نمایشگر را در درخت برمیگرداند. بخش RANDR SUPPORT را ببینید.
مقدار "current" همانند متغیر منسوخشدهی $[screen.pointer] است؛ نمایشگری که اشارهگر ماوس روی آن قرار دارد.
مقدار "prev" نمایشگری را که قبلاً فوکوس داشته است برمیگرداند، یا اگر نمایشگری وجود نداشته باشد، رشته خالی برمیگرداند.
مقدار "count" تعداد نمایشگرهای فعال را برمیگرداند.
مقدار "desk" میزکار فعلی نمایشدادهشده در نمایشگر ارجاعشده را برمیگرداند.
مقدار "pagex" صفحه X را در نمایشگر ارجاعشده برمیگرداند.
مقدار "pagey" صفحه Y را در نمایشگر ارجاعشده برمیگرداند. «primary» نام خروجیای است که از طریق xrandr(1) به عنوان اصلی تنظیم شده است.
«prev_primary» نام خروجیای است که نمایشگر اصلی پیشین بوده است.
«prev_desk» میزکار پیشین را در نمایشگر ارجاعشده بازمیگرداند.
«prev_pagex» صفحهٔ X پیشین را در نمایشگر ارجاعشده بازمیگرداند.
«prev_pagey» صفحهٔ Y پیشین را در نمایشگر ارجاعشده بازمیگرداند.
$[screen]
$[screen.count]
این متغیر منسوخ شده است؛ در عوض از $[monitor.count] استفاده کنید.
$[fg.cs<n>] $[bg.cs<n>] $[hilight.cs<n>] $[shadow.cs<n>] $[fgsh.cs<n>]
اگر .lighten<p> یا .darken<p> به انتهای پارامترها افزوده شود، آنها در عوض با رنگی جایگزین میشوند که به اندازهٔ درصد <p> (بین 0 تا 100) از رنگ تعریفشده در colorset <n> روشنتر یا تیرهتر است. برای مثال «$[bg.cs3.lighten15]» به رنگ پسزمینهٔ colorset 3 بسط یافته و سپس 15٪ روشنتر میشود (در قالب rgb:rrrr/gggg/bbbb).
اگر .hash به انتها افزوده شود، خروجی رنگ از قالب #rrggbb استفاده خواهد کرد (به جای rgb:rrrr/gggg/bbbb). برای مثال، $[bg.cs3.hash] یا $[bg.cs3.lighten15.hash].
لطفاً برای جزئیات دربارهٔ مجموعه رنگها به بخش Colorsets مراجعه کنید.
$[math.+.<x>,<y>] $[math.-.<x>,<y>] $[math.*.<x>,<y>] $[math./.<x>,<y>] $[math.%.<x>,<y>] $[math.^.<x>,<y>] $[math.<.<x>,<y>] $[math.>.<x>,<y>]
ویرگول در «<x>,<y>» برای در نظر گرفتن امکان استفاده از اعداد اعشاری در آینده است. تمام عملیات از ریاضیات اعداد صحیح زبان C استفاده میکنند. نتیجهٔ تقسیم صحیح، خارجقسمت آن است. از عملگر باقیمانده میتوان برای به دست آوردن باقیماندهٔ تقسیم صحیح استفاده کرد. توجه داشته باشید که عملگر باقیماندهٔ C برای مقادیر منفی، باقیماندهٔ منفی بازمیگرداند. در نهایت، در صورتی که <y> منفی باشد، عملیات به توان رساندن مقدار 1 را بازمیگرداند.
$[schedule.last]
$[schedule.next]
$[cond.rc]
$[func.context]
Mouse 3 FS N WindowShade $$[func.context]
$[debuglog.state]
$[gt.str]
$[infostore.key]
$[...]
نمونههایی از این مورد را میتوان در توضیحات دستور AddToFunc یافت.
برای دستیابی به جلوههای پیچیدهتر، fvwm دارای تعدادی دستور است که تواناییهای اسکریپتنویسی آن را بهبود میبخشند. اسکریپتها میتوانند با Read از یک فایل، با PipeRead از خروجی یک دستور خوانده شوند یا با دستور AddToFunc بهصورت یک تابع پیچیده نوشته شوند. برای علاقهمندان، بخش ۷ از FAQ مربوط به fvwm برخی از کاربردهای واقعی اسکریپتنویسی را نشان میدهد. لطفاً برای جزئیات به بخشهای User Functions and Shell Commands و Conditional Commands مراجعه کنید. یک هشدار: در هنگام اجرای توابع پیچیده، fvwm باید تمامی ورودیها را از اشارهگر ماوس دریافت کند (اشارهگر در اصطلاح X اصطلاحاً «تسخیر» یا "grabbed" میشود). هیچ برنامه دیگری نمیتواند در هنگام اجرای یک تابع، ورودیای از اشارهگر دریافت کند. این امر میتواند برخی برنامهها را دچار سردرگمی کند. برای نمونه، برنامه xwd هنگامی که از یک تابع پیچیده اجرا شود، از گرفتن اسکرینشات خودداری میکند. برای دستیابی به عملکرد یکسان، میتوانید بهجای آن از دستور Read یا PipeRead استفاده کنید.
منوها (MENUS)
پیش از آنکه بتوان منویی را باز کرد، باید با استفاده از دستور AddToMenu با آیتمهای منو پر شده و با دستور Key، PointerKey یا Mouse به یک کلید یا دکمه ماوس مقید (bind) شود (راههای بسیار دیگری نیز برای فراخوانی منو وجود دارد). این کار معمولاً در فایل پیکربندی انجام میشود.
منوهای fvwm در ظاهر و عملکرد (look and feel) بهشدت پیکربندیپذیر هستند. حتی جزئیترین نکات ظریف را میتوان مطابق با سلیقه کاربر تغییر داد، از جمله فونت آیتمهای منو، پسزمینه، تأخیرهای پیش از بالا آمدن (popup) زیرمنوها، تولید پویای منوها و بسیاری از ویژگیهای دیگر. لطفاً برای اطلاعات بیشتر به دستور MenuStyle مراجعه کنید.
انواع منوها (Types of Menus)
منوهای بازشو (Popup menus) میتوانند بهتنهایی در هر کجای صفحه نمایش یا متصل به بخشی از یک پنجره ظاهر شوند. دستور Popup منوهای بازشو را باز میکند. اگر منوی بازشو در حالی که دکمه ماوس پایین نگه داشته شده فراخوانی شده باشد، با رها شدن دکمه بسته میشود. سپس آیتم زیر اشارهگر فعال شده و عمل مرتبط با آن اجرا میگردد.
منوهای عادی (Normal menus) بسیار مشابهاند، اما تا حدی گذرا هستند. هنگامی که با کلیک کردن روی یک دکمه ماوس فراخوانی شوند، باز میمانند و بدون نگهداشتن هیچ دکمهای میتوان در آنها پیمایش کرد. اما اگر با فشردن دکمه و بهدنبال آن حرکت ماوس فراخوانی شوند، دقیقاً مانند یک منوی بازشو رفتار میکنند. دستور Menu منوهای عادی را ایجاد میکند.
«زیرمنوها» (Sub menus) منوهای درون منوهای دیگر هستند. وقتی آیتمی از منو که عمل آن دستور Popup است انتخاب شود، منوی نامبرده بهعنوان زیرمنویی از والد باز میشود. هر نوع منویی میتواند دارای زیرمنو باشد.
«منوهای جداشدنی» (Tear off menus) منوهایی هستند که از بافتار اصلی خود روی میزکار مانند یک پنجره عادی «جدا شدهاند». آنها از منوهای دیگر با فشردن کلیدهای خاص یا توالیهای ماوس یا با دستور TearMenuOff از درون یک منو ایجاد میشوند.
ساختار منو (Menu Anatomy)
علاوه بر این، اگر منو طولانیتر از آن باشد که در صفحه نمایش جا شود، آیتمهای اضافی در یک منوی ادامهدار قرار میگیرند و یک زیرمنو با رشته «More...» در پایین منو قرار داده میشود. رشته «More...» از تنظیمات محلی (locale) پیروی میکند.
در نهایت، ممکن است تصویری در امتداد هر یک از دو طرف منو وجود داشته باشد (یک «side bar» یا نوار کناری).
پیمایش منو (Menu Navigation)
پیمایش با ماوس (Mouse Navigation)
چرخاندن چرخ ماوس روی یک منو، بسته به سبک منوی MouseWheel، یا اشارهگر را در طول منو میچرخاند (پیشفرض)، یا منوی زیر اشارهگر را پیمایش (اسکرول) میکند یا طوری عمل میکند که گویی روی منو کلیک شده است.
کلیک کردن روی یک آیتم انتخابشده آن را فعال میکند - اینکه دقیقاً چه رخ میدهد به نوع آیتم بستگی دارد.
کلیک کردن روی یک عنوان، جداکننده، نوار کناری (side bar)، یا خارج از منو، منو را میبندد (استثنا: منوهای جداشده را نمیتوان از این طریق بست). فشردن دکمه ۲ ماوس روی عنوان منو یا فعال کردن نوار جداکننده (tear off bar)، یک منوی جداشده از منوی فعلی ایجاد میکند. کلیک روی یک آیتم منوی عادی دستوری را که به آن مقید شده فراخوانی میکند، و کلیک روی یک آیتم زیرمنو یا تمام منوهای باز را میبندد و زیرمنو را جایگزین آنها میکند، یا منو را تثبیت (post) مینماید (پیشفرض).
تثبیت منوها (Posting menus) برای تسهیل پیمایش با ماوس طراحی شده است. هنگامی که یک زیرمنو تثبیت شود، تنها آیتمهای همان زیرمنو را میتوان انتخاب کرد. اگر اشارهگر تمایل به خارج شدن از منو داشته باشد، این قابلیت میتواند برای پیمایش منو بسیار مفید باشد. برای لغو تثبیت منو و بازگشت به عملکرد عادی، یا روی همان آیتم زیرمنو کلیک کنید یا هر کلیدی را فشار دهید.
پیمایش با صفحهکلید (Keyboard Navigation)
آیتمها را میتوان مستقیماً با فشردن یک کلید میانبر (hotkey) که برای هر آیتم منو بهصورت جداگانه قابل پیکربندی است انتخاب کرد. کلید میانبر با خط کشیدن زیر آن در برچسب آیتم منو مشخص میشود. با سبک منوی AutomaticHotkeys، fvwm بهطور خودکار به تمام آیتمهای منو کلید میانبر اختصاص میدهد.
پایهایترین کلیدها برای پیمایش در منوها کلیدهای مکاننما (cursor keys) هستند (حرکت به اندازه یک آیتم به بالا یا پایین، ورود یا خروج از یک زیرمنو)،
(فعال کردن آیتم) و
(بستن منو). بهطور پیشفرض، کلیدهای متعدد دیگری نیز میتوانند برای پیمایش در منوها استفاده شوند:
کلیدهای Enter، Return و Space آیتم فعلی را فعال میکنند.
کلیدهای Escape، Delete و Ctrl-G از دنباله فعلی منوها خارج میشوند یا یک منوی جداشده را از بین میبرند.
کلیدهای J، N، Cursor-Down، Tab، Meta-Tab و Ctrl-F به آیتم بعدی میروند.
کلیدهای K، P، Cursor-Up، Shift-Tab، Shift-Meta-Tab و Ctrl-B به آیتم قبلی میروند.
کلیدهای L، Cursor-Right و F وارد یک زیرمنو میشوند.
کلیدهای H، Cursor-Left و B به منوی قبلی بازمیگردند.
کلیدهای Ctrl-Cursor-Up، Ctrl-K، Ctrl-P، Shift-Ctrl-Meta-Tab و Page-Up پنج آیتم به بالا میروند.
کلیدهای Ctrl-Cursor-Down، Ctrl-J، Ctrl-N، Ctrl-Meta-Tab و Page-Down پنج آیتم به پایین میروند.
کلیدهای Shift-P، Home، Shift-Cursor-Up و Ctrl-A به نخستین آیتم میروند.
کلیدهای Shift-N، End، Shift-Cursor-Down و Ctrl-E به آخرین آیتم میروند.
کلیدهای Meta-P، Meta-Cursor-Up، Ctrl-Cursor-Left و Shift-Ctrl-Tab درست به زیر جداکننده بعدی به سمت بالا میروند.
کلیدهای Meta-N، Meta-Cursor-Down، Ctrl-Cursor-Right و Ctrl-Tab درست به زیر جداکننده بعدی به سمت پایین میروند.
کلید Insert در صورت وجود، زیرمنوی «More...» را باز میکند.
کلید Backspace منو را جدا میکند.
قیدهای منو (Menu Bindings)
دستور MenuClose از دنباله فعلی منوها خارج میشود یا یک منوی جداشونده را از بین میبرد.
دستور MenuCloseAndExec از دنباله فعلی منوها خارج میشود یا یک منوی جداشونده را از بین برده و بقیه خط را به عنوان یک دستور اجرا میکند.
دستور MenuEnterContinuation زیرمنوی «More...» را در صورت وجود باز میکند.
دستور MenuEnterSubmenu وارد یک زیرمنو میشود.
دستور MenuLeaveSubmenu به منوی پیشین بازمیگردد.
دستور MenuMoveCursor n [m] انتخاب را به مورد دیگری منتقل میکند. اگر آرگومان نخست صفر باشد، آرگومان دوم یک مورد مطلق در منو را برای انتقال نشانگر مشخص میکند. موارد منفی از انتهای منو شمرده میشوند. اگر آرگومان نخست غیرصفر باشد، آرگومان دوم باید حذف شود، و آرگومان نخست تغییر نسبی را در مورد انتخابشده مشخص میکند. موقعیتها میتوانند با پسوند 's' همراه باشند تا مشخص شود موارد تنها باید به نخستین موارد پس از جداکنندهها اشاره کنند.
دستور MenuCursorLeft با سبک منوی SubmenusLeft وارد یک زیرمنو میشود، و با سبک منوی SubmenusRight به منوی پیشین بازمیگردد.
دستور MenuCursorRight با سبک منوی SubmenusRight وارد یک زیرمنو میشود، و با سبک منوی SubmenusLeft به منوی پیشین بازمیگردد.
دستور MenuSelectItem عمل مربوط به مورد منو را اجرا میکند.
دستور MenuScroll n پیمایش منو را مطابق با سبک منوی MouseWheel با n مورد انجام میدهد. فاصله میتواند پسوند 's' داشته باشد تا نشان دهد که موارد فقط باید به نخستین موارد پس از جداکنندهها اشاره کنند.
دستور MenuTearOff یک منوی معمولی را به یک منوی «جداشده» تبدیل میکند. برای جزئیات به Tear Off Menus مراجعه کنید.
Tear Off Menus
در منو، یا فعال کردن نوار جداکننده آن (یک نوار افقی با خطچین). نوارهای جداکننده باید مانند هر مورد دیگر با اختصاص دستور TearMenuOff به آنها، به منو افزوده شوند.
عملیات داخلی جدا کردن منو را میتوان با تعریفزدایی از عملیات منوی داخلیِ متصل به جدا کردن بازنویسی کرد. برای حذف انتساب داخلی دکمه ۲ ماوس، از این دستور استفاده کنید:
Mouse 2 MT A -
و برای حذف انتساب داخلی کلید backspace، استفاده کنید از:
Key Backspace M A -
برای جزئیات بیشتر در مورد نحوه انتساب سایر کلیدها برای جدا کردن منو، بخش Menu Bindings را ببینید.
توجه داشته باشید که پیش از fvwm 2.5.20، انتسابهای ماوس برای جدا کردن منو به روش دیگری بازتعریف میشدند که دیگر کار نمیکند.
پنجره حاوی منو مانند هر پنجره دیگری جایگذاری میشود. اگر ظاهر شدن منوهای جداشونده در موقعیتهای تصادفی روی صفحه برایتان گیجکننده است، این خط را در فایل پیکربندی خود قرار دهید:
Style fvwm_menu UsePPosition
برای حذف حاشیهها و دکمهها از یک منوی جداشونده اما حفظ عنوان منو، میتوانید از این دستورات استفاده کنید:
Style fvwm_menu !Button 0, !Button 1 Style fvwm_menu !Button 2, !Button 3 Style fvwm_menu !Button 4, !Button 5 Style fvwm_menu !Button 6, !Button 7 Style fvwm_menu !Button 8, !Button 9 Style fvwm_menu Title, HandleWidth 0
یک منوی جداشونده ترکیبی میان یک پنجره و یک منو است. منو توسط یک پنجره بلعیده میشود و عنوان آن برداشته شده و در عنوان پنجره نمایش مییابد. مزیت اصلی این است که منو دائمی میشود - فعال کردن یک مورد، منو را نمیبندد. بنابراین، میتوان چندین بار بدون باز کردن مجدد از آن استفاده کرد. برای بستن چنین منویی، پنجره آن را ببندید یا کلید Escape را فشار دهید.
منوهای جداشونده تا حدودی متفاوت از منوها و پنجرههای معمولی رفتار میکنند. آنها فوکوس صفحهکلید را دریافت نمیکنند، اما تا زمانی که نشانگر روی یکی از آنها قرار دارد، تمام کلیدهای فشردهشده به منو ارسال میشوند. سایر انتسابهای کلید fvwm تا زمانی که نشانگر درون منوی جداشونده یا یکی از زیرمنوهای آن باشد، غیرفعال هستند. هنگامی که نشانگر این ناحیه را ترک کند، تمام زیرمنوها بلافاصله بسته میشوند. توجه داشته باشید پنجرهای که حاوی یک منوی جداشونده است هرگز بهگونهای که گویی فوکوس دارد برجسته نمیشود.
یک منوی جداشونده نسخهای مستقل از منویی است که از آن سرچشمه گرفته است. به همین دلیل، افزودن موارد به آن منو یا تغییر سبک منوی آن تأثیری بر آن نخواهد داشت.
برای ایجاد یک منوی جداشونده بدون نیاز به باز کردن اولیه منوی عادی، گزینه TearOffImmediately میتواند به دستور Menu یا Popup افزوده شود.
AddToMenu menu-name [menu-label action]
AddToMenu Utilities Utilities Title + Xterm Exec exec xterm -e tcsh + Rxvt Exec exec rxvt + "Remote Logins" Popup Remote-Logins + Top Exec exec rxvt -T Top -n Top -e top + Calculator Exec exec xcalc + Xman Exec exec xman + Xmag Exec exec xmag + emacs Exec exec xemacs + Mail MailFunction xmh "-font fixed" + "" Nop + Modules Popup Module-Popup + "" Nop + Exit Fvwm Popup Quit-Verify
منو میتواند به این شکل فراخوانی شود:
Mouse 1 R A Menu Utilities Nop
یا
Mouse 1 R A Popup Utilities
هیچ نمادی برای پایان منو وجود ندارد. نیازی نیست منوها در یک بخش پیوسته از فایل config تعریف شوند. بخش داخل گیومه (یا کلمه اول) در مثالهای بالا، برچسب منو (menu label) است که هنگام باز شدن منو توسط کاربر نمایش داده میشود. بخش باقیمانده، یک دستور fvwm است که در صورت انتخاب آن آیتم منو توسط کاربر، اجرا میشود. یک menu-label خالی ("") و تابع Nop برای درج یک خط جداکننده در منو استفاده میشوند.
کلمات کلیدی DynamicPopUpAction و DynamicPopDownAction هنگامی که به عنوان نام یک آیتم منو به کار روند، معنای ویژهای دارند. کنش (action) پس از کلمه کلیدی، هر زمان که منو باز یا بسته شود اجرا میگردد. از این طریق میتوانید منوهای پویا پیادهسازی کنید. حتی امکان تخریب خود منو با DestroyMenu و بازسازی مجدد آن از ابتدا وجود دارد. هنگامی که منو تخریب شد (مگر اینکه هنگام تخریب منو از گزینه recreate استفاده کرده باشید)، اضافه کردن دوباره کنش پویا را فراموش نکنید.
نکته: کنشهایی را که نیاز به تعامل کاربر دارند فعال نکنید. ممکن است با شکست مواجه شوند و منوهای شما را بههم بریزند. دستور Silent را ببینید.
هشدار: دستورات MenuStyle را به عنوان کنشهای منوی پویا صادر نکنید. احتمال زیادی وجود دارد که این کار باعث کرش کردن fvwm شود.
کلمه کلیدی Greyed همچنان آیتم منو را نمایش میدهد، اما آن را خاکستری کرده و گزینه را غیرقابل انتخاب میسازد.
چندین اسکریپت با قابلیت پیکربندی برای تولید خودکار منو همراه با fvwm نصب میشوند. آنها صفحههای راهنمای (man page) مخصوص به خود را دارند. برخی از آنها، بهویژه fvwm-menu-directory و fvwm-menu-desktop، میتوانند به همراه DynamicPopupAction برای ایجاد فهرستی از دایرکتوریها یا برنامههای GNOME/KDE استفاده شوند.
مثال (مرورگر فایل):
# You can find the shell script fvwm_make_browse_menu.sh # in the utils/ directory of the distribution. AddToMenu BrowseMenu + DynamicPopupAction PipeRead \ 'fvwm_make_browse_menu.sh BrowseMenu'
مثال (منوی تصاویر):
# Build a menu of all .jpg files in # $HOME/Pictures AddToMenu JpgMenu foo title + DynamicPopupAction Function MakeJpgMenu AddToFunc MakeJpgMenu + I DestroyMenu recreate JpgMenu + I AddToMenu JpgMenu Pictures Title + I PipeRead 'for i in $HOME/Pictures/*.jpg; \ do echo AddToMenu JpgMenu "`basename $i`" Exec xv $i; done'
کلمه کلیدی MissingSubmenuFunction معنای مشابهی دارد. هر زمان که بخواهید زیرمنویی را که وجود ندارد باز کنید، اجرا میشود. با این تابع میتوانید منوها را در حین اجرا (on the fly) تعریف کرده و تخریب کنید. پس از کلمه کلیدی میتوانید از هر دستوری استفاده کنید، اما اگر نام یک آیتم (که یک زیرمنو است) تعریفشده با AddToFunc به دنبال آن بیاید، fvwm این دستور را اجرا میکند:
Function <function-name> <submenu-name>
یعنی نام به عنوان نخستین آرگومان به تابع ارسال میشود و با "$0" قابل ارجاع است.
اسکریپت fvwm-menu-directory که پیشتر ذکر شد، میتواند با MissingSubmenuFunction برای ایجاد یک فهرست بازگشتی و بهروز از دایرکتوری استفاده شود.
مثال:
# There is another shell script fvwm_make_directory_menu.sh # in the utils/ directory of the distribution. To use it, # define this function in your configuration file: DestroyFunc MakeMissingDirectoryMenu AddToFunc MakeMissingDirectoryMenu + I PipeRead fvwm_make_directory_menu.sh $0 DestroyMenu SomeMenu AddToMenu SomeMenu + MissingSubmenuFunction MakeMissingDirectoryMenu + "Root directory" Popup /
این پیادهسازی دیگری از مرورگر فایل است که از زیرمنوها برای زیردایرکتوریها استفاده میکند.
میتوان از عناوین درون منو استفاده کرد. اگر گزینه top را پس از کلمه کلیدی Title اضافه کنید، عنوان به بالای منو افزوده میشود. اگر از پیش عنوانی وجود داشته باشد، بازنویسی میشود.
AddToMenu Utilities Tools Title top
تمام متن تا نخستین کلید Tab در برچسب منو، در سمت چپ منو تراز میشود، تمام متن پس از اولین Tab، در ستون دوم به صورت چپچین قرار میگیرد و تمام متنهای بعد از آن در ستون سوم به صورت راستچین چیده میشوند. تمام کلیدهای Tab دیگر با فاصله جایگزین میشوند. توجه داشته باشید که میتوانید این قالببندی را با گزینه ItemFormat از دستور MenuStyle تغییر دهید.
اگر برچسب منو شامل یک علامت امپرسند ('&') باشد، نویسه بعدی به عنوان کلید میانبر (hot-key) برای آن آیتم منو در نظر گرفته میشود. کلیدهای میانبر در برچسب زیرخطدار نمایش داده میشوند. برای درج یک '&' واقعی، "&&" را وارد کنید. فشردن کلید میانبر، بین فهرست آیتمهای منو که دارای این کلید میانبر هستند پیمایش میکند، یا در صورتی که تنها یک آیتم با این کلید وجود داشته باشد، آن را انتخاب میکند..sp اگر menu-label شامل زیررشتهای باشد که با علامتهای ستاره جدا شده است، متن بین ستارهها به عنوان نام یک فایل تصویری برای درج در منو در نظر گرفته میشود. برای نوشتن یک '' واقعی، "*" را درج کنید. برای مثال
+ Calculator*xcalc.xpm* Exec exec xcalc
یک آیتم منو با برچسب "Calculator" به همراه تصویری از یک ماشینحساب در بالای آن درج میکند. مورد زیر:
+ *xcalc.xpm* Exec exec xcalc
برچسب "Calculator" را حذف میکند، اما تصویر را باقی میگذارد.
اگر menu-label شامل زیررشتهای باشد که با علامتهای درصد احاطه شده است، متن میان علامتهای درصد به عنوان نام یک فایل تصویری (اصطلاحاً یک mini icon) برای درج در سمت چپ برچسب منو در نظر گرفته میشود. یک mini icon دوم نیز که در سمت راست منو رسم میشود میتواند به همین روش تعیین شود. برای نوشتن یک '%' واقعی، "%%" را درج کنید. برای مثال
+ Calculator%xcalc.xpm% Exec exec xcalc
یک آیتم منو با برچسب "Calculator" به همراه تصویری از یک ماشینحساب در سمت چپ آن درج میکند. مورد زیر:
+ %xcalc.xpm% Exec exec xcalc
برچسب "Calculator" را حذف میکند، اما تصویر را باقی میگذارد. تصاویر استفادهشده در این قابلیت باید کوچک باشند (احتمالاً 16x16).
اگر menu-name (و نه برچسب) شامل زیررشتهای باشد که با علامتهای اتساین ('@') جدا شده است، انتظار میرود متن میان آنها نام یک فایل تصویری برای ترسیم در امتداد سمت چپ منو (یک side pixmap) باشد. ممکن است بخواهید به جای آن از گزینه SidePic در دستور MenuStyle استفاده کنید. برای نوشتن یک '@' واقعی، "@@" را درج کنید. برای مثال
AddToMenu StartMenu@linux-menu.xpm@
منویی با یک تصویر در گوشه پایین سمت چپ آن ایجاد میکند.
اگر menu-name همچنین شامل زیررشتهای محصور در '^'ها باشد، متن میان '^'ها به عنوان نام یک رنگ X11 در نظر گرفته شده و ستونی که شامل تصویر کناری است با آن رنگ، رنگآمیزی میشود. شما میتوانید این رنگ را برای یک سبک منو با استفاده از گزینه SideColor در دستور MenuStyle تنظیم کنید. برای نوشتن یک '^' واقعی، "^^" را درج کنید. مثال:
AddToMenu StartMenu@linux-menu.xpm@^blue^
منویی با یک تصویر در گوشه پایین سمت چپ آن ایجاد کرده و ناحیهای از منو را که تصویر در آن قرار دارد با رنگ آبی رنگآمیزی میکند.
در تمام موارد بالا، نام منوی حاصل همان نام مشخصشده است که زیررشتههای میان جداکنندههای مختلف از آن حذف شدهاند.
DestroyMenu [recreate] menu
DestroyMenu Utilities
Title
Menu menu-name [position] [double-click-action]
اگر منو هم با فشردن کلید فراخوانی شده و هم بسته شده باشد، نشانگر به مکانی که هنگام فراخوانی منو در آن قرار داشت بازگردانده میشود.
آرگومانهای position امکان قرارگیری منو را در جایی از صفحه فراهم میکنند؛ برای مثال در مرکز بخش قابل مشاهده صفحه یا بالای یک نوار عنوان. اساساً سازوکار آن بدین صورت است: شما یک context-rectangle و یک آفست نسبت به این مستطیل را مشخص میکنید که بهوسیله آن، گوشه بالا-چپ منو از گوشه بالا-چپ مستطیل جابهجا میشود. آرگومانهای position از چندین بخش تشکیل شدهاند:
[context-rectangle] x y [special options]
مستطیل زمینه (context-rectangle) میتواند یکی از موارد زیر باشد:
Root
Monitor
Mouse
Window
Interior
Title
Button<n>
Icon
Menu
Item
Context
This
Rectangle <_geometry_>
اگر context-rectangle حذف شود یا نامعتبر باشد (برای مثال "item" روی یک پنجره)، مقدار پیشفرض "Mouse" است. توجه داشته باشید که همه این موارد در تمام شرایط معنا ندارند (برای مثال "Icon" هنگامی که نشانگر روی یک منو باشد).
مقادیر آفست x و y مشخص میکنند که منو چه مقدار از موقعیت پیشفرض خود جابهجا شود. بهطور پیشفرض، مقدار عددی دادهشده به عنوان درصدی از پهنا (ارتفاع) مستطیل زمینه تفسیر میشود، اما با یک 'm' در انتها، بهجای آن از پهنا (ارتفاع) منو استفاده میشود. علاوه بر این، یک 'p' در انتها، تفسیر را به پیکسل تغییر میدهد.
به جای یک مقدار واحد میتوانید از فهرستی از مقادیر استفاده کنید. همه اعداد اضافی پس از عدد نخست، با علامت خود از عدد پیش از خود جدا میشوند. از هیچ جداکننده دیگری استفاده نکنید.
اگر پیشوند "'o<number>" که در آن <number> یک عدد صحیح است به x یا y اضافه شود، منو و مستطیل پیش از اعمال هر آفست دیگری، طوری جابهجا میشوند که در موقعیت مشخصشده همپوشانی داشته باشند. منو و مستطیل بهگونهای قرار میگیرند که پیکسل واقع در درصد <number> از پهنا/ارتفاع مستطیل، دقیقاً روی پیکسل واقع در درصد <number> از پهنا/ارتفاع منو باشد. بنابراین "o0" بدین معناست که حاشیههای بالا/چپ منو و مستطیل همپوشانی دارند، با "o100" حاشیههای پایین/راست همپوشانی دارند و اگر از "o50" استفاده کنید نسبت به یکدیگر متمرکز میشوند (آن را امتحان کنید تا ببینید بسیار سادهتر از این توضیحات است). پیشفرض "o0" است. پیشوند "o<number>" مخففی برای "+<number>-<number>m" است.
پیشوند 'c' معادل با "o50" است. مثالها:
# window list in the middle of the screen WindowList Root c c # menu to the left of a window Menu name window -100m c+0 # popup menu 8 pixels above the mouse pointer Popup name mouse c -100m-8p # somewhere on the screen Menu name rectangle 512x384+1+1 +0 +0 # centered vertically around a menu item AddToMenu foobar-menu + "first item" Nop + "special item" Popup "another menu" item +100 c + "last item" Nop # above the first menu item AddToMenu foobar-menu + "first item" Popup "another menu" item +0 -100m
توجه داشته باشید که میتوانید یک زیرمنو را بسیار دورتر از منوی جاری قرار دهید، بهطوری که نتوانید بدون ترک کردن منو با ماوس به آن برسید. اگر نشانگر در جهت کلی زیرمنو منوی جاری را ترک کند، منو باز میماند.
Special options
برای ایجاد یک منوی جداشونده (tear off) بدون باز کردن منوی عادی، گزینه TearOffImmediately را اضافه کنید. معمولاً منو پیش از جدا شدن، برای کسری از ثانیه در حالت عادی باز میشود. از آنجا که عمل جدا شدن، منو را مانند هر پنجره دیگری قرار میدهد، موقعیت باید بهصراحت مشخص شود:
# Forbid fvwm to place the menu window Style <name of menu> UsePPosition # Menu at top left corner of screen Menu Root 0p 0p TearOffImmediately
سبکهای منوی Animated و Mwm یا Win ممکن است منو را به جای دیگری روی صفحه منتقل کنند. اگر این را نمیخواهید میتوانید Fixed را به عنوان یک گزینه اضافه کنید. این وضعیت ممکن است به عنوان مثال زمانی رخ دهد که بخواهید منو همیشه در گوشه بالا-راست صفحه باشد..sp مایلید هنگامی که روی آیتم یک منو کلیک میکنید، منو در کجا ظاهر شود؟ حالت پیشفرض قرار دادن عنوان زیر مکاننما است، اما اگر میخواهید در جایی باشد که آرگومانهای موقعیت تعیین میکنند، از گزینه SelectInPlace استفاده کنید. اگر میخواهید نشانگر روی عنوان منو قرار گیرد، از SelectWarp نیز استفاده کنید. توجه داشته باشید که این گزینهها تنها در صورتی اعمال میشوند که گزینه PopupAsRootMenu در MenuStyle استفاده شده باشد.
نشانگر هر زمان که با باز شدن زیرمنو روی یکی از آیتمها قرار بگیرد، به سمت عنوان زیرمنو جهش مییابد (سبک منوی fvwm) یا اصلاً هرگز به سمت عنوان جهش پیدا نمیکند (سبکهای منوی Mwm یا Win). با استفاده از گزینه WarpTitle (NoWarp) میتوانید هر زمان که زیرمنو باز میشود، جهش نشانگر را اجبار (یا منع) کنید.
توجه داشته باشید که special-options با یک منوی معمولی که آرگومانهای موقعیت دیگری ندارد نیز کار میکنند.
Popup PopupName [position] [default-action]
برای مقید کردن یک منوی پاپآپ از پیش تعریفشده به یک کلید یا دکمه ماوس:
مثال زیر دکمههای ۲ و ۳ ماوس را به یک پاپآپ به نام "Window Ops" مقید میکند. اگر دکمههای ۲ یا ۳ در قاب پنجره، نوار کناری، یا نوار عنوان، بدون هیچ کلید تغییردهندهای (هیچیک از shift، control، یا meta) فشرده شوند، منو بالا میآید.
Mouse 2 FST N Popup "Window Ops" Mouse 3 FST N Popup "Window Ops"
پاپآپها میتوانند با استفاده از دستور Key به کلیدها مقید شوند. با مقید کردن پاپآپها به کلیدها و کنترل از طریق کلیدهای پیکان بالا، پیکان پایین و enter، میتوان بدون استفاده از ماوس با آنها کار کرد.
برای مقید کردن یک منوی پاپآپ از پیش تعریفشده به منویی دیگر، جهت استفاده به عنوان زیرمنو:
مثال زیر یک زیرمنو به نام "Quit-Verify" تعریف کرده و آن را به یک منوی اصلی به نام "RootMenu" مقید میکند:
AddToMenu Quit-Verify
+ "Really Quit Fvwm?" Title
+ "Yes, Really Quit" Quit
+ "Restart Fvwm" Restart
+ "" Nop
+ "No, Don't Quit" Nop
AddToMenu RootMenu "Root Menu" Title
+ "Open XTerm Window" Popup NewWindowMenu
+ "Login as Root" Exec exec xterm -T Root -n Root -e su -
+ "Login as Anyone" Popup AnyoneMenu
+ "Remote Hosts" Popup HostMenu
+ "" Nop
+ "X utilities" Popup Xutils
+ "" Nop
+ "Fvwm Modules" Popup Module-Popup
+ "Fvwm Window Ops" Popup Window-Ops
+ "" Nop
+ "Previous Focus" Prev (AcceptsFocus) Focus
+ "Next Focus" Next (AcceptsFocus) Focus
+ "" Nop
+ "Refresh screen" Refresh
+ "" Nop
+ "Reset X defaults" Exec xrdb -load \
$HOME/.Xdefaults
+ "" Nop
+ "" Nop
+ Quit Popup Quit-Verify
دستور Popup با Menu در این تفاوت دارد که اگر کاربر تنها کلیک کند، پاپآپها باز نمیمانند. اینها منوهای جهشی (popup) هستند که فشار کمی بیشتری به مچ دست میآورند. منوهای Menu با عمل کلیک باز میمانند. برای توضیحات مربوط به رفتار تعاملی منوها به دستور Menu مراجعه کنید. یک منو میتواند به طور همزمان تا ده بار باز باشد، بنابراین یک منو حتی میتواند از خودش یا هر یک از منوهای والد خود به عنوان زیرمنو استفاده کند.
TearMenuOff
AddToMenu WindowMenu + I "" TearMenuOff AddToMenu RootMenu + I "click here to tear me off" TearMenuOff
سبکهای منو (Menu styles) ظاهر و رفتار منوها را توصیف میکنند، همانطور که سبکهای معمولی این کار را برای پنجرهها انجام میدهند. سبکهای منو به منوهای مجزا یا همهٔ منوها اختصاص مییابند و تغییر سبک منو بلافاصله روی تمام منوهایی که از آن استفاده میکنند اثر میگذارد. (اگر یک سبک منو از درون خود یک منو استفاده شود، تغییرات در باز شدن بعدی منوی مربوطه اعمال میشوند.)
ChangeMenuStyle menustyle menu ...
CopyMenuStyle orig-menustyle dest-menustyle
DestroyMenuStyle menustyle
DestroyMenuStyle pixmap1
MenuStyle stylename [options]
options فهرستی جدا شده با کاما شامل برخی از کلیدواژههای زیر است: Fvwm / Mwm / Win, BorderWidth, HilightBack / !HilightBack, HilightTitleBack, ActiveFore / !ActiveFore, MenuColorset, ActiveColorset, GreyedColorset, TitleColorset, Hilight3DThick / Hilight3DThin / Hilight3DOff, Hilight3DThickness, Animation / !Animation, Font, TitleFont, PopupDelay, PopupOffset, TitleWarp / !TitleWarp, TitleUnderlines0 / TitleUnderlines1 / TitleUnderlines2, SeparatorsLong / SeparatorsShort, TrianglesSolid / TrianglesRelief, PopupImmediately / PopupDelayed, PopdownImmediately / PopdownDelayed, PopupActiveArea, DoubleClickTime, SidePic, SideColor, PopupAsRootMenu / PopupAsSubmenu / PopupIgnore / PopupClose, RemoveSubmenus / HoldSubmenus, SubmenusRight / SubmenusLeft, SelectOnRelease, ItemFormat, VerticalItemSpacing, VerticalMargins, VerticalTitleSpacing, AutomaticHotkeys / !AutomaticHotkeys, UniqueHotkeyActivatesImmediate / !UniqueHotkeyActivatesImmediate, MouseWheel, ScrollOffPage / !ScrollOffPage, TrianglesUseFore / !TrianglesUseFore, Translucent / !Translucent.
در فهرست بالا برخی از گزینهها به صورت جفت یا سهتایی با '/' در میان آنها فهرست شدهاند. این گزینهها مانعةالجمع هستند. تمام گزینههای جفت را میتوان با افزودن پیشوند ! نقیض کرد تا اثر گزینهٔ مقابل را ایجاد کنند.
گزینههای Fvwm، Mwm و Win تمام گزینهها را به سبک همنام در نسخههای قبلی fvwm بازنشانی میکنند. سبک پیشفرض برای سبکهای منوی جدید، سبک Fvwm است. این گزینهها تمام گزینههای دیگر به جز HilightBack، ActiveFore و PopupDelay را بازنویسی (override) میکنند، بنابراین تنها باید به عنوان اولین گزینهٔ مشخصشده برای یک سبک منو یا برای بازنشانی سبک به رفتار تعریفشده استفاده شوند. همین اثر را میتوان با تنظیم تکتک گزینههای دیگر به صورت جداگانه نیز ایجاد کرد.
منوهای سبک Mwm و Win زیرمنوها را به صورت خودکار باز میکنند (popup). منوهای Win با تغییر رنگ پسزمینه به تیره، مورد فعلی منو را مشخص میکنند. زیرمنوهای Fvwm روی منوی والد همپوشانی دارند، در حالی که منوهای سبک Mwm و Win هرگز با منوی والد همپوشانی پیدا نمیکنند.
سبک Fvwm معادل است با: !HilightBack, Hilight3DThin, !ActiveFore, !Animation, Font, PopupOffset 0 67, TitleWarp, TitleUnderlines1, SeparatorsShort, TrianglesRelief, PopupDelayed, PopdownDelayed, PopupDelay 150, PopdownDelay 150, PopupAsSubmenu, HoldSubmenus, SubmenusRight, BorderWidth 2, !AutomaticHotkeys, UniqueHotkeyActivatesImmediate, PopupActiveArea 75.
سبک Mwm معادل است با: !HilightBack, Hilight3DThick, !ActiveFore, !Animation, Font, PopupOffset -3 100, !TitleWarp, TitleUnderlines2, SeparatorsLong, TrianglesRelief, PopupImmediately, PopdownDelayed, PopdownDelay 150, PopupAsSubmenu, HoldSubmenus, SubmenusRight, BorderWidth 2, UniqueHotkeyActivatesImmediate, !AutomaticHotkeys, PopupActiveArea 75.
سبک Win معادل است با: HilightBack, Hilight3DOff, ActiveFore, !Animation, Font, PopupOffset -5 100, !TitleWarp, TitleUnderlines1, SeparatorsShort, TrianglesSolid, PopupImmediately, PopdownDelayed, PopdownDelay 150, PopupAsSubmenu, RemoveSubmenus, SubmenusRight, BorderWidth 2, UniqueHotkeyActivatesImmediate, !AutomaticHotkeys, PopupActiveArea 75.
BorderWidth ضخامت حاشیهٔ دور منوها را به پیکسل دریافت میکند. این مقدار میتواند از 0 تا 50 پیکسل باشد. مقدار پیشفرض 2 است. استفاده از یک مقدار نامعتبر، پهنای حاشیه را به مقدار پیشفرض بازمیگرداند.
HilightBack و !HilightBack برجستهسازی پسزمینهٔ مورد انتخابشده در منو را روشن و خاموش میکنند. رنگ پسزمینهٔ ActiveColorset برای برجستهسازی استفاده میشود.
HilightTitleBack برجستهسازی پسزمینهٔ عنوانهای منو را روشن میکند. رنگ پسزمینهٔ TitleColorset برای برجستهسازی استفاده میشود.
ActiveFore و !ActiveFore برجستهسازی پیشزمینهٔ مورد انتخابشده در منو را روشن و خاموش میکنند. رنگ پیشزمینهٔ ActiveColorset برای برجستهسازی استفاده میشود.
MenuColorset مجموعه رنگی (colorset) مورد استفاده برای رنگآمیزی منو را کنترل میکند. اگر برای مجموعه رنگی یک نگاشتپیکسلی (pixmap) یا گرادیان تعریف شده باشد، از آن به عنوان پسزمینهٔ منو استفاده میشود. ماسک شکل (shape mask) برگرفته از مجموعه رنگی برای شکلدهی به منو به کار میرود. لطفاً برای جزئیات مربوط به مجموعههای رنگی به بخش Colorsets مراجعه کنید.
ActiveColorset رنگ مورد فعال منو را کنترل میکند، به شرطی که سبکهای منوی HilightBack یا ActiveFore به کار رفته باشند. در صورت تعیین، رنگهای سایه و برجستگی (hilight) از مجموعه رنگی نیز استفاده میشوند. نگاشتپیکسلی و ماسک شکلِ مجموعه رنگی استفاده نمیشوند. برجستهسازی پسزمینه یا پیشزمینه را میتوان به صورت مجزا با سبکهای منوی !ActiveFore یا !HilightBack خاموش کرد.
GreyedColorset دقیقاً مانند MenuColorset عمل میکند، اما پیشزمینهٔ مجموعه رنگی جایگزین رنگ داده شده با سبک منوی Greyed میشود. هیچ بخش دیگری از مجموعه رنگی استفاده نمیشود.
TitleColorset دقیقاً مانند MenuColorset عمل میکند، اما تنها برای عنوانهای منو استفاده میشود.
Translucent جلوهٔ شبهشفافیتی را کنترل میکند که از تصویر میزکارِ زیر منو به عنوان تصویر پسزمینهٔ آن استفاده میکند. این گزینه یک مقدار عددی بین 0 (کاملاً نیمهشفاف) و 100 (غیرشفاف) دریافت میکند که درصد نیمهشفافیت است. برای خاموش کردن این اثر از !Translucent (یا بدون مقدار اضافی) استفاده کنید. اثر نیمهشفاف فقط روی منوهای معمولی اعمال میشود و بر منوهای «جدا شده» (torn off) اعمال نمیگردد. توجه داشته باشید که تنها پسزمینهٔ منو نیمهشفاف است؛ HilightBack مورد فعال و HilightTitleBack عنوان نیمهشفاف نیستند. برای داشتن یک منوی کاملاً نیمهشفاف دستور زیر را به کار ببرید:
MenuStyle * Translucent 60, !HilightBack, !HilightTitleBack, ActiveFore
Hilight3DThick، Hilight3DThin و Hilight3DOff مشخص میکنند که آیا مورد انتخابشده در منو با یک برجستگی سهبعدی برجسته شود یا خیر. برجستگیهای ضخیم دارای پهنای دو پیکسل و برجستگیهای نازک دارای پهنای یک پیکسل هستند.
Hilight3DThickness یک آرگومان عددی میگیرد که میتواند بین -50 تا +50 پیکسل باشد. با مقادیر منفی، مورد منو ظاهری فشردهشده به داخل پیدا میکند. سه دستور بالا به ترتیب معادل ضخامتهای 2، 1 و 0 هستند.
Animation و !Animation پویانمایی منو را روشن یا خاموش میکنند. هنگامی که پویانمایی روشن است، زیرمنوهایی که در صفحه جا نمیشوند باعث میشوند منوی والد به سمت چپ منتقل شود تا زیرمنو قابل مشاهده باشد.
Font و TitleFont نام یک قلم را به عنوان آرگومان دریافت میکنند. اگر قلمی با این نام موجود باشد، برای متن تمام موارد منو به کار میرود. اگر وجود نداشته باشد یا نام آن خالی گذاشته شود، از پیشفرض توکار استفاده میشود. اگر یک TitleFont داده شود، به جای قلم عادی برای تمام عنوانهای منو به کار میرود.
PopupDelay به یک آرگومان عددی نیاز دارد. این مقدار، تأخیر بر حسب میلیثانیه پیش از باز شدن (popup) یک زیرمنو است، هنگامی که نشانگر روی یک مورد منو که دارای زیرمنو است قرار میگیرد. اگر مقدار صفر باشد، هیچ باز شدن خودکاری انجام نمیشود. اگر آرگومان حذف شود، از پیشفرض توکار استفاده میشود. توجه داشته باشید که اگر گزینهٔ PopupImmediately استفاده شود، تأخیر باز شدن هیچ اثری ندارد زیرا در آن حالت زیرمنوها بلافاصله باز میشوند..sp PopupImmediately باعث میشود آیتمهای منو که دارای زیرمنو هستند، به محض ورود نشانگر به آیتم باز شوند. در این حالت گزینهٔ PopupDelay نادیده گرفته میشود. اگر از PopupDelayed استفاده شود، fvwm گزینهٔ PopupDelay را بررسی میکند تا تعیین کند آیا یا چه زمانی این باز شدن خودکار رخ دهد.
PopdownDelay دقیقاً مانند PopupDelay عمل میکند اما مهلت زمانی شیوهٔ PopupDelayed را تعیین میکند.
PopdownImmediately باعث ناپدید شدن زیرمنوها به محض خروج نشانگر از زیرمنو و آیتم متناظر در منوی والد میشود. با گزینهٔ معکوس آن یعنی PopdownDelayed، زیرمنو تنها پس از زمان مشخصشده با گزینهٔ PopdownDelay بسته میشود. این ویژگی زمانی مفید است که نشانگر هنگام تلاش برای رفتن به داخل زیرمنو، مکرراً از آیتم منو منحرف میشود. هرگاه بین سبکهای PopupImmediately، PopupDelayed، PopupDelay و سبکهای PopdownImmediately، PopdownDelayed، PopdownDelay تداخلی پیش آید، هنگام پیمایش با ماوس سبکهای Popup... و هنگام پیمایش با صفحهکلید سبکهای Popdown... اولویت دارند.
PopupOffset نیازمند دو آرگومان عدد صحیح است. هر دو مقدار بر مکان قرارگیری زیرمنوها نسبت به منوی والد تأثیر میگذارند. اگر هر دو مقدار صفر باشند، لبهٔ چپ زیرمنو با لبهٔ چپ منوی والد همپوشانی خواهد داشت. اگر مقدار اول غیرصفر باشد، زیرمنو به همان تعداد پیکسل به سمت راست (یا چپ در صورت منفی بودن) جابهجا میشود. اگر مقدار دوم غیرصفر باشد، منو به اندازهٔ همان درصد از پهنای منوی والد به راست یا چپ جابهجا خواهد شد.
PopupActiveArea نیازمند یک مقدار عدد صحیح بین ۵۱ و ۱۰۰ است. در حالت عادی، زمانی که نشانگر روی یک آیتم منو با زیرمنو قرار دارد و وارد ناحیهای میشود که از ۷۵٪ پهنای منو آغاز میگردد، زیرمنو فوراً نشان داده میشود. این درصد را میتوان با PopupActiveArea تغییر داد. تنظیم این مقدار روی ۱۰۰، این گونه باز شدنهای خودکار را به طور کامل غیرفعال میکند. در صورت عدم ارائهٔ مقدار یا دادن مقداری نامعتبر، مقدار پیشفرض بازیابی میشود.
TitleWarp و !TitleWarp بر این امر تأثیر میگذارند که آیا هنگام باز شدن یک زیرمنو، نشانگر به عنوان منو منتقل (warp) شود یا خیر. توجه داشته باشید که صرفنظر از این تنظیم، اگر منو در زیر نشانگر باز نشود، نشانگر منتقل نخواهد شد.
TitleUnderlines0، TitleUnderlines1 و TitleUnderlines2 مشخص میکنند که چند خط در زیر عنوان منو رسم شود.
SeparatorsLong و SeparatorsShort طول جداکنندههای منو را تعیین میکنند. جداکنندههای بلند سراسر منو را از لبهٔ چپ تا لبهٔ راست طی میکنند. جداکنندههای کوتاه چند پیکسل تا لبههای منو فاصله باقی میگذارند.
TrianglesSolid و TrianglesRelief بر نحوهٔ رسم مثلثهای کوچک مربوط به زیرمنوها اثر میگذارند. مثلثهای توپر (Solid) با یک رنگ پر میشوند در حالی که مثلثهای برجسته (Relief) توخالی هستند.
DoubleClickTime به یک آرگومان عددی نیاز دارد. این مقدار، زمان بر حسب میلیثانیه میان دو کلیک ماوس در یک منو است تا دوبار کلیک در نظر گرفته شود. مقدار پیشفرض ۴۵۰ میلیثانیه است. اگر این آرگومان حذف شود، زمان دوبار کلیک به این مقدار پیشفرض بازنشانی میگردد.
SidePic نام یک فایل تصویری را به عنوان آرگومان میپذیرد. این تصویر در امتداد سمت چپ منو رسم میشود. گزینهٔ SidePic میتواند توسط یک پیکسمپ کناری ویژهٔ منو رونویسی شود (به AddToMenu مراجعه کنید). اگر نام فایل حذف شود، هرگونه پیکسمپ کناریِ موجود از سبک منو حذف میشود.
SideColor نام یک رنگ X11 را به عنوان آرگومان میپذیرد. این رنگ برای رنگآمیزی ستون حاوی تصویر کناری به کار میرود (بالا را ببینید). گزینهٔ SideColor میتواند با یک رنگ کناری ویژهٔ منو رونویسی شود (به AddToMenu مراجعه کنید). اگر نام رنگ حذف شود، گزینهٔ رنگ کناری غیرفعال میشود.
PopupAsRootMenu، PopupAsSubmenu، PopupIgnore و PopupClose رفتار برنامه را هنگام کلیک بر روی آیتم منویی که زیرمنویی باز میکند تغییر میدهند. با PopupAsRootMenu منوی اصلی پیش از نمایان شدن زیرمنو بسته میشود، در حالی که با PopupAsSubmenu اینگونه نیست و میتوانید مجدداً به منوی والد برگردید. علاوه بر این، با PopupAsSubmenu زیرمنو صرفنظر از اینکه ماوس را به کجا حرکت دهید، باز نگه داشته میشود (posted). بسته به سبک منوی شما، این امر ممکن است ناوبری درون منو را سادهتر کند. هرگونه فشردن کلید در حین باز نگه داشته شدن منو، آن را به رفتار عادی بازمیگرداند. با PopupClose با فعال شدن یکی از آیتمهای زیرمنو، منو بسته میشود و در صورت استفاده از PopupIgnore منو باز باقی میماند (حتی اگر منو با دستور Popup فراخوانی شده باشد). PopupAsSubmenu حالت پیشفرض است.
RemoveSubmenus به fvwm دستور میدهد هنگام بازگشت به منوی والد، زیرمنو را حذف کند. با HoldSubmenus زیرمنو مرئی باقی میماند. اگر از سبک PopupDelayed استفاده میکنید، احتمالاً ترجیح میدهید از HoldSubmenus بهره ببرید. RemoveSubmenus بر ناوبری منو با صفحهکلید تأثیر میگذارد.
SelectOnRelease یک نام کلید اختیاری را به عنوان آرگومان دریافت میکند. اگر کلید ارائهشده در منویی که از این سبک بهره میبرد رها شود، آیتم فعلی منو انتخاب میشود. این قابلیت برای ناوبری در WindowList در نظر گرفته شده است. نام کلید یک نام کلید استاندارد X11 است که در /usr/include/X11/keysymdef.h (بدون پیشوند XK_) یا در پایگاهدادهٔ keysym واقع در /usr/X11R6/lib/X11/XKeysymDB تعریف شده است. برای غیرفعال کردن این رفتار، نام کلید را حذف کنید.
نکته: برخی از کارگزارهای X از رویدادهای KeyRelease پشتیبانی نمیکنند. SelectOnRelease بر روی چنین سیستمهایی کار نمیکند.
ItemFormat رشتهای ویژه را به عنوان آرگومان خود میپذیرد که چیدمان آیتمهای منو را تعیین میکند. رشتهٔ قالب را به منزلهٔ یک آیتم منو تصور کنید. تمام کاری که باید انجام دهید این است که به fvwm بگویید بخشهای گوناگون آیتم منو (یعنی برچسبها، مثلث نمایانگر زیرمنو، آیکونهای کوچک و تصویر کناری) را در کجای ناحیهٔ خالی جای دهد. این رشته از فاصلهها،
نویسهها و دستورالعملهای قالببندی که با '%' آغاز میشوند تشکیل شده است. هر نویسه و دستورالعمل قالببندیِ نامعتبر در سکوت نادیده گرفته میشود:
%l، %c و %r
%i
%> و %<
%|
%s
Space، Tab، %Space و %Tab
%p
میتوانید مانند زیر، یک فضای اضافی پیش و پس از هر یک از شیءها تعریف کنید
%left.rightp
این بدان معناست: اگر شیء در منو تعریف شده باشد (برای نمونه اگر %s باشد و از یک تصویر کناری استفاده کنید، یا برای ستون سوم %l باشد و آیتمهایی تعریف شده باشند که در عمل دارای ستون سوم هستند)، آنگاه left پیکسل قبل از شیء و right پیکسل بعد از آن بیفزایید. در صورت عدم نیاز، میتوانید بخشهای left یا .right را حذف کنید. تمام مقادیر تا سقف پهنای صفحه مجاز هستند. حتی مقادیر منفی را نیز میتوان با احتیاط به کار برد. به جای p میتوان هر یک از دستورالعملهای قالببندی دیگری را که در بالا شرح داده شد جایگزین کرد.
نکته: تنها آیتمهای تعریفشده در رشتهٔ قالب درون منوها قابل رؤیت هستند. بنابراین اگر %s را در آن قرار ندهید، تصویر کناری را نخواهید دید، حتی اگر یکی از آنها مشخص شده باشد..sp نکته: سبک SubmenusLeft رشتهی پیشفرض ItemFormat را تغییر میدهد، اما اگر بهصورت دستی تنظیم شده باشد، تغییر داده نمیشود.
نکته: اگر هر عنوان قالببندینشدهای در منو از عریضترین آیتم منو پهنتر باشد، فاصلههای بین بخشهای مختلف آیتمهای منو افزایش مییابند تا با عرض عنوان مطابقت پیدا کنند. اشیاء چپچین ابتدایی در رشته قالببندی (%l، %i، %<، اولین %|) به لبه سمت چپ منو میچسبند و اشیاء راستچین انتهایی (%r، %i، %>، دومین %|) به لبه سمت راست میچسبند. فاصلههای بین آیتمهای باقیمانده بهطور یکسان افزایش مییابند.
مثالها:
MenuStyle * ItemFormat "%.4s%.1|%.5i%.5l%.5l%.5r%.5i%2.3>%1|"
رشته پیشفرضی است که توسط fvwm استفاده میشود: (تصویر کناری + ۴ پیکسل فاصله) (ابتدای ناحیه برجسته + ۱ پیکسل فاصله) (آیکون کوچک + ۵ پیکسل) (ستون اول چپچین + ۵ پیکسل) (ستون دوم چپچین + ۵ پیکسل) (ستون سوم راستچین + ۵ پیکسل) (آیکون کوچک دوم + ۵ پیکسل) (۲ پیکسل + مثلث زیرمنو + ۳ پیکسل) (۱ پیکسل + انتهای ناحیه برجسته).
MenuStyle * ItemFormat "%.1|%3.2<%5i%5l%5l%5r%5i%1|%4s"
توسط fvwm به همراه گزینه SubmenusLeft در زیر استفاده میشود.
دستورات VerticalItemSpacing و VerticalTitleSpacing فاصله عمودی آیتمها و عناوین منو را کنترل میکنند، همانطور که ItemFormat فاصله افقی را کنترل میکند. هر دو دستور دو آرگومان عددی میگیرند که میتوانند در بازه -100 تا +100 باشند. آرگومان اول فاصله به پیکسل در بالای یک آیتم عادی منو (یا یک عنوان منو) است و دومی فاصله به پیکسل در زیر آن است. اعداد منفی مفهوم چندانی ندارند و ممکن است ظاهر منو را کاملاً به هم بریزند. اگر آرگومانی داده نشود یا آرگومانهای دادهشده نامعتبر باشند، از مقادیر پیشفرض توکار استفاده میشود: یک پیکسل بالای آیتم یا عنوان و دو پیکسل زیر آن.
از VerticalMargins میتوان برای افزودن فاصلهگذاری درونی (padding) در بالا و پایین منوها استفاده کرد. این دستور دو آرگومان عددی میگیرد که باید اعداد صحیح مثبت (یا صفر) باشند. اگر تعداد آرگومانها یا مقادیر آنها نادرست باشد، fvwm بهطور پیشفرض هر دو را 0 در نظر میگیرد، که به معنای عدم وجود هرگونه فاصلهگذاری درونی است. اگر مقادیر صحیح باشند، مقدار اول برای حاشیه بالا و مقدار دوم برای حاشیه پایین استفاده میشود.
گزینه SubmenusLeft چیدمان و رفتار منو را آینهای (معکوس) میکند. زیرمنوها در سمت چپ باز میشوند، مثلث زیرمنو در سمت چپ رسم میشود، و آیکون کوچک و تصویر کناری در سمت راست منو رسم میشوند. حالت پیشفرض SubmenusRight است. راهنماهای موقعیت منو نیز تحت تأثیر این تنظیمات قرار میگیرند؛ یعنی راهنماهای موقعیت با استفاده از item یا menu بهعنوان مستطیل زمینه و راهنماهای موقعیت با استفاده از آفستهای m.
گزینههای AutomaticHotkeys و !AutomaticHotkeys توانایی منو برای ارائه خودکار کلیدهای میانبر (hot-keys) بر روی اولین نویسه از برچسب هر آیتم منو را کنترل میکنند. اگر در دستور AddToMenu یک کلید میانبر صریح تعیین شده باشد، این رفتار همواره نادیده گرفته میشود.
گزینههای UniqueHotkeyActivatesImmediate و !UniqueHotkeyActivatesImmediate نحوه فراخوانی آیتمهای منو در هنگام استفاده از کلیدهای میانبر را کنترل میکنند. بهطور پیشفرض، اگر یک مدخل منو تنها یک تطابق قابل تکمیل برای یک کلید میانبر مشخص داشته باشد، کنشِ مربوط به آن مدخل منو اجرا شده و منو بسته میشود. این به دلیل گزینه UniqueHotkeyActivatesImmediate است. با این حال، با استفاده از گزینه !UniqueHotkeyActivatesImmediate میتوان به منو اعلام کرد که حتی در صورت وجود تنها یک آیتم منطبق برای یک کلید میانبر، همچنان باز بماند و منتظر بماند تا کاربر آیتم انتخابشده را فراخوانی کند.
گزینه MouseWheel توانایی پیمایش منو با استفاده از چرخ ماوس را کنترل میکند. این گزینه یک آرگومان میگیرد که میتواند یکی از مقادیر ScrollsPointer، ScrollsMenu، ScrollsMenuBackwards یا ActivatesItem باشد. گزینه ScrollsPointer باعث میشود چرخ ماوس، اشارهگر را روی منو پیمایش کند. این حالت پیشفرض است. گزینههای ScrollsMenu و ScrollsMenuBackwards منو را در زیر اشارهگر پیمایش میکنند. گزینه ActivatesItem پیمایش با چرخ ماوس را غیرفعال کرده و استفاده از چرخ ماوس را طوری عمل میدهد که گویی روی منو کلیک شده است. اگر هیچ آرگومانی ارائه نشود، تنظیمات پیشفرض بازگردانی میشوند.
گزینه ScrollOffPage اجازه میدهد تا در صورت تنظیم MouseWheel روی ScrollsMenu یا ScrollsMenuBackwards، منو به خارج از ناحیه قابلمشاهده پیمایش شود. این حالت پیشفرض است. برعکس آن، یعنی !ScrollOffPage، این رفتار را غیرفعال میکند.
گزینه TrianglesUseFore مثلثهای زیرمنو را با رنگ پیشزمینه مجموعه رنگهای منو رسم میکند (که بهطور معمول با رنگ برجستهسازی رسم میشوند). گزینه !TrianglesUseFore این رفتار را غیرفعال میکند.
توضیحات دستورهای زیر در بخشهای پس از این گروهبندی شدهاند. ترتیب بخشها به این امید تنظیم شده است که بر اساس میزان سودمندی برای کاربران تازهکار باشد.
BugOpts [option [bool]], ...
DebugRandR پیامهای اشکالزدایی چیدمان نمایشگر را فعال میکند.
FlickeringMoveWorkaround رویدادهای ConfigureNotify را که معمولاً هنگام جابجایی پنجره به برنامه فرستاده میشوند، غیرفعال میکند. اگر برخی پنجرهها در حین جابجایی به صورت آزاردهندهای چشمک میزنند (flicker)، این گزینه ممکن است به شما کمک کند. توجه داشته باشید که اگر این مشکل رخ دهد، باگ fvwm نیست، بلکه اشکال از خود برنامه است.
MixedVisualWorkaround باعث میشود fvwm پیش از انجام برخی عملیات با استفاده از جلوههای بصری پنجره ریشه (root window visuals)، نقشه رنگ ریشه (root colormap) را نصب کند. این فقط زمانی مفید است که از گزینه -visual برای راهاندازی fvwm استفاده شود و آن هم فقط با برخی پیکربندیهای سرورهای خاص (مانند Exceed 6.0 با یک ریشه هشت بیتی PseudoColor و fvwm با یک visual بیست و چهار بیتی TrueColor).
گزینه ModalityIsEvil کنترل میکند که آیا برنامههای Motif قابلیت داشتن کادرهای محاورهای مُدال (دیالوگهایی که پیش از انجام هر کار دیگری شما را وادار به بستن آنها میکنند) را دارند یا خیر. پیشفرض این است که به برنامهها اجازه داشتن کادرهای محاورهای مدال داده نشود. از این گزینه با احتیاط استفاده کنید. پس از روشن شدن این گزینه، برای خاموش کردن آن باید fvwm را مجدداً راهاندازی کنید.
RaiseOverNativeWindows باعث میشود fvwm تلاش کند پنجرههای تحت مدیریت خود را بالاتر از پنجرههای بومی (native) سیستم میزبان X server بیاورد. این برای برخی از X serverهایی که زیر Windows، Windows NT یا Mac OS X اجرا میشوند لازم است. fvwm تلاش میکند تشخیص دهد که آیا تحت چنین X serverی در حال اجرا است یا خیر، و پرچم را متناسب با آن مقداردهی اولیه میکند.
RaiseOverUnmanaged باعث میشود fvwm تلاش کند پنجرههای تحت مدیریت خود را بالاتر از پنجرههای override_redirect بیاورد. این کار برای سازگاری با برنامههای نامناسبی استفاده میشود که برخلاف قراردادهای ICCCM، از پنجرههای طولانیمدت از این نوع استفاده میکنند. این گزینه همراه با گزینه سبک Unmanaged نیز مفید است.
FlickeringQtDialogsWorkaround از چشمکزدن پنجره فوکوسشده در برخی ماژولها هنگام استفاده از برنامههای KDE یا QT دارای پنجرههای محاورهای مدال، جلوگیری میکند. به طور پیشفرض این گزینه فعال است. این گزینه ممکن است برای سایر برنامههایی که از پنجرههای مدیریتنشده توسط fvwm استفاده میکنند از نظر بصری ناخوشایند باشد. از آنجا که این برنامهها نادر هستند، به احتمال زیاد باقی گذاشتن این گزینه روی مقدار پیشفرض آن بیخطر است.
QtDragnDropWorkaround فرستادن پیامهای ناشناخته ClientEvent را به پنجرهها سرکوب میکند — این عمل معمولاً بیضرر است، اما Qt در مدیریت پیامهای ناشناخته ClientEvent دچار مشکل میشود. بنابراین فعال کردن این گزینه ممکن است برای برنامههای Qt که از DragnDrop استفاده میکنند مفید باشد. این گزینه به طور پیشفرض خاموش است.
EWMHIconicStateWorkaround برای پیجرها (pagers) یا تسکبارهای سازگار با EWMH لازم است که پنجرههای موجود در میزکارهای دیگر را به صورت آیکونشده (iconified) نمایش میدهند. این پیجرها و تسکبارها از نسخهای از مشخصات EWMH قبل از نسخه 1.2 (نسخههای کنونی KDE 2 و 3) استفاده میکنند. این پیجرها و تسکبارها از وضعیت IconicState در WM_STATE برای تشخیص اینکه آیا یک برنامه آیکون شده است یا خیر استفاده میکنند. این وضعیت، طبق ICCCM، دلالت بر این ندارد که یک پنجره (به معنای معمول) آیکون شده است. روشن کردن این گزینه fvwm را وادار میکند که یک همارزی بین وضعیت IconicState در WM_STATE و پنجره آیکونشده برقرار کند. این کار نقض سازگاری با ICCCM است، اما نباید مشکلات بزرگی ایجاد کند. به طور پیشفرض این گزینه خاموش است.
با فعال بودن DisplayNewWindowNames، fvwm نام، نام آیکون (در صورت وجود)، منبع (resource) و کلاس پنجرههای جدید را در کنسول چاپ میکند. این میتواند به یافتن رشتههای درست برای استفاده در دستور Style کمک کند.
هنگامی که گزینه ExplainWindowPlacement فعال است، هر بار که پنجره جدیدی قرار داده میشود یا از PlaceAgain استفاده میشود، fvwm پیامی را در کنسول چاپ میکند. این پیام توضیح میدهد که پنجره روی کدام desk، صفحه (page)، نمایشگر (screen) و موقعیت قرار گرفته و چرا. از این گزینه میتوان برای پی بردن به این که چرا یک پنجره خاص در جایی که انتظار دارید ظاهر نمیشود، استفاده کرد.
گزینه DebugCRMotionMethod کدهای اشکالزدایی خاصی را در روالهای مدیریت ConfigureRequest در fvwm فعال میکند. این گزینه برای کاربر مفید نیست، اما اگر باگی را به تیم fvwm گزارش دهید ممکن است از شما بخواهیم این گزینه را فعال کنید.
گزینه TransliterateUtf8 نویسهگردانی (transliteration) را در حین تبدیل از رشتههای utf-8 فعال میکند. به طور پیشفرض fvwm در حین تبدیل نویسهگردانی انجام نمیدهد، اما اگر تبدیل از utf-8 به دلیل نویسههایی که مطابقت مستقیمی در مجموعه نویسه مقصد ندارند با شکست مواجه شود، به رشتههای جایگزین ارائهشده توسط کلاینتها رجوع میکند. با این حال برخی کلاینتها در تنظیم صحیح ویژگیهای غیر utf-8 کوتاهی میکنند، که در این صورت این گزینه ممکن است کمککننده باشد.
BusyCursor [Option bool], ...
BusyCursor DynamicMenu False, ModuleSynchronous False, \ Read False, Wait False
گزینه * به تمام گزینههای موجود اشاره دارد.
گزینه Read دستور PipeRead را کنترل میکند.
گزینه DynamicMenu گزینههای DynamicPopupAction و MissingSubmenuFunction از دستور AddToMenu را تحت تأثیر قرار میدهد. اگر این گزینه روی "False" تنظیم شده باشد، مکاننمای مشغول در حین اجرای دستور منوی پویا نمایش داده نمیشود، حتی اگر این دستور یک دستور Read یا PipeRead باشد و گزینه Read روی "True" تنظیم شده باشد.
گزینه ModuleSynchronous دستور ModuleSynchronous را تحت تأثیر قرار میدهد. اگر این گزینه روی "False" تنظیم شود، در حالی که fvwm منتظر ماژول راهاندازیشده توسط ModuleSynchronous برای تکمیل راهاندازی آن است، مکاننمای مشغول نمایش داده نمیشود.
گزینه Wait فقط روی مکاننمای ریشه (root cursor) تأثیر میگذارد. در طول وقفه انتظار، مکاننمای ریشه با مکاننمای مشغول جایگزین میشود و fvwm همچنان کاملاً پاسخگو است (میتوانید از این وقفه خارج شوید، به دستور EscapeFunc مراجعه کنید). اگر میخواهید از این گزینه استفاده کنید و از مکاننمای پیشفرض ریشه استفاده نمیکنید، باید مکاننمای ریشه خود را با دستور CursorStyle تنظیم کنید.
ClickTime [delay]
همچنین ClickTime تاخیر بین دو کلیک را برای تفسیر به عنوان دابلکلیک (double-click) مشخص میکند.
ColormapFocus FollowsMouse | FollowsFocus
ColormapFocus FollowsFocus
استفاده کنید، نقشه رنگ نصبشده مربوط به پنجرهای خواهد بود که در حال حاضر فوکوس صفحهکلید را در اختیار دارد.
CursorStyle context [num | name | None | Tiny | file [x y] [fg bg]]
POSITION (top_left_corner)
TITLE (top_left_arrow)
DEFAULT (top_left_arrow)
MOVE (fleur)
RESIZE (sizing)
WAIT (watch)
MENU (top_left_arrow)
SELECT (crosshair)
DESTROY (pirate)
TOP (top_side)
RIGHT (right_side)
BOTTOM (bottom_side)
LEFT (left_side)
TOP_LEFT (top_left_corner)
TOP_RIGHT (top_right_corner)
BOTTOM_LEFT (bottom_left_corner)
BOTTOM_RIGHT (bottom_right_corner)
TOP_EDGE (top_side)
RIGHT_EDGE (right_side)
BOTTOM_EDGE (bottom_side)
LEFT_EDGE (left_side)
ROOT (left_ptr)
مقادیر پیشفرض در پرانتزهای بالا نشان داده شدهاند. اگر بخواهید مکاننمای پیشفرض را برای زمینهای مشخص بازیابی کنید، میتوانید آرگومان دوم را حذف نمایید.
آرگومان دوم یا مقدار عددی مکاننما به صورتی است که در فایل سربرگ X11/cursorfont.h تعریف شده، یا نام آن (بدون پیشوند XC_). در غیر این صورت، میتوان نام فایل xpm را مشخص کرد. این نام همچنین میتواند None (بدون مکاننما) یا Tiny (یک تکپیکسل به عنوان مکاننما) باشد.
# make the kill cursor be XC_gumby (both forms work): CursorStyle DESTROY 56 CursorStyle DESTROY gumby
همچنین مکاننما میتواند از یک file تصویر (XPM، PNG یا SVG) بارگذاری شود. اگر fvwm با پشتیبانی از Xcursor کامپایل شده باشد، ARGB کامل استفاده میشود و فایلهای مکاننمای ساختهشده با برنامهٔ xcursorgen (که احتمالاً متحرک هستند) میتوانند بارگذاری شوند. در غیر این صورت، مکاننما به تکرنگ تبدیل میشود.
آرگومانهای اختیاری x و y (پس از آرگومان file) مختصات نقطهٔ کانونی (hot-spot) را مشخص میکنند که در آن 0 0 گوشهٔ بالا و سمت چپ تصویر است. مختصات درون محدودهٔ تصویر معتبر بوده و بر هرگونه نقطهٔ کانونی تعریفشده در فایل تصویر (XPM/Xcursor) اولویت دارد. یک نقطهٔ کانونی نامعتبر یا تعریفنشده در مرکز تصویر قرار میگیرد.
CursorStyle ROOT cursor_image.png 0 0
آرگومانهای اختیاری fg و bg رنگهای پیشزمینه و پسزمینه را برای مکاننما مشخص میکنند که پیشفرض آنها سیاه و سفید است (تصویر معکوس در مقایسه با تصویر بیتیِ واقعی). این رنگها تنها برای مکاننماهای تکرنگ استفاده میشوند؛ در غیر این صورت بدون اعلام خطا نادیده گرفته میشوند.
CursorStyle ROOT nice_arrow.xpm yellow black
DefaultFont [fontname]
DefaultIcon filename
DefaultLayers bottom put top
Deschedule [command_id]
EscapeFunc
Key Escape A MC - Key Escape A S EscapeFunc
توالی کلید Ctrl-Alt-Escape را با Shift-Escape برای لغو مکث Wait و دستور ModuleSynchronous جایگزین میکند. استفاده از EscapeFunc خارج از دستور Key هیچ کاری انجام نمیدهد.
FakeClick [command value] ...
FakeClick depth 2 press 1 wait 250 release 1
این دستور یک کلیک با دکمه ۱ را در پنجره والد (عمق ۲) با تأخیر ۲۵۰ میلیثانیه بین فشردن و رها کردن شبیهسازی میکند. نکته: تمام نامهای دستورات را میتوان با اولین حرف آنها خلاصه کرد.
FakeKeypress [command value] ...
ذخیره تمام نشستهای GVim با: "Esc:w\n"
All (gvim) FakeKeypress press Escape \
press colon \
press w \
press Return
ذخیره و خروج از تمام نشستهای GVim با: "Esc:wq\n"
All (gvim) FakeKeypress press Escape \
press colon \
press w \
press q \
press Return
ارسال A به یک پنجره خاص:
WindowId 0x3800002 FakeKeypress press A
نکته: تمام نامهای دستورات را میتوان با اولین حرف آنها خلاصه کرد.
ImagePath path
اگر دایرکتوری به صورت "/some/dir;.ext" مشخص شود، به این معنی است که تمام تصاویر موجود در این دایرکتوری دارای پسوند ".ext" هستند که باید اعمال شود. نام اصلی تصویر (که ممکن است حاوی پسوند دیگری باشد یا اصلاً پسوندی نداشته باشد) بررسی نمیشود، بلکه ".ext" به آن اضافه میشود یا جایگزین پسوند اصلی میگردد. این قابلیت به عنوان مثال زمانی مفید است که کاربر دایرکتوریهایی از تصاویر با پسوند ".xpm" و دایرکتوریهای دیگری با همان نامها اما با تصاویر ".png" داشته باشد.
متغیر path میتواند شامل متغیرهای محیطی مانند $HOME (یا ${HOME}) باشد. علاوه بر این، یک '+' در path به مقدار قبلی مسیر گسترش مییابد، که امکان افزودن آسان به ابتدا یا انتهای مسیر را فراهم میسازد.
به عنوان مثال:
ImagePath $HOME/icons:+:/usr/include/X11/bitmaps
LocalePath path
/install_prefix/share/locale;fvwm
که در آن install_prefix دایرکتوری محل نصب fvwm است. با چنین مسیر محلی، ترجمهها در این مسیر جستجو میشوند:
/install_prefix/share/locale/lang/LC_MESSAGES/fvwm.mo
که در آن lang به لوکال (locale) بستگی دارد. اگر هیچ دایرکتوری مشخص نشود، مسیر دایرکتوری پیشفرض در نظر گرفته میشود. اگر هیچ دامنه متنی مشخص نشود، fvwm فرض میشود. بدون آرگومان، مسیر محلی پیشفرض بازیابی میشود..sp همانند دستور ImagePath، path میتواند حاوی متغیرهای محیطی و علامت '+' برای افزودن آسان مسیر محلی به انتها یا ابتدای آن باشد.
برای نمونه، بسته fvwm-themes از دستور زیر استفاده میکند:
LocalePath ";fvwm-themes:+"
تا کاتالوگهای محلی (locale catalogs) را اضافه کند.
کاتالوگ پیشفرض fvwm شامل چند رشته است که توسط خود فایل اجرایی fvwm استفاده میشوند (مانند Desk و Geometry) و رشتههایی که در برخی فایلهای پیکربندی پیشفرض و پیکربندی FvwmForm به کار رفتهاند. میتوانید به زیرپوشه po/ در سورسکد fvwm نگاهی بیندازید تا فهرست رشتهها را به همراه ترجمههای احتمالی به زبانهای گوناگون به دست آورید. در حال حاضر، زبانهای بسیار کمی پشتیبانی میشوند.
کاربرد اصلی کاتالوگهای محلی از طریق پارامتر "$[gt.string]" است:
DestroyMenu MenuFvwmWindowOps AddToMenu MenuFvwmWindowOps "$[gt.Window Ops]" Title + "$[gt.&Move]" Move + "$[gt.&Resize]" Resize + "$[gt.R&aise]" Raise + "$[gt.&Lower]" Lower + "$[gt.(De)&Iconify]" Iconify + "$[gt.(Un)&Stick]" Stick + "$[gt.(Un)Ma&ximize]" Maximize + "" Nop + "$[gt.&Close]" Close + "$[gt.&Destroy]" Destroy
در صورت در دسترس بودن ترجمهها، منویی به زبانهای محلی ارائه میدهد.
توجه داشته باشید که ماژول FvwmScript دارای مجموعهای از دستورالعملهای ویژه برای ترجمه رشتهها است. توضیح نحوه ساخت کاتالوگهای محلی خارج از حیطه این بحث است. لطفاً به مستندات GNU gettext مراجعه کنید.
PrintInfo subject [verbose]
یک آرگومان اختیاری عدد صحیح در فایل گزارش اشکالزدایی، که پیشفرض آن $HOME/.fvwm/fvwm3-output.log است. متغیرهای محیطی $FVWM_USERDIR و $FVWM3_LOGFILE میتوانند این پیشفرض را تغییر دهند. برای نوشته شدن در این فایل گزارش، یا باید fvwm3 با گزینه -v راهاندازی شود یا میتوان از سیگنال SIGUSR2 برای تغییر وضعیت باز یا بسته بودن فایل گزارش اشکالزدایی استفاده کرد.
یک آرگومان اختیاری عدد صحیح verbose سطح اطلاعات ارائهشده را مشخص میکند. موضوعات معتبر کنونی عبارتند از:
Colors که اطلاعات مربوط به رنگهای استفادهشده توسط fvwm را چاپ میکند. این مورد در نمایشگرهایی که فقط میتوانند ۲۵۶ رنگ (یا کمتر) را به طور همزمان نمایش دهند مفید است. اگر verbose یک یا بیشتر باشد، پالت رنگ مورد استفاده fvwm چاپ میشود. اگر پالت رنگ محدودی دارید و ظرفیت رنگهایتان تمام شده است، این دستور میتواند مفید باشد.
ImageCache که اطلاعات مربوط به تصاویر بارگذاریشده توسط fvwm را چاپ میکند. اگر verbose یک یا بیشتر باشد، تمام تصاویر موجود در حافظه پنهان همراه با میزان استفاده مجدد هر یک فهرست میشوند.
Locale که اطلاعات مربوط به locale شما و قلمهایی که fvwm استفاده کرده است را چاپ میکند. مقدار verbose میتواند ۱ یا ۲ باشد.
nls که اطلاعات مربوط به کاتالوگهای محلی مورد استفاده fvwm را چاپ میکند.
bindings که اطلاعات تمام مقیدسازیهای موجود در fvwm را چاپ میکند: مقیدسازیهای کلید و ماوس. مقدار verbose هیچ تأثیری روی این گزینه ندارد.
infostore که اطلاعات تمام ورودیهای موجود در infostore را چاپ کرده و کلید و مقدار آن را فهرست میکند. مقدار verbose هیچ تأثیری روی این گزینه ندارد.
Schedule [Periodic] delay_ms [command_id] command
نکته: شناسه پنجره که از طریق $[w.id] برگردانده میشود را میتوان به عنوان command_id استفاده کرد. مثال:
Current Schedule 1000 $[w.id] WindowShade
دستور Schedule همچنین از کلیدواژه اختیاری Periodic پشتیبانی میکند که مشخص میکند command باید هر delay_ms یکبار اجرا شود. مثال:
Schedule Periodic 10000 PipeRead '[ -N "$MAIL" ] && echo \ Echo You have mail'
برای متوقف کردن دستورات دورهای از دستور Deschedule استفاده کنید.
State state [bool]
WindowList [(conditions)] [position] [options] [double-click-action]
قالب بخش هندسه به این صورت است: desk(layer): x-geometry sticky، که در آن desk و layer شمارههای متناظر بوده و sticky خالی یا حرف بزرگ S است. هندسه پنجرههای آیکونشده داخل پرانتز نمایش داده میشود. انتخاب یک مورد از منوی بازشوی فهرست پنجرهها باعث اجرای تابع تفسیرشده "WindowListFunc" میشود که شناسه پنجره مربوطه به عنوان $0 به آن ارسال شده است. تابع پیشفرض "WindowListFunc" به این صورت است:
AddToFunc WindowListFunc + I Iconify off + I FlipFocus + I Raise + I WarpToWindow 5p 5p
اگر این مقادیر پیشفرض برای شما مناسب نیستند، میتوانید "WindowListFunc" پیشساخته را حذف کرده و تابع مورد نظر خود را ایجاد کنید.
منوی فهرست پنجره در صورت تعریف شدن از سبک منوی "WindowList" استفاده میکند (دستور MenuStyle را ببینید). در غیر این صورت از سبک منوی پیشفرض استفاده خواهد شد. برای بازگشت به سبک منوی پیشفرض، دستور زیر را اجرا کنید:
DestroyMenuStyle WindowListمثال:
MenuStyle WindowList SelectOnRelease Meta_L
از conditions (شرایط) میتوان برای مستثنی کردن پنجرههای خاصی از فهرست پنجرهها استفاده کرد. لطفاً برای جزئیات به دستور Current مراجعه کنید. تنها پنجرههایی که با شرایط دادهشده مطابقت داشته باشند در فهرست پنجرهها نمایش داده میشوند. options (گزینهها) در زیر به صورت عکس عمل میکنند: پنجرههایی که در غیر این صورت در فهرست پنجرهها قرار نمیگرفتند را میتوان با آنها انتخاب کرد. conditions همواره بر options ارجحیت دارد.
آرگومانهای position همانند دستور Menu هستند. در صورتی که کاربر هنگام باز کردن فهرست پنجرهها دوبار کلیک کند (یا اگر منو به یک کلید مقید شده باشد، کلید را سریعاً دو بار فشار دهد)، دستور double-click-action فراخوانی میشود. اگر double-click-action از بیش از یک کلمه تشکیل شده باشد، باید داخل نقلقول قرار گیرد.
دستور double-click-action برای تعریف یک پنجرهٔ پیشفرض در صورتی که فهرست پنجرهها را مانند زیر به یک کلید (یا دکمه) مقید کرده باشید، مفید است:
# Here we call an existing function, but # it may be different. See the default # WindowListFunc definition earlier in this # man page. AddToFunc SwitchToWindow + I WindowListFunc Key Tab A M WindowList "Prev SwitchToWindow"
فشردن یکبارهٔ Alt-Tab فهرست پنجرهها را بالا میآورد؛ اگر آن را دو بار فشار دهید، فوکوس بین پنجرهٔ فعلی و آخرین پنجرهٔ فوکوسشده جابهجا میشود. با سبک منوی مناسب SelectOnRelease (مثال بالا را ببینید) به محض رها کردن کلید Alt، یک پنجره انتخاب میشود.
گزینههای options که به WindowList ارسال میشوند با ویرگول از هم جدا شده و میتوانند شامل موارد زیر باشند: Geometry / NoGeometry / NoGeometryWithInfo، NoDeskNum، NoLayer، NoNumInDeskTitle، NoCurrentDeskTitle، MaxLabelWidth width، TitleForAllDesks، Function funcname، Desk desknum، CurrentDesk، NoIcons / Icons / OnlyIcons، NoNormal / Normal / OnlyNormal، NoSticky / Sticky / OnlySticky، NoStickyAcrossPages / StickyAcrossPages / OnlyStickyAcrossPages، NoStickyAcrossDesks / StickyAcrossDesks / OnlyStickyAcrossDesks، NoOnTop / OnTop / OnlyOnTop، NoOnBottom / OnBottom / OnlyOnBottom، Layer m [n]، UseSkipList / OnlySkipList، NoDeskSort، ReverseOrder، CurrentAtEnd، IconifiedAtEnd، UseIconName، Alphabetic / NotAlphabetic، SortByResource، SortByClass، NoHotkeys، SelectOnRelease، ShowPage، ShowPageX، ShowPageY، ShowScreen.
(توجه - واژهٔ normal به معنی غیرشمایلی، غیرچسبان یا روی بقیه نبودن است)
با گزینهٔ SortByResource پنجرهها بر اساس حروف الفبا ابتدا بر اساس ردهٔ منبع (resource class)، سپس بر اساس نام منبع (resource name) و در نهایت بر اساس نام پنجره (یا نام شمایل در صورت تعیین UseIconName) مرتب میشوند. ReverseOrder نیز به همان شیوهٔ مورد انتظار عمل میکند.
با گزینهٔ SortByClass پنجرهها دقیقاً مانند SortByResource مرتب میشوند، با این تفاوت که نام منبع نادیده گرفته شده و تنها ردهٔ منبع لحاظ میشود.
گزینهٔ SelectOnRelease دقیقاً مانند گزینهٔ همنام در MenuStyle عمل میکند، اما بر گزینهٔ ارائهشده در سبک منو ارجحیت دارد. بهطور پیشفرض، این گزینه روی کلید سمت چپ
تنظیم شده است. برای غیرفعال کردن آن، از SelectOnRelease بدون نام کلید استفاده کنید.
اگر تابعی را از طریق Function funcname ارسال کنید، در بستر پنجرهٔ انتخابشده فراخوانی میشود:
AddToFunc IFunc I Iconify toggle WindowList Function IFunc, NoSticky, CurrentDesk, NoIcons
اگر از گزینهٔ Layer m [n] استفاده کنید، تنها پنجرههای موجود در لایههای بین m و n نمایش داده میشوند. مقدار پیشفرض n برابر با m است. با گزینهٔ ReverseOrder، ترتیب پنجرهها در فهرست معکوس میشود.
با گزینهٔ CurrentAtEnd، پنجرهای که هماکنون دارای فوکوس است (در صورت وجود) در انتهای فهرست نمایش داده میشود. این گزینه عمدتاً برای شبیهسازی رفتار Alt-Tab در رابطهای گرافیکی دیگر در نظر گرفته شده است.
گزینهٔ IconifiedAtEnd باعث میشود پنجرههای کوچکشده (آیکونشده) به انتهای فهرست منتقل شوند. این ویژگی نیز برگرفته از یک رابط گرافیکی دیگر است.
گزینهٔ NoGeometry باعث میشود fvwm ابعاد و مختصات (geometries) و همچنین جداکنندههای نشاندهندهٔ میزکارهای مختلف را نمایش ندهد. NoGeometryWithInfo ابعاد و مختصات را حذف میکند، اما اطلاعات میزکار را نگه داشته و پنجرههای آیکونشده را مشخص میکند. NoDeskNum باعث میشود fvwm شمارهٔ میزکار را در ابعاد یا قبل از عنوان پنجره در گزینهٔ NoGeometryWithInfo نمایش ندهد. NoNumInDeskTitle تنها زمانی کاربرد دارد که نام میزکار با دستور DesktopName تعریف شده باشد؛ این گزینه باعث میشود fvwm شمارهٔ میزکار را قبل از نام میزکار نمایش ندهد. بهطور پیشفرض، منوی WindowList دارای عنوانی است که میزکار جاری یا میزکار انتخابشده (در صورت استفاده از شرط Desk) را نشان میدهد. گزینهٔ NoCurrentDeskTitle این عنوان را حذف میکند. TitleForAllDesks باعث میشود fvwm یک عنوان منو به همراه نام و/یا شمارهٔ میزکار قبل از هر گروه از پنجرههای موجود در همان میزکار اضافه کند. با NoLayer، لایهٔ پنجره نمایش داده نمیشود. گزینههای ShowPage، ShowPageX و ShowPageY امکان نمایش صفحهٔ پنجره را بهصورت مضارب گردشده از اندازهٔ صفحهٔ نمایش فراهم میکنند. با ShowScreen، نام صفحهٔ نمایش پنجره نشان داده میشود.
گزینهٔ MaxLabelWidth تعداد نویسههایی که باید چاپ شوند را به عنوان آرگومان دریافت میکند. بیش از این تعداد نویسه از نام پنجره قابل مشاهده نخواهد بود.
اگر بخواهید از WindowList به عنوان یک مدیریتکنندهٔ شمایل (icon manager) استفاده کنید، میتوانید دستور زیر را فراخوانی کنید:
WindowList OnlyIcons, Sticky, OnTop, Geometry
(توجه - گزینههای Only اساساً تمامی گزینههای دیگر را نادیده میگیرند... به جز گزینهٔ OnlyListSkip که تنها باعث میشود WindowList فقط پنجرههای دارای سبک WindowListSkip را در نظر بگیرد.)
XSync
XSynchronize [bool]
+
AnimatedMove x y [Warp]
GeometryWindow Hide | Show | Colorset n | Position x y | Screen S
GeometryWindow Hide [Never | Move | Resize]
پنجرهٔ هندسه را پنهان یا خاموش میکند. اگر پارامترهای اختیاری Move یا Resize داده شوند، تنها در طول عملیات مربوطه پنجرهٔ هندسه را پنهان میکند. پارامتر Never نمایش پنجرهٔ هندسه را دوباره فعال میکند (معادل Show).
GeometryWindow Show [Never | Move | Resize]
پنجرهٔ هندسه را نمایش داده یا روشن میکند (معادل Hide Never). اگر پارامترهای اختیاری Move یا Resize داده شوند، پنجرهٔ هندسه تنها در طول عملیات مربوطه نشان داده میشود. پارامتر Never پنجرهٔ هندسه را خاموش میکند (معادل Hide).
GeometryWindow Colorset _cset_
مجموعهرنگ (colorset) پنجرهٔ هندسه را روی cset تنظیم میکند. از گزینهٔ صریح default برای cset استفاده کنید تا مجموعهرنگ پیشفرض به کار گرفته شود.
GeometryWindow Position [+|-]_x_[p] [+|-]_y_[p]
موقعیتی را که پنجرهٔ هندسه در آن ظاهر میشود پیکربندی میکند. x و y مختصات نسبی بر حسب درصدی از اندازهٔ صفحه هستند. اگر یک '-' در ابتدا قرار گیرد، مختصات به ترتیب از چپ/پایین صفحه محاسبه میشوند. اگر یک 'p' به انتهای مختصات افزوده شود، آنها به عنوان تعداد پیکسلها از لبهٔ مربوطهٔ صفحه تفسیر میشوند. اگر هیچ آرگومان موقعیتی داده نشود، موقعیت پنجرهٔ هندسه به حالت پیشفرض خود یعنی گوشهٔ بالا سمت چپ، یا در صورت شبیهسازی MWM به مرکز صفحه بازمیگردد.
GeometryWindow Screen _RANDRNAME_
مشخص میکند که پنجرهٔ هندسه در کدام صفحه نمایش داده شود. به طور پیشفرض پنجرهٔ هندسه در صفحهٔ جاری نشان داده میشود. اگر یک RANDRNAME معتبر مشخص شود، پنجرهٔ هندسه همواره در آن صفحه نمایش خواهد یافت. از current به عنوان RANDRNAME استفاده کنید تا به حالت پیشفرض بازگردد.
مثالها:
# قرار دادن پنجره هندسه در مرکز صفحه GeometryWindow Position 50 50 # قرار دادن پنجره هندسه در کنار RightPanel GeometryWindow Position -120p 0 # استفاده از مجموعهرنگ ۲ برای پنجره هندسه GeometryWindow Colorset 2 # نمایش پنجره هندسه تنها در مانیتور اصلی GeometryWindow Screen $[monitor.primary] # پنهان کردن پنجره هندسه GeometryWindow Hide
Layer [arg1 arg2] | [default]
به عنوان یک حالت ویژه، default پنجره را در لایهٔ پیشفرض آن، یعنی همان لایهای که در ابتدا در آن قرار داشت، میگذارد. در صورت مشخص نشدن آرگومان یا نامعتبر بودن آرگومانها نیز همین اتفاق میافتد.
Lower
AddToFunc lower-to-bottom + I Layer 0 0 + I Lower
Move [options]
دستور Move بدون گزینه، یک جابهجایی تعاملی را آغاز میکند. پنجره ممکن است به دیگر پنجرهها و مرزهای صفحه بچسبد (snap)، که این ویژگی با سبک SnapAttraction قابل پیکربندی است. جابهجا کردن پنجره به لبهٔ صفحه میتواند برای کشیدن پنجره به صفحههای دیگر (pages) استفاده شود. (برای اطلاعات بیشتر به EdgeScroll و سبک EdgeMoveDelay مراجعه کنید.)
نگهداشتن کلید Alt قابلیت چسبیدن پنجره را غیرفعال کرده و اجازه میدهد بدون هیچ تأخیری میان صفحهها جابهجا شوید. جابهجایی تعاملی را میتوان با کلید Escape یا هر کلید ماوسی که برای جایگذاری پنجره تنظیم نشده باشد لغو کرد. به طور پیشفرض دکمهٔ ۲ ماوس برای لغو عملیات جابهجایی تنظیم شده است. برای تغییر این رفتار میتوانید از دستور Mouse با بافتار ویژهٔ 'P' برای جایگذاری (Placement) استفاده کنید.
شرط پنجرهٔ PlacedByButton میتواند برای بررسی اینکه آیا دکمهٔ خاصی برای جایگذاری پنجره فشرده شده است یا خیر استفاده شود (دستور Current را ببینید).
اگر تنها آرگومان pointer داده شود، پیش از آغاز جابهجایی تعاملی، گوشهٔ بالا سمت چپ پنجره به موقعیت اشارهگر منتقل میشود؛ این قابلیت عمدتاً برای استفادهٔ درونی ماژولهایی مانند FvwmPager در نظر گرفته شده است.
Move pointer
برای جابهجا کردن یک پنجره در جهتی مشخص تا زمانی که به پنجرهای دیگر، آیکون، یا مرز صفحه برخورد کند، از دستور زیر استفاده کنید:
Move shuffle [options] _direction_(s)
آرگومان direction میتواند North/N/Up/U، East/E/Right/R، South/S/Down/D، یا West/W/Left/L باشد. پنجره در جهت مشخصشده جابهجا خواهد شد تا زمانی که به پنجرهای دیگر یا مرز صفحه/EwmhBaseStruts برخورد کند. هنگامی که یک پنجره در مرز صفحه/EwmhBaseStruts قرار دارد، در صورت وجود مانیتور بعدی در آن جهت، به آن مانیتور منتقل میشود. اگر پنجرهای خارج از فضای کاری جاری باشد (بخشی از آن بیرون از صفحه باشد)، به لبهٔ فضای کاری منتقل خواهد شد. پنجرهها به فضای کاری EWMH احترام میگذارند و در EwmhBaseStruts متوقف میشوند، مگر اینکه گزینهٔ صریح ewmhiwa مشخص شده باشد. اگر چند direction داده شود، پنجره جهتها را به همان ترتیبی که در توالی ذکر شدهاند طی خواهد کرد..sp گزینهٔ لفظی Warp اشارهگر ماوس را فوراً به سمت پنجره منتقل میکند. گزینهٔ لفظی all_windows بهجای این که فقط پنجرههای موجود در مسیر حرکت پنجره را بررسی کند، تمام پنجرههای روی همان نمایشگر را در نظر خواهد گرفت. این کار امکان جابهجایی تا مرز پنجرهای که در کنار آن قرار دارد را فراهم میکند. گزینهٔ لفظی both_sides هر دو سمت نزدیک و دور پنجره را در نظر میگیرد (بهطور پیشفرض تنها سمت نزدیک در نظر گرفته میشود).
اگر گزینهٔ لفظی snap به همراه یک نوع چسبیدن (type) شامل windows، icons یا same مشخص شود، پنجره تنها در صورتی متوقف میشود که به پنجرهای دیگر، یک آیکون یا شیئی از همان نوع برخورد کند. اگر گزینهٔ لفظی layers به همراه دو عدد صحیح که لایههای min و max را مشخص میکنند داده شود، تنها پنجرههای واقع در لایههای بین لایهٔ min و max پنجره را متوقف خواهند کرد. برای مثال:
# جابهجایی پنجره به سمت راست. Move shuffle Right # جابهجایی به بالا، تنها در نظر گرفتن پنجرههای روی لایهٔ ۳. Move shuffle layers 3 3 Up # جابهجایی به چپ سپس به بالا Move shuffle Left Up # جابهجایی به بالا سپس به چپ (ممکن است در موقعیت مشابه بالا قرار نگیرد) Move shuffle Up Left
از Move میتوان برای جابهجا کردن یک پنجره به موقعیتی مشخص استفاده کرد:
Move [screen _S_] [desk _N_] [w | m | v]_x_[p | w] \
[w | m | v]_y_[p | w] [Warp] [ewmhiwa]
این دستور پنجره را به موقعیت x و y جابهجا میکند (پایین را ببینید). بهطور پیشفرض، ناحیهٔ کاری EWMH مربوط به هر نمایشگر رعایت میشود (ناحیهٔ کاری هر نمایشگر از طریق EwmhBaseStruts تعیین میشود و هرگونه راهنمای فاصله (strut hints) ارائهشده توسط پنجرههای آن نمایشگر را رعایت میکند). این بدان معناست که اگر پنجرهای خارج از ناحیهٔ کاری قرار گیرد، موقعیت پنجره به گونهای تنظیم میشود که درون ناحیهٔ کاریِ صفحهای که مرکز پنجره روی آن قرار دارد جای گیرد. اگر گزینهٔ پایانی ewmhiwa داده شود، موقعیت پنجره ناحیهٔ کاری را نادیده گرفته و موقعیت آن تعدیل نخواهد شد (این گزینه برای انتقال پنجرهها به خارج از صفحه نمایش و داشتن کنترل کامل بر محل قرارگیری آنها لازم است). اگر گزینهٔ Warp داده شود، اشارهگر ماوس به سمت پنجره منتقل خواهد شد.
اگر گزینهٔ لفظی screen همراه با یک نام صفحهٔ RandR یعنی S مشخص شود، مختصات بهصورت نسبی نسبت به صفحهٔ دادهشده تفسیر میشوند. عرض و ارتفاع آن صفحه بهجای ابعاد کل صفحه نمایش در محاسبات به کار میروند. گزینهٔ screen همانند دستور MoveToScreen تفسیر میشود.
اگر گزینهٔ لفظی desk به همراه شماره میزکار N مشخص شود، پنجره پس از انتقال بر روی میزکار مشخصشده قرار میگیرد. این قابلیت میتواند دو هدف داشته باشد: نخست، میتوانید موقعیت پنجره و میزکار آن را در یک دستور واحد تغییر دهید؛ دوم، هنگامی که یک پنجره بین نمایشگرها جابهجا میشود، میزکار آن بهروزرسانی شده تا با نمایشگر جدید یکسان شود. این گزینه میتواند با تعیین اینکه پنجره در نهایت روی کدام میزکار قرار گیرد، آن رفتار را بازنویسی کند.
آرگومانهای مکانی x و y میتوانند یک موقعیت مطلق یا نسبی را از سمت چپ/بالا (مقادیر مثبت) یا راست/پایین (مقادیر منفی) صفحهٔ سراسری (کادر احاطهکنندهای که شامل همهٔ نمایشگرها است) یا screen مشخصشده تعیین کنند. بهطور پیشفرض، مقدار عددی دادهشده به عنوان درصدی از عرض/ارتفاع صفحه تفسیر میشود، اما یک 'p' پایانی تفسیر را به پیکسل تغییر میدهد، در حالی که یک 'w' پایانی به معنای درصدی از عرض/ارتفاع پنجره است. برای جابهجایی پنجره نسبت به موقعیت فعلیاش، پیشوند 'w' (مخفف «window») را پیش از مقدار x یا y اضافه کنید. برای جابهجایی پنجره به موقعیتی نسبت به مکان فعلی اشارهگر، پیشوند 'm' (مخفف «mouse») را اضافه نمایید. برای جابهجایی پنجره نسبت به مختصات صفحهٔ مجازی، پیشوند 'v' (مخفف «virtual screen») را بیفزایید. این ویژگی بیشتر برای استفادهٔ داخلی توسط FvwmPager است، اما میتواند برای تعیین مختصات دقیق روی صفحهٔ مجازی استفاده شود و بهترین حالت استفاده از آن همراه با پسوند 'p' است. برای بدون تغییر ماندن هر یک از مختصاتها، میتوان «keep» را به جای x یا y مشخص کرد.
برای کاربردهای پیشرفته، آرگومانهای x و y میتوانند چندین بار استفاده شوند، اما بدون پیشوند 'm' یا 'w'. (مثالهای پیچیدهٔ زیر را ببینید).
مثالهای ساده:
# جابهجایی تعاملی Mouse 1 T A Move # جابهجایی پنجره بهطوری که گوشهٔ بالا-چپ در (10%,10%) باشد Mouse 2 T A Move 10 10 # جابهجایی گوشهٔ بالا-چپ به (10pixels,10pixels) Mouse 3 T A Move 10p 10p
مثالهای پیچیدهتر (اینها میتوانند به عنوان کنش به کلیدهای صفحهکلید و غیره مقید شوند؛ گرچه در اینجا تنها خود دستور نمایش داده شده است):
# جابهجایی پنجره بهطوری که پایین-راست آن در پایین-راست # صفحه نمایش قرار گیرد Move -0 -0 # جابهجایی پنجره بهطوری که گوشهٔ بالا-چپ ۱۰ پیکسل # بیرون از لبهٔ بالا-چپ صفحه نمایش باشد Move +-10 +-10 # جابهجایی پنجره ۵٪ به سمت راست، و در # وسط از نظر عمودی Move w+5 50 # جابهجایی پنجره ۱۰ پیکسل به بالا، و بهطوری که لبهٔ چپ # در x=40 پیکسل باشد Move 40p w-10p # جابهجایی پنجره به موقعیت اشارهگر ماوس Move m+0 m+0 # جابهجایی پنجره به مرکز صفحه نمایش (۵۰٪ از موقعیت # صفحه نمایش منهای ۵۰٪ از اندازهٔ پنجره). Move 50-50w 50-50w
همچنین به دستور AnimatedMove نگاه کنید.
MoveToDesk [prev | arg1 [arg2] [min max]]
MoveThreshold [pixels]
نسخههای پیشین fvwm مقدار pixels را روی ۳ تثبیت کرده بودند، که اکنون این مقدار، مقدار پیشفرض است. اگر pixels منفی باشد یا مشخص نشود، مقدار پیشفرض (که ممکن است زمانی که نمایشگرهای ۱۶۰۰۰x۹۰۰۰ پیکسلی از نظر اقتصادی مقرونبهصرفه شوند افزایش یابد) بازگردانده میشود.
MoveToPage [options] [x[p | w] y[p | w]] | [prev]
پنجرهها معمولاً به فراتر از مرزهای میزکار منتقل نمیشوند.
گزینههای ممکن (options) شامل wrapx و wrapy هستند تا هنگام جابهجایی پنجره به فراتر از مرز میزکار، مختصات x یا y چرخش یابد (دور بزند). برای مثال، با wrapx، هنگامی که پنجره از لبهٔ راست میزکار عبور میکند، دوباره در لبهٔ چپ پدیدار میشود. گزینههای nodesklimitx و nodesklimity اجازهٔ جابهجایی پنجرهها به فراتر از مرزهای میزکار در راستای x و y را میدهند (که گزینههای wrapx و wrapy را غیرفعال میکند).
مثالها:.sp
# انتقال پنجره به صفحه (2,3) MoveToPage 2 3 # انتقال پنجره به پایینترین و راستترین صفحه MoveToPage -1 -1 # انتقال پنجره به آخرین صفحه بازدیدشده MoveToPage prev # انتقال پنجره به اندازه دو صفحه به راست و یک # صفحه به بالا، با پیچش در مرزهای میزکار MoveToPage wrapx wrapy +2p -1p
MoveToScreen [screen]
OpaqueMoveSize [percentage]
OpaqueMoveSize 0
تمام پنجرهها با استفاده از خطوط پیرامونی کشسان سنتی (rubber-band) جابهجا میشوند. با
OpaqueMoveSize unlimited
یا در صورتی که درصدی منفی مشخص شود، تمام پنجرهها به صورت توپر جابهجا میشوند. مقدار پیشفرض
OpaqueMoveSize 5
است که اجازه میدهد پنجرههای کوچک به صورت کدر جابهجا شوند اما پنجرههای بزرگ به صورت خطوط کشسان جابهجا شوند. اگر percentage حذف شود یا نامعتبر باشد، مقدار پیشفرض تنظیم میشود. برای تغییر اندازه پنجرهها به صورت کدر میتوانید از سبک ResizeOpaque استفاده کنید. دستور Style را ببینید.
PlaceAgain [Anim] [Icon]
Raise
AddToFunc raise-to-top + I Layer 0 ontop + I Raise
که در آن ontop بالاترین لایه استفادهشده در پیکربندی شماست.
RaiseLower
Resize [[frame] [direction dir] [warptoborder automatic] [fixeddirection] width[p | c | wa | da] height[p | c]]
Resize بدون گزینه، یک تغییر اندازه تعاملی را آغاز میکند.
اگر سبک EdgeResizeDelay تنظیم شده باشد یا کلید Alt فشرده نگه داشته شود، پنجره را میتوان از لبه صفحهنمایش عبور داد و اندازه آن را تغییر داد.
این عملیات را میتوان با کلید Escape یا با فشردن هر یک از دکمههای موشواره (به جز دکمه ۱ که آن را تأیید میکند) لغو کرد.
اگر آرگومانهای اختیاری width و height ارائه شوند، پنجره طوری تغییر اندازه میدهد که ابعاد آن width در height شود. واحدهای width و height به صورت درصد-از-صفحهنمایش هستند، مگر اینکه حرف 'p' به یک یا هر دو مختصات اضافه شود، که در این صورت مکان بر حسب پیکسل مشخص میشود. با پسوند 'c' واحد تعریفشده توسط برنامه کلاینت (از این رو c برگرفته از client) استفاده میشود. با پسوند 'wa' مقدار، درصدی از عرض یا ارتفاع ناحیه کاری EWMH است، و با پسوند 'da' درصدی از عرض یا ارتفاع ناحیه کاری پویای EWMH است. بنابراین میتوانید بنویسید:
Resize 80c 24c
تا یک پنجره ترمینال دقیقاً به اندازه 80x24 نویسه تنظیم شود.
اگر پیشوند حرف 'w' به width یا height اضافه شود، اندازه به عنوان یک مقدار مطلق در نظر گرفته نمیشود بلکه به اندازه فعلی پنجره افزوده میشود. مثال:
# بزرگ کردن پنجره به اندازه یک خط Resize keep w+1c
هر دو مقدار width و height میتوانند منفی باشند. در این حالت اندازه جدید برابر با اندازه صفحهنمایش منهای مقدار دادهشده خواهد بود. اگر هر یک از مقادیر "keep" باشد، بُعد متناظر آن در پنجره دستنخورده باقی میماند. اندازه جدید برابر با اندازه پنجره کلاینت است، بنابراین
Resize 100 100
ممکن است پنجره را بزرگتر از صفحهنمایش کند. برای مبنا قرار دادن اندازه جدید بر اساس اندازه کل پنجره fvwm، گزینه frame را بعد از دستور اضافه کنید. گزینههای fixeddirection، direction و warptoborder فقط در عملیات جابهجایی تعاملی استفاده میشوند. با fixeddirection حتی اگر اشارهگر از حاشیه مقابل عبور کند، همان حاشیه جابهجا میشود. گزینه direction باید با یک نام جهت مانند "NorthWest"، "South" یا "East" دنبال شود (موضوع مشخص است). تغییر اندازه بلافاصله شروع میشود، حتی اگر اشارهگر روی یک حاشیه قرار نداشته باشد. اگر گزینه خاص automatic به عنوان آرگومان جهت داده شود، جهت تغییر اندازه بر اساس موقعیت اشارهگر در پنجره محاسبه میشود. اگر اشارهگر در وسط پنجره باشد، هیچ جهتی محاسبه نمیشود. گزینه warptoborder میتواند برای انتقال سریع اشارهگر (warp) به جهت مشخصشده استفاده شود. همانند گزینه automatic برای direction، حاشیهای که اشارهگر باید به آن منتقل شود بر اساس فاصله اشارهگر به یک حاشیه مشخص محاسبه میشود. همچنین، اگر تغییر اندازه با کلیک روی حاشیه پنجره آغاز شود، اشارهگر به لبه بیرونی حاشیه منتقل میشود..sp
AddToFunc ResizeSE I Resize Direction SE Mouse 3 A M ResizeSE
Resize [bottomright | br x y]
ResizeMaximize [resize-arguments]
ResizeMove resize-arguments move-arguments
مثالها:
# Move window to top left corner and cover # most of the screen ResizeMove -10p -20p 0 0 # Grow the focused window towards the top of screen Current Resize keep w+$[w.y]p keep 0
نکته: اگر از گزینهٔ bottomright دستور Resize استفاده شود، ممکن است Fvwm نتواند دستور را به درستی تجزیه کند.
ResizeMoveMaximize resize-arguments move-arguments
RestackTransients
SetAnimation milliseconds-delay [fractions-to-move-list]
SetAnimation 10 -.01 0 .01 .03 .08 .18 .3 \ .45 .6 .75 .85 .90 .94 .97 .99 1.0
تاخیر میان فریمها را روی ۱۰ میلیثانیه تنظیم میکند و موقعیتهای ۱۶ فریم حرکت پویانمایی را تعیین مینماید. مقادیر منفی نیز مجاز هستند و بهویژه میتوان از آنها برای بخشیدن جلوهٔ کارتونیتر به حرکت استفاده کرد، به این شکل که پنجره برای لحظهای کوتاه کمی در خلاف جهت حرکت اصلی جابهجا میشود. تنظیمات فوق مقادیر پیشفرض هستند.
XorPixmap [pixmap]
XorValue [number]
CursorBarrier [destroy] [options] [left top right bottom]
با چندین بار فراخوانی CursorBarrier میتوان چندین سد ایجاد کرد. این کار امکان ایجاد چندین ناحیه برای محدود کردن مکاننما را فراهم میکند (مانند هر نمایشگر در یک پیکربندی چندنمایشگره)، و سپس میتوان از CursorMove یا WarpToWindow برای جابهجایی مکاننما میان سدها استفاده کرد. اگر دستور destroy داده شود، تمام سدها نابود شده و دوباره حرکت آزادانه موشواره ممکن میشود. اگر به دنبال destroy یک عدد صحیح N بیاید، تنها همان سد نابود میشود (سدها به ترتیب ایجاد از ۰ شمارهگذاری میشوند). اگر عدد صحیح منفی باشد، شمارش به صورت معکوس انجام میشود؛ مانند «-1» برای جدیدترین سد ایجادشده، «-2» برای دومین سد جدید، و به همین ترتیب. هنگامی که یک سد نابود میشود، تمام سدهای پس از آن مجدداً شمارهگذاری میشوند. در عمل بهتر است از destroy -1 استفاده شود تا جدیدترین سد بدون تأثیر بر سدهای قبلی نابود گردد.
به صورت پیشفرض، کلید میانبر ctrl+shift+D با فراخوانی CursorBarrier destroy تمام سدهای مکاننما را نابود میکند.
در اینجا چند مثال آورده شده است:
# یک سد با فاصله ۱۵٪ از چپ/راست و ۱۰٪ از بالا/پایین.
CursorBarrier 15 10 15 10
# سدی برای محدود کردن موشواره به نمایشگر جاری.
CursorBarrier screen c
# سدی برای محدود کردن موشواره به یک پنجره انتخابشده
Pick CursorBarrier coords $[w.x]p $[w.y]p \
$[math.+.$[w.x],$[w.width]]p $[math.+.$[w.y],$[w.height]]p
# نابود کردن تمام سدها
CursorBarrier destroy
توجه داشته باشید که اگر محدودیت CURSOR_BARRIER پر شود، تمام CursorBarrierهای تعریفشده لغو میشوند. با این حال در عمل رخ دادن این اتفاق بعید است. اگر چنین شود، پیامی در گزارشهای اشکالزدایی fvwm3 چاپ خواهد شد.
دستور CursorBarrier تنها زمانی کار میکند که fvwm با افزونه XFixes کامپایل شده باشد.
CursorMove [screen RANDRNAME] horizontal[p] vertical[p]
# یک صفحه کامل به پایین و راست جابهجا شو. CursorMove 100 100 # دو صفحه کامل به پایین جابهجا شو. CursorMove 0 200 # نیم صفحه به راست و یکچهارم صفحه به بالا جابهجا شو. CursorMove 50 -25 # ۱۰۰ پیکسل به چپ و ۵۰ پیکسل به پایین جابهجا شو. CursorMove -100p 50p
اگر گزینه screen به همراه نام معتبر یک نمایشگر RandR ذکر شود، CursorMove مکاننما را به موقعیت مطلق (با شروع از گوشه بالا سمت چپ) تعیینشده توسط آرگومانها منتقل میکند؛ این مقادیر میتوانند به صورت درصد اندازه نمایشگر، یا یک موقعیت مطلق با پسوند 'p' باشند. برای مثال:
# انتقال مکاننما به مرکز نمایشگر DP-1 CursorMove screen DP-1 50 50 # انتقال مکاننما به موقعیت دقیق (400, 200) در نمایشگر DP-2 CursorMove screen DP-2 400p 200p
هنگام جابهجایی به یک screen مشخصشده، مقادیر horizontal و vertical همواره به گونهای جابهجا میشوند که درون صفحه فعلی نمایشگر مشخصشده قرار گیرند. به عنوان مثال، مقادیر '50'، '150' و '-150' همگی در مرکز نمایشگر قرار خواهند گرفت و صفحه نمایشگر را تغییر نمیدهند. برای تغییر صفحه یک نمایشگر مشخص از GotoPage استفاده کنید. مقادیر منفی میتوانند برای تعیین فاصله از گوشه راست/پایین نمایشگر استفاده شوند.
دستور CusorMove تنها میتواند مکاننما را نسبت به موقعیت جاریاش یا به یک موقعیت مطلق در یک نمایشگر مشخص جابهجا کند. برای جابهجایی مکاننما نسبت به یک پنجره، از WarpToWindow استفاده کنید.
FlipFocus [NoWarp]
Focus [NoWarp]
هنگامی که آرگومان NoWarp داده شده باشد، Focus نمیتواند تمرکز صفحهکلید را به پنجرههای موجود در دیگر میزکارها (desks) منتقل کند.
برای بالا آوردن و/یا پرش دادن اشارهگر به یک پنجره به همراه Focus یا FlipFocus، از تابعی مانند زیر استفاده کنید:
AddToFunc SelectWindow + I Focus + I Iconify false + I Raise + I WarpToWindow 50 8p
WarpToWindow [!raise | raise] x[p] y[p]
WindowId root WarpToWindow 50 50
Close
Delete
Destroy
Iconify [bool]
تعدادی گزینهٔ Style وجود دارد که بر ظاهر و رفتار آیکونها تأثیر میگذارند (مانند StickyIcon و NoIcon).
برای سازگاری با نسخههای پیشین، آرگومان اختیاری میتواند بهجای "True" یک عدد مثبت، یا بهجای "False" یک عدد منفی باشد. توجه داشته باشید که این نحو منسوخ شده است و در آینده حذف خواهد شد.
Maximize [flags] [bool | forget] [horizontal[p]] [vertical[p]]
تنها با پارامتر "forget"، یک پنجرهٔ بیشینهشده به حالت عادی بازمیگردد اما اندازهٔ بیشینهشدهٔ فعلی خود را حفظ میکند. این ویژگی میتواند در ترکیب با دستورهای ResizeMaximize و ResizeMoveMaximize مفید باشد. اگر پنجره بیشینه نباشد، هیچ اتفاقی رخ نمیدهد.
با آرگومانهای اختیاری horizontal و vertical که بهصورت درصدی از یک صفحهٔ کامل بیان میشوند، کاربر میتواند اندازهٔ جدید پنجره را کنترل کند. پسوند اختیاری 'p' میتواند برای مشخص کردن پیکسل بهجای درصد اندازهٔ صفحه استفاده شود. اگر horizontal بزرگتر از 0 باشد، بعد افقی پنجره روی horizontal*screen_width/100 تنظیم میشود. اگر مقدار کوچکتر از 0 باشد، اندازه از عرض صفحه کم میشود، یعنی -25 همانند 75 است. اگر horizontal برابر با "grow" باشد، پنجره تا زمان رسیدن به هر مانعی تا اندازهٔ فضای موجود فعلی بیشینه (بزرگ) میشود. تغییر اندازهٔ عمودی نیز به همین صورت است. اگر هر دو مقدار افقی و عمودی "grow" باشند، پنجره ابتدا بهصورت عمودی و سپس بهصورت افقی برای یافتن فضا گسترش پیدا میکند. بهجای آرگومان افقی "grow"، میتوان از "growleft" یا "growright" و به همین ترتیب بهجای عمودی از "growup" و "growdown" استفاده کرد.
آرگومان اختیاری flags فهرستی جداشده با فاصله شامل کلمات کلیدی زیر است: fullscreen، ewmhiwa، growonwindowlayer، growonlayers، keepgrowing، all_windows، both_sides و screen. گزینهٔ fullscreen در صورتی که هینت مناسب EWMH تنظیم شده باشد، باعث تمامصفحه شدن پنجره میشود. ewmhiwa باعث میشود fvwm ناحیهٔ کاری EWMH را نادیده بگیرد. growonwindowlayer باعث میشود روشهای مختلف grow، پنجرههای مربوط به لایهای غیر از لایهٔ فعلی پنجرهای که در حال بیشینهسازی است را نادیده بگیرند. گزینهٔ growonlayers باید دو آرگومان عدد صحیح داشته باشد. اولی کمینهٔ لایه و دومی بیشینهٔ لایه برای استفاده است. پنجرههایی که خارج از این محدودهٔ لایهها باشند توسط روشهای grow نادیده گرفته میشوند. یک مقدار منفی برای آرگومان اول یا دوم به معنی در نظر نگرفتن هیچ کمینه یا بیشینهای برای لایه است. گزینهٔ all_windows تمام پنجرههای موجود در همان نمایشگر را در جهتی که پنجره در حال گسترش است در نظر میگیرد. از این گزینه میتوان برای گسترش پنجره تا لبهٔ پنجرهای که در کنار آن قرار دارد استفاده کرد. گزینهٔ both_sides هنگام گسترش، هر دو طرف پنجرههای دیگر را در نظر میگیرد (بهطور پیشفرض تنها طرف نزدیک در نظر گرفته میشود). این گزینه میتواند برای گسترش پنجره تا مرزهای پنجرهای که اکنون درون آن قرار دارد به کار رود. گزینهٔ keepgrowing به پنجره اجازه میدهد تا فراتر از هر مرز پنجرهای که در حال حاضر با آن در تماس است به گسترش خود ادامه دهد تا زمانی که به مرز نزدیکترین پنجرهٔ بعدی برسد. screen باید آرگومانی داشته باشد که صفحهای را که عملیات باید روی آن انجام شود تعیین کند.
در اینجا چند مثال آورده شده است. مورد زیر دکمهای به نوار عنوان میافزاید تا پنجره را به اندازهٔ عمودی کامل صفحه تغییر دهد:
Mouse 0 4 A Maximize 0 100
مورد زیر باعث کشیده شدن پنجرهها تا تمام عرض صفحه میشود:
Mouse 0 4 A Maximize 100 0
این مورد پنجرهای با نصف اندازهٔ صفحه در هر جهت میسازد:
Mouse 0 4 A Maximize 50 50
برای گسترش افقی یک پنجره تا زمانی که پنجرهٔ دیگری پیدا شود:
Mouse 0 4 A Maximize 0 grow
برای گسترش یک پنجره تا زمانی که به پنجرهٔ دیگری در همان لایه یا لایهای بالاتر برخورد کند:
Mouse 0 4 A Maximize growonlayers $[w.layer] -1 grow grow
برای گسترش یک پنجره اما خالی گذاشتن ۶۰ پیکسل پایینی صفحه:
Mouse 0 4 A Maximize 100 -60p
از مقادیر بزرگتر از 100 میتوان با احتیاط استفاده کرد.
Refresh
RefreshWindow
Stick [bool]
StickAcrossPages [bool]
WindowShade [bool] | [[ShadeAgain] direction]
Style * WindowShadeShrinks, WindowShadeSteps 20, \ WindowShadeLazy Mouse 1 - S WindowShade North Mouse 1 [ S WindowShade West Mouse 1 ] S WindowShade E Mouse 1 _ S WindowShade S
نکته: هنگامی که پنجرهای با یک آرگومان direction جمع شده باشد و جهت عنوان پنجره تغییر کند (گزینهٔ Style با نام TitleAtTop را ببینید)، جهت جمعشدن تغییر نمیکند. این ممکن است بسیار عجیب به نظر برسد. پنجرههایی که بدون آرگومان direction جمع شدهاند در جهت نوار عنوان جمعشده باقی میمانند.
برای سازگاری با نسخههای پیشین، آرگومان اختیاری همچنین میتواند ۱ برای مشخص کردن «on» و ۲ برای مشخص کردن «off» باشد. توجه داشته باشید که این نحو منسوخ شده است و در آینده حذف خواهد شد.
پیوندهای موش و کلید (Mouse & Key Bindings)
IgnoreModifiers [Modifiers]
آرگومان Modifiers نحوی مشابه پیوندهای Mouse یا Key دارد، به همراه افزودن 'L' به معنای کلید caps lock. مقدار پیشفرض "L" است. Modifiers میتواند حذف شود، به این معنی که هیچ کلید تبدیلی نادیده گرفته نمیشود. این دستور زمانی کاربرد دارد که کلیدهای num-lock و scroll-lock با میانبرهای شما تداخل داشته باشند. در XFree86 کلید تبدیل '2' معمولاً num-lock است و '5' به کلید scroll-lock اشاره دارد. برای غیرفعال کردن همه این کلیدهای تبدیل مزاحم میتوانید از این دستور استفاده کنید:
IgnoreModifiers L25
اگر آرگومان Modifiers رشتهٔ "default" باشد، fvwm به مقدار پیشفرض "L" بازمیگردد.
مهم این دستور ترافیک شبکه اضافی زیادی ایجاد میکند، که به پردازنده، اتصال شبکه، تعداد دستورهای Key یا Mouse در فایل پیکربندی شما و تعداد کلیدهای تبدیلی که میخواهید نادیده بگیرید بستگی دارد. اگر سیستمی فوقالعاده سریع ندارید یا پیوندهای بسیار کمی دارید، نباید بیش از دو کلید تبدیل را نادیده بگیرید. یعنی نادیده نگیرید
اگر مشکلی با آن ندارید. در FAQ میتوانید راهحل بهتری برای این مشکل بیابید.
EdgeCommand [screen RANDRNAME] [direction [Function]]
هنگامی که نشانگر موش وارد چارچوبهای ناوبری نامرئی احاطهکننده صفحه نمایش مرئی شود، Function اجرا میشود. این پیوند تنها زمانی کار میکند که EdgeThickness روی مقداری بزرگتر از ۰ تنظیم شده باشد. اگر تابعی به یک لبه پیوند داده شود، پیمایش مشخصشده توسط EdgeScroll برای این لبه غیرفعال میشود. امکان پیوند دادن تابع تنها به برخی از لبهها و استفاده از سایر لبهها برای پیمایش وجود دارد. این دستور برای بالا بردن یا پایین بردن پنجرههای خاص در هنگام ورود نشانگر موش به یک لبه در نظر گرفته شده است. برای ایجاد تأخیر هنگام بالا بردن یا پایین بردن پنجرهها میتوان از FvwmAuto استفاده کرد. مثال زیر FvwmButtons را در صورتی که نشانگر موش وارد لبهٔ بالایی صفحه شود بالا میآورد.
# Disable EdgeScrolling but make it possible # to move windows over the screen edge EdgeResistance -1 Style * EdgeMoveDelay 250 Style * EdgeMoveResistance 20 # Set thickness of the edge of the screen to 1 EdgeThickness 1 # Give focus to FvwmButtons if the mouse # hits top edge EdgeCommand Top Next (FvwmButtons) Focus # Make sure the Next command matches the window Style FvwmButtons CirculateHit Module FvwmButtons Module FvwmAuto 100 "Silent AutoRaiseFunction" \ "Silent AutoLowerFunction" # If any window except FvwmButtons has # focus when calling this function # FvwmButtons are lowered DestroyFunc AutoLowerFunction AddToFunc AutoLowerFunction + I Current (!FvwmButtons) All (FvwmButtons) Lower # If FvwmButtons has focus when calling this function raise it DestroyFunc AutoRaiseFunction AddToFunc AutoRaiseFunction + I Current (FvwmButtons) Raise
به طور معمول، چارچوبهای ناوبری نامرئی تنها روی لبههایی از صفحه نمایش قرار دارند که با صفحههای مجازی هممرز هستند. اگر لبهای از صفحه دستوری متصل به خود داشته باشد، چارچوب ناوبری همیشه روی آن لبه ایجاد میشود.
EdgeLeaveCommand [screen RANDRNAME] [direction [Function]]
هنگامی که نشانگر موش چارچوبهای ناوبری نامرئی احاطهکننده صفحه نمایش مرئی را ترک کند، Function اجرا میشود. این پیوند تنها زمانی کار میکند که EdgeThickness روی مقداری بزرگتر از ۰ تنظیم شده باشد. اگر تابعی به یک لبه پیوند داده شود، پیمایش مشخصشده توسط EdgeScroll برای این لبه غیرفعال میشود. امکان پیوند دادن تابع تنها به برخی از لبهها و استفاده از سایر لبهها برای پیمایش وجود دارد. این دستور برای بالا بردن یا پایین بردن پنجرههای خاص در هنگام خروج نشانگر موش از یک لبه در نظر گرفته شده است. برای ایجاد تأخیر هنگام بالا بردن یا پایین بردن پنجرهها میتوان از FvwmAuto استفاده کرد. مثال مربوط به EdgeCommand را ببینید.
به طور معمول، چارچوبهای ناوبری نامرئی تنها روی لبههایی از صفحه نمایش قرار دارند که با صفحههای مجازی هممرز هستند. اگر لبهای از صفحه دستوری متصل به خود داشته باشد، چارچوب ناوبری همیشه روی آن لبه ایجاد میشود.
Key [(window)] Keyname Context Modifiers Function
بافت ویژهٔ 'M' برای منوها میتواند برای تعریف (یا بازتعریف) کنترلهای منو استفاده شود. این بافت میتواند بهتنهایی یا همراه با 'T'، 'S'، 'I'، '['، ']'، '-' و '_' به کار رود. برای جزئیات به بخش Menu Bindings مراجعه کنید.
مثال زیر فهرست توکار پنجرهها را طوری نگاشت میکند تا هنگام
فشرده شدن، بدون در نظر گرفتن مکان نشانگر ماوس، باز شود:
Key F11 A SCM WindowList
نگاشت یک کلید به دکمهٔ نوار عنوان باعث نمایان شدن آن دکمه میشود. لطفاً برای جزئیات به دستور Mouse مراجعه کنید.
Mouse [(window)] Button Context Modifiers Function
پارامتر Context مشخص میکند که نگاشت در کجا اعمال میشود. بافتهای معتبر عبارتند از: 'R' برای پنجره ریشه، 'W' برای پنجره برنامه، 'D' برای برنامه میزکار (مانند kdesktop یا Nautilus desktop)، 'T' برای نوار عنوان پنجره، 'S' برای نوار کناری، بالایی یا پایینی پنجره، '['، ']'، '-' و '_' تنها برای لبههای چپ، راست، بالا یا پایین، 'F' برای قاب پنجره (گوشهها)، '<'، '^'، '>' و 'v' برای گوشهٔ بالا-چپ، بالا-راست، پایین-راست یا پایین-چپ، 'I' برای پنجره آیکون، یا '0' تا '9' برای دکمههای نوار عنوان، یا هر ترکیبی از این حروف. بافت 'A' برای هر بافتی اعمال میشود. برای نمونه، بافت "FST" زمانی اعمال میشود که ماوس در هر کجای کادر پنجره به جز دکمههای نوار عنوان قرار داشته باشد. برای یک پنجره بدون تزیینات، تنها 'S' و 'W' معتبر هستند.
بافت ویژهٔ 'M' برای منوها میتواند برای تعریف (یا بازتعریف) کنترلهای منو استفاده شود. این بافت میتواند بهتنهایی یا همراه با 'T'، 'S'، 'I'، '['، ']'، '-' و '_' به کار رود. برای جزئیات به بخش Menu Bindings مراجعه کنید.
بافت ویژهٔ 'P' کنترل میکند چه دکمههایی میتوانند برای جایگذاری پنجره استفاده شوند. هنگام استفاده از این بافت هیچ تبدیلکنندهای (modifier) مجاز نیست (Modifiers باید N باشد)، هیچ window مجاز نیست، و Function باید یکی از مقادیر PlaceWindow، PlaceWindowDrag، PlaceWindowInteractive، CancelPlacement، CancelPlacementDrag، CancelPlacementInteractive یا - باشد.
دستور PlaceWindow دکمهٔ Button را برای جایگذاری پنجره، هم در حالت تعاملی و هم جابهجایی با کشیدن (drag move)، قابل استفاده میکند. دستور CancelPlacement عکس این عمل را انجام میدهد؛ یعنی باعث میشود Button جابهجایی را چه تعاملی و چه با کشیدن لغو کند. با این حال ممکن است نحوه تغییر اندازه پنجرههای جدید پس از قرارگیری را بازنویسی نکند. این مورد توسط دستور Emulate کنترل میشود. همچنین پنجرهای که در حال کشیده شدن است را میتوان همواره با رها کردن دکمهٔ نگهداشتهشده هنگام کشیدن جایگذاری کرد، بدون در نظر گرفتن اینکه روی PlaceWindow تنظیم شده باشد یا خیر.
توابع PlaceWindowDrag و PlaceWindowInteractive/CancelPlacementDrag و CancelPlacementInteractive همانند PlaceWindow/CancelPlacement عمل میکنند، با این استثنا که فقط روی پنجرههایی اثر میگذارند که به ترتیب کشیده شدهاند یا بهصورت تعاملی جایگذاری شدهاند.
مقدار - معادل CancelPlacement است.
مثال زیر همه دکمهها به جز دکمه ۳ را برای جایگذاری تعاملی قابل استفاده میکند و جابهجاییهای با کشیدن را که با دکمههایی غیر از ۱ شروع شدهاند، در صورتی که دکمه ۱ پیش از اتمام جابهجایی فشرده شود، لغو میکند:
Mouse 0 P N PlaceWindow Mouse 3 P N CancelPlacement Mouse 1 P N CancelPlacementDrag
بهطور پیشفرض، نگاشت روی همه پنجرهها اعمال میشود. میتوانید با مشخص کردن نام پنجره در کروشه تعیین کنید که نگاشت فقط به پنجرههای خاصی اعمال شود. نام پنجره یک الگوی نویسه عمومی (wildcard) است که کلاس، منبع (resource) یا نام پنجرهای را که میخواهید نگاشت روی آن اعمال شود مشخص میکند.
مثال زیر نشان میدهد چگونه میتوان از یک نگاشت کلید یکسان برای انجام توابع مختلف بسته به پنجرهای که تمرکز دارد استفاده کرد:
Key (rxvt) V A C Echo ctrl-V-in-RXVT Key (*term) V A C Echo ctrl-V-in-Term Key (*vim) V A C -- Key V A C Echo ctrl-V-elsewhere
یک کنش '--' مشخص میکند که رویداد باید برای رسیدگی به پنجرهٔ تعیینشده ارسال شود. این تنها برای نگاشتهای مختص پنجره یک کنش معتبر است.
این مثال نحوه نمایش WindowList را هنگامی که دکمه ۳ روی یک پنجره rxvt فشرده میشود نشان میدهد:
Mouse (rxvt) 3 A A WindowList
توجه داشته باشید که Fvwm در واقع تمام رویدادها را برای یک نگاشت ویژهٔ پنجره شنود میکند و (در صورتی که پنجره دارای تمرکز با هیچیک از نگاشتها تطابق نداشته باشد) یک نسخهٔ ساختگی (synthetic) از رویداد را به پنجره ارسال میکند. این رفتار باید برای بیشتر برنامهها شفاف باشد، اما (به دلایل امنیتی) برخی برنامهها بهطور پیشفرض این رویدادهای ساختگی را نادیده میگیرند - xterm یکی از آنها است. برای فعال کردن رسیدگی به این رویدادها، خط زیر را به فایل ~/.Xdefaults خود بیفزایید:
XTerm*allowSendEvents: true
پارامتر Modifiers هر ترکیبی است از: 'N' برای بدون تبدیلکننده، 'C' برای Control، 'S' برای Shift، 'M' برای Meta، 'L' برای Caps-Lock یا 'A' برای هر تبدیلکنندهای. برای مثال، تبدیلکنندهٔ "SM" زمانی اعمال میشود که هر دوی کلیدهای
و
پایین نگه داشته شده باشند. تبدیلکنندههای mod1 تا mod5 در X11 با ارقام '1' تا '5' نشان داده میشوند. تبدیلکنندهٔ 'L' بهطور پیشفرض نادیده گرفته میشود. برای فعال کردن آن، از دستور IgnoreModifiers استفاده کنید.
پارامتر Function یکی از دستورات fvwm است.
دکمههای نوار عنوان شمارهگذاری شدهاند، بهطوری که دکمههای با شماره فرد در سمت چپ نوار عنوان و شمارههای زوج در سمت راست قرار دارند. دکمههای با شماره کوچکتر به سمت بیرون پنجره و دکمههای با شماره بزرگتر به سمت وسط پنجره نمایش داده میشوند (0 مخفف 10 است). بهطور خلاصه، دکمهها بدین صورت شمارهگذاری شدهاند:
1 3 5 7 9 0 8 6 4 2
بالاترین شماره فرد دکمهای که کنشی به آن نگاشت شده است، تعداد دکمههای رسمشده در سمت چپ نوار عنوان را مشخص میکند. بالاترین شماره زوج نیز تعداد دکمههای رسمشده در سمت راست را تعیین میکند. کنشها را میتوان هم به دکمههای ماوس و هم به کلیدهای صفحهکلید نگاشت کرد. PointerKey [(window)] Keyname Context Modifiers Function
مثال:
Style * SloppyFocus PointerKey f1 a m Menu MainMenu
کنترل سبکهای پنجره (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
از بین بردن سبک "*" امکانپذیر است، اما در واقع توصیه نمیشود. برای نمونه:.sp
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، نشانگر به پنجرهٔ انتخابشده پرش میکند یا خیر.
سبک FPLenient اجازه میدهد پنجرههایی که خواهان فوکوس نیستند، مانند FvwmPager یا xclock، فوکوس را دریافت کنند.
سبک FPFocusClickButtons فهرستی از کلیدهای موشواره را دریافت میکند که در صورت استفاده از سبک مناسب، با کلیک روی آنها میتوان پنجره را فوکوس کرد یا بالا آورد. حالت پیشفرض استفاده از سه کلید اول ("123") است.
سبک FPFocusClickModifiers درست مانند دستور Key فهرستی از کلیدهای تغییردهنده را میگیرد. برای عملکرد کلیک جهت فوکوس یا بالا آوردن پنجره، باید دقیقاً همان ترکیب کلیدهای تغییردهنده فشرده شود. حالت پیشفرض عدم استفاده از کلیدهای تغییردهنده ("N") است.
با سبک FPPassFocusClick، کلیکی که برای فوکوس کردن روی پنجره استفاده شده است به برنامه منتقل میشود.
با سبک FPAllowFocusClickFunction، کلیکی که برای فوکوس کردن روی پنجره به کار رفته میتواند یک کنش عادی را که با دستور Mouse به پنجره متصل شده است نیز اجرا کند.
اگر از سبک FPIgnoreFocusClickMotion استفاده شود، کلیک در یک پنجره و سپس کشیدن نشانگر با کلید فشردهشده، بهعنوان کلیک جهت فوکوس روی پنجره به حساب نمیآید. در عوض، برنامه این رویدادها را بهصورت عادی پردازش میکند. این قابلیت برای انتخاب متن در پنجرهٔ پایانه با موشواره بدون بالا آوردن پنجره سودمند است. با این حال، دیگر تضمینی وجود ندارد که نگاشتهای موشواره روی پنجرهٔ کلاینت کار کنند (به دستور Mouse مراجعه کنید). این سبک کلیک اولیه را مجبور به ارسال به برنامه میکند. فاصلهای که نشانگر برای تحریک این رویداد باید حرکت داده شود توسط دستور MoveThreshold کنترل میشود.
سبکهای FPSortWindowlistByFocus و !FPSortWindowlistByFocus کنترل میکنند که آیا فهرست پنجرههای داخلی بر اساس ترتیب فوکوس شدن پنجرهها مرتب شود یا بر اساس ترتیب ایجاد شدن آنها. مورد دوم حالت پیشفرض برای ClickToFocus و SloppyFocus است.
کلیک روی پنجره برای بالا آوردن آن
سبکهای 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 را بررسی کنید. عنوانها در سمت چپ یا راست پنجرهها با سبکهای زیر تکمیل میشوند:
بهطور معمول، متن عنوانها در سمت چپ پنجره ۹۰ درجه در خلاف جهت عقربههای ساعت نسبت به حالت عمودی معمول چرخانده میشود، و برای عنوانهای سمت راست ۹۰ درجه در جهت عقربههای ساعت میچرخد. همچنین اگر TitleAtLeft به کار رود میتوان آن را در جهت مخالف با LeftTitleRotatedCW چرخاند، و اگر TitleAtRight استفاده شود با RightTitleRotatedCCW این کار امکانپذیر است. حالتهای پیشفرض را میتوان با LeftTitleRotatedCCW و RightTitleRotatedCW بازیابی کرد. همچنین متن افقی معمول را میتوان در صورت استفاده از TitleAtTop با TopTitleRotated، و در صورت استفاده از TitleAtBottom با BottomTitleRotated چرخاند. مقادیر پیشفرض را میتوان با TopTitleNotRotated و BottomTitleNotRotated بازیابی نمود.
بهطور پیشفرض، تزئینات نوار عنوان که با دستور TitleStyle تعریف شدهاند، به پیروی از چرخش متن عنوان میچرخند (پاراگراف قبلی را ببینید). این رفتار را میتوان با استفاده از سبک !UseTitleDecorRotation غیرفعال کرد. سبک UseTitleDecorRotation مجدداً به حالت پیشفرض بازمیگردد.
با سبک StippledTitle، عنوانها با همان جلوهای ترسیم میشوند که معمولاً برای پنجرههای دارای سبک Sticky، StickyAcrossPages یا StickyAcrossDesks اختصاص یافته است. سبک !StippledTitle به حالت عنوانهای معمولی بازمیگردد. StippledTitleOff معادل !StippledTitle است اما منسوخ شده است.
دستور Colorset شمارهٔ colorset را بهعنوان تنها آرگومان خود دریافت میکند و رنگهای تنظیمشده توسط Color را لغو و جایگزین میکند. در عوض، رنگهای متناظر از colorset مشخصشده استفاده میشوند. توجه داشته باشید که سایر قابلیتهای یک colorset استفاده نمیشوند. برای این منظور، از سبک تزئینی Colorset در دستورهای TitleStyle و ButtonStyle استفاده کنید. برای توقف استفاده از colorset، از قید شمارهٔ colorset صرفنظر میشود.
سبک BorderColorset هشت عدد صحیح مثبت را بهعنوان آرگومانهای خود میگیرد و colorsetهای دادهشده را روی هشت جزء جداگانهٔ حاشیهٔ پنجره اعمال خواهد کرد..sp برای سازگاری با نسخههای پیشین، اگر یک عدد صحیح داده شود، بر تمامی بخشهای لبهٔ پنجره اعمال میشود.
لبه به تعاریف زیر تقسیم میشود و ترتیبی مشابه با مجموعهرنگهایی (colorsets) دارد که روی لبه اعمال خواهند شد.
BorderColorset North, North East, East, South East, South, South West, West, North West
North، East، South، و West به بخشهای بالا، چپ، پایین، و راست لبهٔ پنجره اشاره دارند.
NE، SE، SW، و NW به دستگیرههای پنجره اشاره میکنند.
نکته: به دلیل نحوهٔ رندر شدن دستگیرههای پنجره، هیچ راهی وجود ندارد که یک لبهٔ کامل پنجره همرنگ با مقدار تعریفشده توسط North، South، East، یا West شود.
گزینهٔ سبکِ HilightBorderColorset همانند BorderColorset عمل میکند اما زمانی به کار میرود که پنجره دارای فوکوس باشد.
سبک !IconTitle نمایش برچسبهای آیکون را غیرفعال میکند، در حالی که سبک معکوس آن یعنی IconTitle برچسبهای آیکون را فعال میسازد (رفتار پیشفرض). NoIconTitle معادل !IconTitle است اما منسوخ شده است.
گزینهٔ IconTitleColorset شمارهٔ colorset را به عنوان تنها آرگومان خود دریافت کرده و رنگهای تعیینشده توسط Color یا Colorset را بازنویسی میکند. برای توقف استفاده از این colorset، آرگومان حذف میشود.
گزینهٔ HilightIconTitleColorset شمارهٔ colorset را به عنوان تنها آرگومان خود دریافت کرده و رنگهای تعیینشده توسط HilightColorset را بازنویسی میکند. برای توقف استفاده از این colorset، آرگومان حذف میشود.
گزینهٔ IconBackgroundColorset شمارهٔ colorset را به عنوان تنها آرگومان خود میگیرد و از آن برای تنظیم پسزمینه برای تصویر آیکون استفاده میکند. بهطور پیشفرض، تصویر آیکون روی یک تصویر پسزمینه کشیده نمیشود. برای بازگرداندن پیشفرض، آرگومان حذف میشود.
گزینهٔ 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 توصیف میکند که نام مرئی پنجره چگونه باید باشد، و جاینماهای زیر در آن معتبر هستند:
%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 غیرفعال کرد.
آیکونها، لولهکردن، بیشینهسازی، جابهجایی و تغییر اندازه (Icons, shading, maximizing, movement, resizing)
یک استثنا برای این قواعد وجود دارد، به این ترتیب که
Style * Icon unknown.xpm
آیکون unknown.xpm را به تمام پنجرهها تحمیل نمیکند، بلکه صرفاً مانند دستور DefaultIcon آیکون پیشفرض را تعیین مینماید. اگر واقعاً میخواهید تمام پنجرهها آیکون یکسانی داشته باشند، میتوانید از دستور زیر استفاده کنید:
Style ** Icon unknown.xpm
اگر ویژگی NoIcon تنظیم شود، پنجره مشخصشده هنگام تبدیل به آیکون، بهسادگی ناپدید میشود. پنجره را میتوان از طریق window-list بازیابی کرد. اگر 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 را مشخص میکند که IconBox روی آن تعریف میشود، یا شناسه اضافی '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، هندسه برای دستور icon box مشخصکننده صفحه نمایش اضافی "@w" را میپذیرد. این گزینه صفحه نمایشی را مشخص میکند که مرکز پنجره در آن قرار دارد. این مشخصکننده صفحه نمایش اضافی در هیچ کجای دیگر مجاز نیست.
اگر هرگز جعبه آیکونی تعریف نکنید، یا تمام جعبههای آیکون را پر کنید، fvwm دارای یک جعبه آیکون پیشفرض است که کل صفحه را میپوشاند؛ از بالا به پایین و سپس از چپ به راست پر میشود و شبکهای ۸۰x۸۰ پیکسلی دارد. برای غیرفعال کردن همه جعبهها به جز جعبه آیکون پیشفرض، میتوانید از IconBox بدون آرگومان در یک دستور Style مجزا استفاده کنید. برای غیرفعال کردن تمامی جعبههای آیکون از جمله جعبه پیشفرض، میتوان آرگومان "none" را مشخص کرد. نکته: میتوانید با یک تابع سادهٔ fvwm، آیکونهای خود را بهطور خودکار در جعبهٔ آیکون (icon box) مرتب کنید. تابع «DeiconifyAndRearrange» زیر را در فایل پیکربندی خود قرار دهید:
AddToFunc DeiconifyAndRearrange + C Iconify off + C All (CurrentPage, Iconic) PlaceAgain Icon
سپس در تمام بخشهایی که دستور Iconify را برای بازگرداندن یک آیکون از حالت آیکون (de-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 برای برش دادن (clip) یا کشیدن (stretch) یک آیکون به بیشینه اندازه استفاده کنید. تعریف 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 نشاندهندهٔ بیشینه اندازهٔ آن خواهند بود. تصاویر آیکونی که کوچکتر از اندازهٔ کمینه باشند، پدگذاری (padded) میشوند. تصاویر آیکونی که بزرگتر از بیشینه اندازه باشند، برش داده میشوند (clipped).
اگر فقط دو آرگومان به IconSize داده شود، width و height اندازهٔ مطلق یک آیکون را نشان میدهند. آیکونهای تحت پوشش این سبک برای رسیدن به اندازهٔ دادهشده، پدگذاری یا برش داده میشوند.
اگر هیچ آرگومانی مشخص نشود، مقادیر پیشفرض برای هر بُعد استفاده خواهند شد. این کار عملاً هیچ محدودیتی بر روی اندازهٔ یک آیکون اعمال نمیکند.
مقدار «-1» میتواند بهجای هر یک از آرگومانها برای مشخص کردن مقدار پیشفرض آن بُعد به کار رود.
علاوه بر آرگومانهای عددی، ۱ آرگومان اضافی میتواند یکی از مقادیر "Stretched"، "Adjusted" یا "Shrunk" باشد.
توجه داشته باشید که مدیرهای آیکون ارائهشده توسط ماژولها تحت تأثیر این سبک قرار نمیگیرند.
دستور MiniIcon یک نگاشتپیکسلی (pixmap) را برای استفاده بهعنوان آیکون بندانگشتی پنجره تعیین میکند. این آیکون بندانگشتی میتواند در یکی از دکمههای نوار عنوان کشیده شود (به ButtonStyle مراجعه کنید)، و میتواند توسط ماژولهای مختلف fvwm (مانند FvwmIconMan و FvwmPager) مورد استفاده قرار گیرد. این دستور نام یک pixmap را بهعنوان آرگومان میگیرد.
دستورات WindowShadeShrinks و WindowShadeScrolls کنترل میکنند که آیا محتویات پنجرهای که با دستور WindowShade جمع (کرکره) میشود پیمایش شوند (پیشفرض) یا در جای خود باقی بمانند. حالت منقبض شدن (shrinking) کمی سریعتر است.
گزینهٔ WindowShadeSteps تعداد گامها را برای پویانمایی هنگام کرکره کردن یک پنجره با WindowShade تعیین میکند. این گزینه یک عدد را بهعنوان آرگومان میگیرد. اگر در انتهای عدد یک 'p' وجود داشته باشد، تعداد پیکسلها را بهعنوان اندازهٔ گام بهجای تعداد ثابتی از گامها تعیین میکند. مقدار 0 پویانمایی را غیرفعال میکند. همچنین در صورتی که آرگومان حذف شده یا نامعتبر باشد، همین اتفاق میافتد.
دستور WindowShade دارای دو حالت عملیاتی است: کرکرهکردن مشغول (busy) و تنبل (lazy). حالت busy میتواند ۵۰٪ کُندتر از حالت lazy باشد، اما حالت lazy ممکن است در برخی شرایط عجیب به نظر برسد؛ برای مثال، اگر حاشیههای پنجره، دکمهها یا عنوان با یک pixmap کاشیکاریشده (tiled) پر شده باشند. همچنین، دستگیرههای پنجره در حالت lazy کشیده نمیشوند و برجستگی حاشیه ممکن است فقط تا حدی، درست پیش از رسیدن پنجره به حالت جمعشده یا بلافاصله پس از خروج از آن، کشیده شود. بهطور پیشفرض، اگر جلوههای بصری نامطلوبی وجود نداشته باشد (بدون احتساب دستگیرههای پنجره)، fvwm از حالت lazy استفاده میکند و در غیر این صورت از حالت busy بهره میبرد. از WindowShadeAlwaysLazy یا WindowShadeBusy برای اجبار در استفاده از حالت lazy یا busy استفاده کنید. تنظیمات پیشفرض با WindowShadeLazy بازگردانده میشود.
دستور ResizeOpaque به fvwm فرمان میدهد تا اندازهٔ پنجرههای مربوطه را با محتویات نمایان، بهجای استفاده از یک طرح پیرامونی (outline)، تغییر دهد. از آنجا که این کار باعث بازترسیم مکرر برنامه میشود، بسته به میزان گرافیکی که برنامه بازترسیم میکند، میتواند بسیار کُند باشد و باعث پرش یا چشمک زدن شدید پنجره شود. سبک ResizeOutline (پیشفرض) سبک ResizeOpaque را خنثی میکند. بسیاری از برنامهها تغییر اندازهٔ مات پنجرههای خود را نمیپذیرند؛ بهعنوان مثال XEmacs، Netscape یا ترمینالهایی با پسزمینهٔ pixmap. اگر نتیجه را مناسب نمیدانید، از سبک ResizeOpaque برای این پنجرهها استفاده نکنید. برای مستثنی کردن برخی پنجرههای خاص از تغییر اندازهٔ مات، میتوانید از این خطوط در فایل پیکربندی خود استفاده کنید:.sp
Style * ResizeOpaque Style rxvt ResizeOutline Style emacs ResizeOutline
Sticky پنجره را چسبان میکند، بدین معنا که همیشه در هر صفحه و هر میزکار نمایان است. سبک مخالف آن، Slippery، وضعیت را به مقدار پیشفرض بازمیگرداند.
StickyIcon پنجره را در هنگامی که آیکون شده است چسبان میکند. پنجره پس از خروج از حالت آیکون، روی میزکار فعال باز میشود. SlipperyIcon وضعیت را به حالت پیشفرض بازمیگرداند.
StickyAcrossPages و StickyAcrossPagesIcon مانند Sticky و StickyIcon عمل میکنند، اما پنجره را تنها در سراسر صفحهها میچسبانند، نه میزکارها؛ در حالی که StickyAcrossDesks and StickyAcrossDesksIcon برعکس عمل میکنند.
پنجرههایی که به عنوان Sticky یا StickyAcrossDesks یا StickyAcrossPages علامتگذاری شدهاند، نقطهچینهایی روی نوار عنوان خواهند داشت. این ویژگی میتواند با سبک !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 hints) غیرفعال شده باشد. این قابلیت به طور پیشفرض روشن است. برعکس آن، !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 نباید کمتر از 100 پیکسل باشند. اگر پارامترها را حذف کنید یا مقادیر آنها نامعتبر باشند، هر دو حد روی 32767 پیکسل تنظیم میشوند (که مقدار پیشفرض است).
با 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 تعیین میکنند که تغییر درگاه دید (viewport) میزکار از طریق جابهجایی یا تغییر اندازه پنجره فراتر از لبه صفحه چقدر دشوار باشد. این پارامتر مشخص میکند نشانگر ماوس چند میلیثانیه باید روی لبه صفحه باقی بماند تا 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 به عنوان روش جایگزین (fall-back) استفاده میشود.
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 در صورتی که پنجره در حال جایگذاری دارای سبک EWMHPlacementUseWorkingArea باشد، بر متمم ناحیه کاری EWMH و در صورتی که دارای سبک EWMHPlacementUseDynamicWorkingArea باشد، بر پنجرههای دارای راهنمای EWMH strut (یعنی راهنمای «لطفاً روی من را نپوشانید») تأثیر میگذارد. این ضرایب نشاندهنده مقداری از مساحت هستند که هنگام جایگذاری پنجره جدید، برای این نوع پنجرهها (یا ناحیهها) به حساب میآید. به عنوان نمونه، بهطور پیشفرض مساحت پنجرههای ontop ۵ برابر پنجرههای عادی شمرده میشود. بنابراین MinOverlapPlacement و MinOverlapPercentPlacement پیش از پوشاندن یک پنجره ontop، ۵ برابر مساحت بیشتری از یک پنجره دیگر را میپوشانند. برای اینکه با پنجرههای ontop همانند پنجرههای دیگر رفتار شود، این مقدار را روی ۱ تنظیم کنید. برای آنکه واقعاً از قرار دادن پنجرهها زیر پنجرههای ontop اجتناب شود، این مقدار را روی عددی بالا، مثلاً ۱۰۰۰ قرار دهید. این سبک بر پنجرههایی که از قبل نگاشت شدهاند تأثیر میگذارد و نه پنجرهای که هماکنون قرار داده میشود. یک استثنا برای این قاعده وجود دارد: در صورتی که پنجره در حال جایگذاری دارای سبک EWMHPlacementUseWorkingArea باشد، ضریب strut بر پنجره جایگذاریشده اثر میگذارد..sp MinOverlapPercentPlacementPenalties حداکثر ۴ آرگومان عدد صحیح مثبت یا صفر میپذیرد:
cover_100 cover_95 cover_85 cover_75
اگر آرگومانهای انتهایی مشخص نشوند، از مقادیر پیشفرض استفاده میشود که عبارتند از:
12 6 4 1
برای بازنشانی این سبک به مقادیر پیشفرض، یک '!' به ابتدای آن اضافه کنید. این سبک بر سیاست جایگذاری MinOverlapPercentPlacement تأثیر میگذارد و مشابه سبک MinOverlapPlacementPenalties است. ضریب cover_xx زمانی استفاده میشود که پنجره در حال جایگذاری، حداقل xx درصد از پنجره را بپوشاند. این ضریب به ضریب تعیینشده توسط سبک MinOverlapPlacementPenalties اضافه میشود.
ManualPlacement (معروف به جایگذاری فعال). کاربر ملزم است هر پنجره جدید را بهصورت دستی جایگذاری کند. پنجره تا زمان انتخاب دستی مکان، تنها بهصورت یک کادر کشسان (rubber band) نمایش داده میشود. پنجره زمانی جایگذاری میشود که یکی از کلیدهای موشواره یا هر کلیدی به جز 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 hint) را نادیده میگیرد. معمولاً نادیده گرفتن انتخاب کاربر کار درستی نیست، اما برخی برنامهها از نشانه USPosition سوءاستفاده میکنند تا پنجرههایشان را بدون رضایت کاربر در نقطه خاصی از صفحه مستقر کنند. نکته: !UseUSPosition معادل گزینه منسوخشده !USPosition است.
NoUseTransientPPosition و UseTransientPPosition مشابه !UsePPosition و UsePPosition عمل میکنند اما تنها برای پنجرههای گذرا (transient) اعمال میشوند. نکته: !UseTransientPPosition معادل گزینه منسوخشده !TransientPPosition است.
NoUseIconPosition به fvwm دستور میدهد هنگام آیکون کردن پنجره، موقعیت آیکون مشخصشده توسط برنامه (IconPosition hint) را نادیده بگیرد. نکته: !UseIconPosition معادل گزینه منسوخشده !IconPosition است.
StartsOnDesk یک آرگومان عددی میپذیرد که شماره میزکاری است که پنجره باید در ابتدا در آن قرار گیرد. توجه داشته باشید که برنامههای استاندارد Xt میتوانند این مقدار را از طریق منبع (resource) نیز مشخص کنند (مانند "-xrm '*Desk: 1'").
StartsOnPage ۱، ۲، یا ۳ آرگومان عددی میپذیرد. اگر یک یا سه آرگومان مشخص شود، آرگومان اول (یا تنها آرگومان) شماره میزکار است. اگر سه آرگومان داده شود، آرگومانهای دوم و سوم موقعیت صفحهای x,y را در پنجره مجازی مشخص میکنند. اگر دو آرگومان مشخص شود، موقعیت صفحه را مشخص میکنند و هیچ اولویتی را برای میزکار مشخص نمیکنند. اگر تنها یک آرگومان داده شود، StartsOnPage دقیقاً مانند StartsOnDesk عمل میکند. برای آن دسته از برنامههای استاندارد Xt که این کاربرد را پشتیبانی میکنند، میزکار/صفحه آغازین میتواند از طریق منبع نیز مشخص شود (مانند "-xrm '*page: 1 0 2'"). استفاده از StartsOnPage همراه با SkipMapping روش کارآمدی است برای زمانی که میخواهید برنامهای را در صفحهای دیگر اجرا کرده و به کار فعلی خود ادامه دهید، به جای اینکه منتظر نمایش آن بمانید.
StartsOnScreen یک آرگومان میپذیرد که باید یک نام معتبر RandR باشد. پنجره جدید در صفحه نمایش مشخصشده قرار میگیرد. حالت پیشفرض، جایگذاری پنجرهها در صفحهای است که هنگام ایجاد پنجره، نشانگر موشواره در آن قرار دارد. با این حال، پنجرههایی که توسط fvwm جایگذاری نمیشوند (یعنی مواردی که دارای نشانه USPosition از ابعاد مشخصشده توسط کاربر هستند)، معمولاً در موقعیتی نسبت به تمام صفحههای شناساییشده قرار میگیرند.
StartsOnPageIncludesTransients باعث میشود سبک StartsOnPage حتی برای پنجرههای گذرا نیز اعمال شود. این گزینه معمولاً کاربردی نیست، زیرا پنجرههای گذرا عموماً کادرهای بازشویی (pop-up) هستند که مایلید در درگاه دید (viewport) فعلی شما ظاهر شوند؛ اما گهگاه برنامهای از یک پنجره گذرا برای مواردی مانند پنجره راهاندازی (startup window) استفاده میکند که نیاز است در محل خاصی تثبیت شود.
ManualPlacementIgnoresStartsOnPage در صورتی که هنگام ایجاد یک پنجره، هر دو مورد ManualPlacement و SkipMapping فعال باشند، جایگذاری StartsOnPage یا StartsOnDesk را لغو میکند. این امر مانع از آن میشود که پنجرهای را بهصورت تعاملی جایگذاری کنید و سپس ندانید به کجا رفته است، چرا که در میزکار یا صفحه متفاوتی قرار گرفته است. ManualPlacementHonorsStartsOnPage در هر صورت اجازه این اتفاق را میدهد. اگر SkipMapping فعال نباشد، این گزینه هیچ اثری ندارد، زیرا fvwm برای انجام جایگذاری تعاملی به میزکار/صفحه مربوطه جابهجا میشود. مقدار پیشفرض ManualPlacementIgnoresStartsOnPage است؛ عملکرد ManualPlacementHonorsStartsOnPage مشابه نحوه مدیریت این وضعیت در سبک قدیمی StartsOnDesk است..sp گزینهٔ CaptureHonorsStartsOnPage باعث میشود که تصاحب اولیه (یک پنجرهٔ از قبل موجود) در زمان راهاندازی، پنجره را با توجه به مشخصات میزکار (desk)، صفحه (page) و صفحهنمایش (screen) در StartsOnPage و StartsOnScreen جایگذاری کند. CaptureIgnoresStartsOnPage باعث میشود fvwm در تصاحب اولیه این تنظیمات (از جمله StartsOnDesk) را نادیده بگیرد. حالت پیشفرض CaptureIgnoresStartsOnPage است.
گزینهٔ RecaptureHonorsStartsOnPage باعث میشود پنجره هنگام Restart طبق مشخصات desk، page و screen در StartsOnPage و StartsOnScreen جایگذاری شود یا به آنها بازگردد. RecaptureIgnoresStartsOnPage باعث میشود fvwm هنگام Restart موقعیت فعلی پنجره را حفظ کند. حالت پیشفرض RecaptureIgnoresStartsOnPage است.
گزینهٔ Layer یک آرگومان اختیاری میپذیرد: یک عدد صحیح غیرمنفی. این لایهای است که پنجره در آن قرار میگیرد. اگر هیچ آرگومانی داده نشود، هر مقدارِ از پیش تنظیمشدهای حذف شده و لایهٔ پیشفرض اعمال میشود.
گزینهٔ StaysOnTop پنجره را در بالاترین لایه قرار میدهد. این لایه را میتوان با دستور DefaultLayers تغییر داد؛ مقدار پیشفرض 6 است.
گزینهٔ StaysPut پنجره را در لایهٔ قرارگیری (put layer) میگذارد. این لایه را میتوان با دستور DefaultLayers تغییر داد؛ مقدار پیشفرض 4 است.
گزینهٔ StaysOnBottom پنجره را در پایینترین لایه قرار میدهد. این لایه را میتوان با دستور DefaultLayers تغییر داد؛ مقدار پیشفرض 2 است.
گزینهٔ StartsLowered به fvwm دستور میدهد که پنجره را در ابتدا در پایین لایهٔ خود قرار دهد، برخلاف حالت پیشفرض StartsRaised.
گزینهٔ StartShaded به fvwm میگوید که پنجره را لوله (shade) کند. میتوان یک آرگومان جهت اختیاری مشخص کرد که میتواند یکی از مقادیر "North"، "South"، "West"، "East"، "NorthWest"، "NorthEast"، "SouthWest" یا "SouthEast" باشد؛ اگر جهتی تعیین نشود، پیشفرض لولهکردن به سمت شمال (north) است.
گزینهٔ SkipMapping به fvwm میگوید هنگام نگاشت اولیه (mapping) پنجره، به میزی که پنجره روی آن قرار دارد تغییر مکان ندهد (مفید به همراه StartsOnDesk یا StartsOnPage).
گزینهٔ KeepWindowGroupsOnDesk باعث میشود پنجرههای جدیدی که نشانهٔ (hint) گروه پنجره برای آنها تنظیم شده است، روی همان میزی ظاهر شوند که سایر پنجرههای همان گروه قرار دارند. از آنجا که این رفتار ممکن است گیجکننده باشد، تنظیم پیشفرض ScatterWindowGroups است. در این حالت هنگام جایگذاری پنجرهها، نشانهٔ گروه پنجره نادیده گرفته میشود.
پنجرههای موقت (Transient windows)
پنجرهای با سبک RaiseTransient که دارای پنجرههای موقت است، هنگام بالا آمدن (raise)، تمام پنجرههای موقت خود را بالا میآورد. سبک DontRaiseTransient این رفتار را غیرفعال میکند. در این صورت با همهٔ پنجرهها طوری رفتار میشود که گویی هیچ پنجرهٔ موقتی ندارند.
پنجرهای با سبک LowerTransient که دارای پنجرههای موقت است، هنگام پایین رفتن (lower)، تمام پنجرههای موقت خود را پایین میبرد. سبک DontLowerTransient این رفتار را غیرفعال میکند. در این صورت با همهٔ پنجرهها طوری رفتار میشود که گویی هیچ پنجرهٔ موقتی ندارند.
سبک StackTransientParent سبکهای RaiseTransient و LowerTransient را تکمیل میکند. بالا آوردن پنجرهای با سبک StackTransientParent، چنانچه پنجرهای که بالا آورده میشود یک پنجرهٔ موقت باشد و پنجرهٔ اصلی آن سبک RaiseTransient داشته باشد، عمل بالا آوردن را به پنجرهٔ اصلی منتقل میکند؛ این اثر باعث میشود بالا آوردن یک پنجرهٔ موقت دقیقاً مانند بالا آوردن پنجرهٔ اصلی عمل کند - کل گروه بالا آورده میشود. رفتار مشابهی برای پایین بردن کل گروه پنجرههای موقت در حالتی که پنجرهٔ اصلی سبک LowerTransient داشته باشد برقرار است. گزینهٔ DontStackTransientParent این رفتار را خاموش میکند. اگر RaiseTransient و LowerTransient استفاده نشوند، (Dont)StackTransientParent هیچ اثری ندارد.
یک شبیهسازی معقول از بالا/پایین بردن (raise/lower) در Motif برای پنجرههای موقت به این شکل امکانپذیر است:
Style * RaiseTransient Style * LowerTransient Style * StackTransientParent
سبکهای نشانههای گستردهٔ مدیر پنجره (Extended Window Manager Hints styles)
دستور EWMHDonateIcon به fvwm اعلام میکند که اگر برنامه نشانهٔ شمایل (icon hint) مربوط به ewmh را ارائه نداده باشد (و شمایل استفادهشده توسط fvwm یک پنجرهٔ شمایل نباشد)، آن را با شمایلی که توسط fvwm استفاده میشود تنظیم کند. EWMHDonateMiniIcon همین کار را برای شمایلهای کوچک (mini icons) انجام میدهد. این امر به صفحهبند (pager)، نوار وظیفه (taskbar)، جعبهٔ شمایل (iconbox) و غیره که سازگار هستند اجازه میدهد همان شمایلهای (کوچک) fvwm را نمایش دهند. توجه داشته باشید که در برخی سختافزارها (مانند نمایشگرهای 8-بیتی) این سبکها میتوانند نگاشت پنجره را کند کنند و بهطور کلی فقط یکی از این سبکها برای یک برنامهٔ سازگار مورد نیاز است. EWMHDontDonateIcon و EWMHDontDonateMiniIcon مقادیر پیشفرض را که عدم تنظیم هرگونه نشانهٔ شمایل (کوچک) ewmh است بازمیگردانند.
بهطور پیشفرض، اگر برنامهای یک نشانهٔ شمایل ewmh با اندازهٔ کوچک ارائه دهد (یعنی ارتفاع و عرض کمتر یا مساوی ۲۲)، fvwm از این شمایل به عنوان شمایل کوچک خود استفاده میکند. گزینهٔ EWMHMiniIconOverride به fvwm دستور میدهد که شمایلهای ewmh را نادیده گرفته و از شمایل کوچکی که توسط سبک MiniIcon ارائه شده است استفاده کند. EWMHNoMiniIconOverride حالت پیشفرض را بازمیگرداند.
گزینهٔ EWMHUseStackingOrderHints باعث میشود fvwm از نشانههای EWMH استفاده کرده و نشانههای EWMH را که لایهٔ پنجره را تغییر میدهند رعایت کند. EWMHIgnoreStackingOrderHints باعث میشود fvwm نشانههای لایهٔ EWMH را نادیده بگیرد.
یک برنامه میتواند با یک نشانه، فضای رزروشدهای را روی میزکار درخواست کند. در اصطلاحات EWMH، چنین نشانهای پایه یا تکیهگاه (strut) نامیده میشود و برای محاسبهٔ فضای کاری (working area) به کار میرود و ممکن است برای جایگذاری پنجره و در دستور بیشینهسازی (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 اجرا شود کندتر خواهد بود. SaveUnder در صورتی که اتصال به کارساز X کند باشد (مانند اتصال از طریق پیوند مودم) ممکن است fvwm را سریعتر کند. برای غیرفعال کردن save under، از سبک SaveUnderOff استفاده کنید. این حالت پیشفرض است. همچنین BackingStore در بالا را ببینید.
نکته: اگر کارساز X اجازهٔ save under را ندهد، این سبک بیفایده است.
سبک ParentalRelativity به کلاینتهایی که از نگاشتپیکسلی (pixmap) پسزمینه از نوع ParentRelative استفاده میکنند امکان میدهد به شفافیت دست یابند. ماژولهای Fvwm که از مجموعهرنگهای (colorsets) شفاف پشتیبانی میکنند به این تنظیم نیاز دارند. گزینهٔ Opacity حالت پیشفرض است و برای کارایی بهتر باید برای همهٔ کلاینتهای غیرشفاف استفاده شود..sp 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 مقدار اولیهٔ یکی از ۳۲ وضعیت تعریفشده توسط کاربر را که با هر پنجره مرتبط است، تعیین میکند. شمارهٔ وضعیت از 0 تا 31 متغیر است و باید به عنوان یک آرگومان داده شود. این وضعیتها هیچ معنایی در 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 بازنویسی (override) کرد، و برخی دستورهای شرطی مانند Current و All به طور پیشفرض این کار را انجام میدهند. سبکهای CirculateSkipIcon، CirculateHitIcon، CirculateSkipShaded و CirculateHitShaded مانند CirculateSkip و CirculateHit کار میکنند اما تنها برای پنجرههای آیکونشده یا سایهدار اعمال میشوند. نکته: اگر چندین گزینهٔ ...Skip... ترکیب شوند، پنجرهها تنها زمانی انتخاب میشوند که با هیچیک از شرایط مشخصشده تطابق نداشته باشند. بنابراین، با:
Style * CirculateSkipIcon, CirculateSkipShaded
تنها پنجرههایی انتخاب میشوند که نه آیکونشده باشند و نه سایهدار. نکته: به دلایل تاریخی، دستورهای شرطی نامهای این سبکها را به عنوان نام شرط درک میکنند. مراقب باشید که آنها را اشتباه نگیرید.
مثالها
# 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 را از طریق تطابق دقیق نام پنجره دریافت میکند، اما همچنین با تطابق با "Fvwm*"، ویژگیهای !Handles، Sticky و WindowListSkip را نیز میگیرد. این پنجره به موجب تطابق با "*"، مشخصهٔ !Title را به دست میآورد. اگر سبکهای متناقضی برای یک پنجره مشخص شده باشند، آخرین سبک مشخصشده استفاده خواهد شد.
WindowStyle options
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» استفاده شده و یک سبک دکمه برداری (vector) روی تمام وضعیتها رسم میشود.
AddTitleStyle [state] [style] [-- [!]flag ...]
نوارهای عنوان به ترتیب تعریف رسم میشوند؛ از جدیدترین TitleStyle آغاز شده و به دنبال آن مواردی که با AddTitleStyle اضافه شدهاند رسم میگردند. برای پاککردن پشته سبک عنوان، تغییر پرچمهای سبک، یا برای شرح سبکها و پرچمهای موجود، دستورات TitleStyle و ButtonStyle را ببینید.
AddToDecor 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 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»، به جای آن برای دکمههای عنوانی استفاده میشوند که در صورت بیشینهشدن (maximized)، سایهدار شدن (shaded)، چسبان بودن (sticky) یا قرار گرفتن روی لایهای خاص، به ترتیب دارای یکی از نشانههای 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» برای دکمهٔ ۱ به مقدار پیشفرض:
ButtonStyle 1 ActiveUp Default
برای بازنشانی تمام حالتهای دکمهٔ ۱ به پیشفرضِ دکمهٔ شمارهٔ ۲:
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 غیرفعال رها شدهاند..sp مهم
برای وضعیتهای «ActiveDown» و «InactiveDown»: هنگامی که یک دکمه فشرده میشود، برجستگی معکوس میگردد. به همین دلیل، برای به دست آوردن ظاهر برآمده (raised) در وضعیتهای «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] دکمه را با Colorset cs پر میکند. آرگومان اختیاری alpha درصدی بین 0 تا 100 است. این آرگومان باعث میشود fvwm پسزمینه مجموعه رنگ را با استفاده از این درصد روی دکمه ادغام کند. اگر درصد 0 باشد، پسزمینه Colorset پنهان میشود و اگر 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 از یک الگوی 4-نقطهای استفاده میکند که شامل خطی از (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 وضعیت (2 فعال و 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 باید به دکمههای نوار عنوانی که یک منو را نمایش میدهند اختصاص یابد. تخصیص پیشفرض، چپترین دکمه است. هنگامی که پنجرهای با گزینهٔ Style از نوع MwmFunctions درخواست کند که این دکمه نمایش داده نشود، پنهان میگردد.
MwmDecorMin باید به دکمههای نوار عنوانی که پنجره را کمینه یا آیکون میکنند اختصاص یابد. تخصیص پیشفرض، دومین دکمه از سمت راست است. هنگامی که پنجرهای با گزینهٔ Style از نوع MwmFunctions درخواست کند که این دکمه نمایش داده نشود، پنهان میگردد..sp MwmDecorMax باید به دکمههای نوار عنوان که پنجره را بیشینه میکنند اختصاص یابد. تخصیص پیشفرض، راستترین دکمه است. هنگامی که پنجرهای با گزینهٔ Style مربوط به MwmFunctions درخواست عدم نمایش این دکمه را داشته باشد، پنهان میشود. هنگامی که پنجره بیشینه است، الگوی برداری روی دکمه فرورفته به نظر میرسد.
MwmDecorShade باید به دکمههای نوار عنوان که پنجره را کرکرهای میکنند (دستور WindowShade را ببینید) اختصاص یابد. هنگامی که پنجره کرکرهای شده است، الگوی برداری روی دکمه فرورفته به نظر میرسد.
MwmDecorStick باید به دکمههای نوار عنوان که پنجره را چسبان میکنند اختصاص یابد. هنگامی که پنجره چسبان است، الگوی برداری روی دکمه فرورفته به نظر میرسد.
پرچم MwmDecorLayer layer باید به دکمههای نوار عنوان که پنجره را در لایهٔ شمارهگذاریشدهٔ layer قرار میدهند اختصاص داده شود. وقتی پنجره در آن لایهٔ خاص قرار دارد، الگوی برداری روی دکمه فرورفته به نظر میرسد.
ChangeDecor decor
تزئینات (decor) یک پنجره را به decor تغییر میدهد. decor یا "Default" است یا نام تزئیناتی که با AddToDecor تعریف شده است. اگر decor نامعتبر باشد، هیچ اتفاقی رخ نمیدهد. اگر از درون یک پنجره یا حاشیهٔ آن فراخوانی شود، آن پنجره تحت تأثیر قرار میگیرد. اگر از پنجرهٔ ریشه (root window) فراخوانی شود، کاربر میتواند پنجرهٔ هدف را انتخاب کند. ChangeDecor تنها بر ویژگیهایی تأثیر میگذارد که با استفاده از دستور AddToDecor قابل تنظیم باشند.
ChangeDecor CustomDecor1
DestroyDecor [recreate] decor
تزئینات 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 را نیز میپذیرد. این گزینه به شما امکان میدهد پیکسمپها، مجموعهرنگها (colorset) یا رنگهای متفاوتی را برای بخشهای مختلف نوار عنوان مشخص کنید. برخی از آنها برای تناسب با یک فضای خاص کاشیکاری شده یا کشیده میشوند؛ برخی دیگر تصاویر گسستهٔ «گذار» (transition) هستند. بخشهای (sections) قابل تعریف عبارتند از:
Main
LeftMain
RightMain
UnderText
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 را ببینید. در صورت وجود بخش گذار (transition)، شامل 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) مفید است. مشخص کردن یک decor نامعتبر باعث بهروزرسانی تمام پنجرهها خواهد شد.
DesktopName desk name
DesktopConfiguration global | per-monitor | shared
در حالت per-monitor، هر مانیتور RandR نسخهٔ جداگانهای از میزکارها دارد، و بنابراین هنگام جابهجایی بین میزکارها/صفحات، مستقل از یکدیگر عمل میکنند.
هنگامی که shared تنظیم شود، میزکارها میان تمام مانیتورها به اشتراک گذاشته میشوند. بنابراین برای مثال، با تعداد میزکارهای زیر که برای دو مانیتور تعریف شدهاند ([] نمایانگر monitor1 و <> نمایانگر monitor2 است):
[0] 1 2 <3> 4
جابهجایی بین میزکارها همچنان مانیتوری را که میزکار روی آن درخواست شده رعایت میکند. اگر monitor1 بخواهد به میزکار ۳ برود، آنگاه آن میزکار با monitor2 معاوضه میشود، بهطوری که وضعیت زیر میزکار فعال را روی هر دو مانیتور نشان میدهد:
<0> 1 2 [3] 4
این مفهوم شبیه به نحوهٔ مدیریت میزکارها در spectrwm یا xmonad است.
نکته: هر کدام از این حالتهای DesktopConfiguration را میتوان در حین اجرا (on-the-fly) تغییر داد.
DesktopSize HorizontalxVertical
EdgeResistance delay, EdgeResistance scrolling moving [screen-scrolling]
EdgeScroll 100 100
استفاده میکنند، اما متوجه میشوند که بهطور تصادفی صفحات را ورق میزنند در حالی که چنین قصدی ندارند. اگر -1 به عنوان تأخیر داده شود، پیمایش بهطور کامل غیرفعال میشود.
شکل دوم فراخوانی با دو یا سه آرگومان منسوخ شده است و در صورت نیاز باید با سه دستور زیر جایگزین شود:
EdgeResistance scrolling Style * EdgeMoveDelay scrolling Style * EdgeMoveResistance moving or Style * EdgeMoveResistance moving screen-scrolling
نرمافزار Fvwm این جایگزینی را بهطور خودکار انجام داده و یک پیام هشدار چاپ میکند.
EdgeScroll [screen RANDRNAME] horizontal[p] vertical[p] [wrap | wrapx | wrapy]
EdgeScroll 0 0
را در فایل config خود قرار دهید، یا شاید بهتر از آن، مقدار EdgeThickness را روی صفر تنظیم کنید. به دستور EdgeThickness مراجعه کنید. اگر میخواهید پیمایش به اندازهٔ کل صفحه باشد، از
EdgeScroll 100 100
استفاده کنید. هر دو مقدار horizontal و vertical باید اعدادی مثبت باشند.
اگر درصدهای horizontal و vertical در ۱۰۰۰ ضرب شوند، یا یکی از کلمات کلیدی wrap، wrapx و wrapy مشخص گردد، پیمایش در لبهٔ میزکار دور میزند (wrap میشود). اگر از
EdgeScroll 100000 100000
استفاده شود، fvwm بهصورت صفحات کامل پیمایش کرده و در لبهٔ میزکار دور میزند.
EdgeThickness [screen RANDRNAME] 0 | 1 | 2
گزینهٔ اختیاری 'screen RANDRNAME' مانیتور RandR مربوطهای را مشخص میکند که این تنظیم باید روی آن اعمال شود و مانیتورهای دیگر نادیده گرفته میشوند. بدون این گزینه، این مقدار بر تمام مانیتورها اعمال میگردد.
بهمنظور فعالسازی پیمایش صفحه با ماوس، چهار پنجره موسوم به «pan frames» درست در لبهٔ صفحه قرار میگیرند. این روشی است که fvwm حضور ماوس در لبهٔ پنجره را تشخیص میدهد. با توجه به شیوهٔ کارکرد این بخش، آنها باید در بالای پشته قرار گیرند و رویدادهای ماوس را مصرف کنند؛ بنابراین، اگر با هرگونه خطایی از قبیل: «کلیکهای ماوس در لبهٔ صفحه رفتار اشتباهی دارند» مواجه شدید، با pan frameها مشکل دارید و (با فرض اینکه از ماوس برای ورق زدن بین صفحات استفاده نمیکنید) باید EdgeThickness را برابر با 0 قرار دهید.
مقدار 0 پیمایش لبه با ماوس را حتی در هنگام کشیدن (drag کردن) یک پنجره بهطور کامل غیرفعال میکند. مقدار 1 کوچکترین فریمهای pan را فراهم میآورد که به نظر میرسد بهجز در برخی سرورها بهترین عملکرد را دارد.
مقدار 2 پیشفرض است.
فریمهای pan با اندازهٔ ۱ یا ۲ پیکسل گاهی اوقات میتوانند گیجکننده باشند؛ برای مثال، اگر پنجرهای را روی لبهٔ صفحه بکشید بهطوریکه روی یک pan frame قرار گیرد، کلیک روی پنجره در نزدیکی لبهٔ صفحه به عنوان کلیک روی پنجرهٔ ریشه (root window) در نظر گرفته میشود.
EwmhBaseStruts screen RANDRNAME left right top bottom
GotoDesk [screen RANDRNAME] [prev | arg1 [arg2] [min max]]
این دستور ۱، ۲، ۳ یا ۴ آرگومان میپذیرد. یک آرگومان منفرد به عنوان شماره میزکار نسبی تفسیر میشود. دو آرگومان به عنوان شماره میزکار نسبی و مطلق فهمیده میشوند. سه آرگومان یک میزکار نسبی و حداقل و حداکثر محدوده مجاز را مشخص میکنند. چهار آرگومان مقادیر نسبی، مطلق، حداقل و حداکثر را تعیین میکنند. اگر عبارت صریح prev به عنوان تنها آرگومان داده شود، آخرین شماره میزکار بازدیدشده استفاده میشود.
اگر arg1 غیرصفر باشد، شماره میزکار بعدی برابر با شماره میزکار فعلی به اضافه arg1 خواهد بود.
اگر arg1 صفر باشد، شماره میزکار جدید arg2 خواهد بود. (اگر arg2 وجود نداشته باشد، دستور هیچ اثری ندارد.)
اگر min و max داده شوند، شماره میزکار جدید کوچکتر از min و بزرگتر از max نخواهد بود. مقادیر خارج از این محدوده بریده میشوند (اگر شماره میزکار مطلق داده باشید) یا چرخش میکنند (اگر شماره میزکار نسبی داده باشید).
نحو این دستور مشابه MoveToDesk است که یک پنجره را به میزکاری دیگر منتقل میکند.
تعداد میزکارهای فعال به صورت پویا تعیین میشود. فقط میزکارهایی که شامل پنجره هستند یا در حال حاضر نمایش داده میشوند فعال هستند. شماره میزکارها باید بین 0 و 2147483647 باشد (آیا این کافی است؟). شمارههای میزکار منفی توسط مشخصات EWMH پشتیبانی نمیشوند و دیگر در fvwm پشتیبانی نمیشوند.
GotoDeskAndPage screen | prev | desk xpage ypage
GotoPage screen | prev | [options] x[p] y[p]
گزینههای ممکن wrapx و wrapy هستند تا هنگام حرکت درگاه دید به فراتر از مرز میزکار، چرخش روی مختصات x یا y انجام شود.
نام صفحه نمایش RandR.
برای رفتن به آخرین صفحه بازدیدشده، از prev به عنوان آرگومان اول استفاده کنید. تابع GotoPage نباید در منوهای بالاپرنده (pop-up) استفاده شود.
مثالها:
# رفتن به صفحه (2,3) GotoPage 2 3 # رفتن به پایینترین و راستترین صفحه GotoPage -1 -1 # رفتن به آخرین صفحه بازدیدشده GotoPage prev # رفتن به اندازه دو صفحه به سمت راست و یک صفحه به سمت بالا GotoPage +2p -1p
Scroll [screen RANDRNAME] [horizonal[p] vertical[p] | reverse]
Scroll 100 100
به معنای یک صفحه کامل پیمایش به سمت پایین و راست است.
Scroll 50 25
به معنای پیمایش به اندازه نصف صفحه به سمت راست و یک چهارم صفحه به سمت پایین است. تابع Scroll نباید از منوهای بالاپرنده فراخوانی شود. به طور معمول، پیمایش در لبه میزکار متوقف میشود.
اگر درصدهای horizontal و vertical برابر با 100 یا بیشتر باشند و در 1000 ضرب شوند، پیمایش در لبه میزکار چرخش (wrap around) میکند. اگر
Scroll 100000 0
مکرراً اجرا شود، fvwm با هر بار اجرا به صفحه بعدی میزکار رفته و در لبه میزکار دور میزند، به طوری که همه صفحات به نوبت پیمایش میشوند.
اگر حرف 'p' به هر یک از مختصاتها (horizontal و/یا vertical) الصاق شود، مقدار پیمایش بر حسب پیکسل محاسبه خواهد شد.
بدون آرگومان یا در صورتی که گزینه reverse داده شود، پیمایش تعاملی انجام میپذیرد. با حرکت ماوس، درگاه دید پیمایش میشود. با گزینه reverse، پیمایش در جهت مخالف حرکت ماوس انجام میشود و بدون آن، در همان جهت ماوس پیمایش صورت میگیرد.
اتصال (binding) زیر:
Mouse 1 A CM Scroll reverse
در صورت فشرده بودن کلیدهای Control و Meta، تأثیر گرفتن و کشیدن درگاه دید را با دکمه ۱ ایجاد میکند.
اگر screen داده شود و به دنبال آن RANDRNAME یک نمایشگر مشخص بیاید، صفحه نمایش تعیینشده پیمایش میشود. این مورد تنها زمانی کاربرد دارد که از DesktopConfiguration حالت per-monitor یا shared استفاده شود و بخواهید مانیتوری غیر از مانیتور فعلی را پیمایش کنید. پیمایش تعاملی همواره مانیتور فعلی را پیمایش میکند.
AddToFunc [name [I | J | M | C | H | D action]]
AddToFunc Move-or-Raise I Raise + M Move + D Lower
نام تابع "Move-or-Raise" است، و میتواند از طریق یک منو، یا انتساب ماوس یا انتساب کلید فراخوانی شود:
Mouse 1 TS A Move-or-Raise
name نباید شامل فاصلههای درونی باشد. هیچ تضمینی وجود ندارد که آیا نامهای تابع حاوی فاصله کار میکنند یا خیر. این رفتار ممکن است در آینده بدون اطلاع قبلی نیز تغییر کند. حرف قبل از action مشخص میکند چه نوع کنشی فرمانی را که پس از آن میآید راهاندازی میکند. 'I' مخفف "Immediate" (فوری) است و به محض فراخوانی تابع اجرا میشود. 'J' مشابه "فوری" است اما تا زمانی که دکمهای فشرده یا رها شود، یا اشارهگر حرکت کند، یا تابع تکمیل شود به تأخیر میافتد. این عمل همواره قبل از سایر کنشهای تابع اجرا میشود. 'M' مخفف "Motion" (حرکت) است، یعنی اگر کاربر شروع به حرکت دادن ماوس کند. 'C' مخفف "Click" (کلیک) است، یعنی اگر کاربر دکمه ماوس را فشار داده و رها کند. 'H' مخفف "Hold" (نگهداشتن) است، یعنی اگر کاربر دکمه ماوس را فشار دهد و آن را بیش از ClickTime میلیثانیه نگه دارد. 'D' مخفف "Double-click" (دوبار کلیک) است. کنش 'I' باعث میشود عملیات هنگام فشردن دکمه انجام شود، در صورتی که تابع با آگاهی قبلی از اینکه باید روی کدام پنجره عمل کند، فراخوانی شده باشد.
تعدادی نماد از پیش تعریفشده وجود دارند که اگر در خط فرمان ظاهر شوند با مقادیر مشخصی جایگزین میشوند. لطفاً برای جزئیات به بخش Command Expansion مراجعه کنید.
هشدار لطفاً توضیحات مربوط به اجرای توابع پیچیده در بخش Scripting and Complex Functions را مطالعه کنید.
مثالها:
اگر فراخوانی کنید:
Key F10 R A Function MailFunction xmh "-font fixed"
و "MailFunction" چنین باشد:
AddToFunc MailFunction + I Next ($0) Iconify off + I Next (AcceptsFocus, $0) Focus + I None ($0) Exec exec $0 $1
آنگاه آخرین خط تابع به این صورت تبدیل میشود:
+ I None (xmh) Exec exec xmh -font fixed
بسط در هنگام اجرای تابع انجام میشود، بنابراین میتوانید از همان تابع با انواع آرگومانهای مختلف استفاده کنید. شما میتوانید از:
Key F11 R A Function MailFunction zmail "-bg pink"
در همان config استفاده کنید، در صورتی که مایل باشید. مثالی از بهکارگیری "$[w.id]" عبارت است از:
AddToFunc PrintFunction + I Raise + I Exec xdpr -id $[w.id]
توجه داشته باشید که "$$" به '$' بسط داده میشود.
مثالی دیگر: پیوند دادن کلید راست ماوس روی دکمه شماره ۶ پنجره (این یک دکمه کمینهسازی برای تم win95 است) جهت آیکونسازی تمام پنجرههای دارای منبع یکسان:
AddToFunc FuncIconifySameResource "I" All ($0) Iconify on Mouse 3 6 A FuncIconifySameResource $[w.resource]
Beep
DestroyFunc function
DestroyFunc PrintFunction
Echo string
Echo Beginning style definitions... Echo Current desk $[desk.n].
EchoFuncDefinition function
Exec command
مثال زیر کلید تابع را مقید میکند.sp در پنجرهٔ ریشه، بدون هیچ کلید تغییردهندهای، به تابع exec. برنامهٔ rxvt با مجموعهای از گزینهها آغاز میشود.
Key F1 R N Exec exec rxvt -fg yellow -bg blue \ -e /bin/tcsh
توجه داشته باشید که این تابع منتظر پایان یافتن command نمیماند، بنابراین مواردی مانند:
Exec "echo AddToMenu ... > /tmp/file" Read /tmp/file
بهطور قابلاطمینان کار نمیکنند (دستور PipeRead را ببینید).
ExecUseShell [shell]
ExecUseShell ExecUseShell /usr/local/bin/tcsh
Function FunctionName
Mouse 1 T A Function Move-or-Raise
در صورتی که FunctionName با دستورات fvwm تداخل نداشته باشد، میتوان کلیدواژهٔ Function را حذف کرد.
هشدار: لطفاً توضیحات مربوط به اجرای توابع پیچیده در بخش Scripting and Complex Functions را مطالعه کنید.
InfoStoreAdd key value
هدف این دستور ذخیرهٔ اطلاعات داخلی در fvwm است که میتواند توسط توابع fvwm یا هنگام باز کردن برنامههایی با نوع خاص استفاده شود. پیش از این دستور، تنها راه انجام این کار از طریق SetEnv بود اما استفاده از آن توصیه نمیشود زیرا چنین اطلاعاتی را در متغیرهای محیطی قرار میدهد، که محیط را آلوده کرده و اطلاعات را برای سایر فرایندهای آغازشده توسط fvwm بهصورت سراسری درمیآورد و آنها ممکن است این اطلاعات را تغییر دهند که شاید مطلوب نباشد. از این رو هدف InfoStoreAdd این است که امکان ذخیرهٔ چنین اطلاعاتی را فراهم کند، اما آنها را در داخل fvwm نگه دارد.
به این ترتیب، میتوان به هر تعداد مورد نیاز جفت کلید/مقدار ایجاد کرد. بازخوانی مقدار یک کلید خاص از طریق سازوکار معمول بسط در fvwm صورت میگیرد. برای جزئیات بیشتر بخش Command Expansion را ببینید. برای مثال:
InfoStoreAdd teddybearprog xteddy # Echo the value of teddybearprog Echo $[infostore.teddybearprog]
حذف یک مدخل از InfoStore با استفاده از دستور InfoStoreRemove انجام میشود.
InfoStoreRemove key
InfoStoreRemove teddybearprog
Nop
AddToMenu MyMenu " " Nop
آنگاه یک خط خالی درج میشود. اگر به شکل زیر باشد:
+ "" Nop
یک خط جداکننده درج میشود. همچنین میتواند بهعنوان عمل دوبار کلیک برای Menu یا Popup استفاده شود.
PipeRead command [quiet]
مثال:
AddToMenu HomeDirMenu PipeRead 'for i in $HOME/*; \ do echo "+ $i Exec xterm -e vi $i"; done'
نکته: PipeRead بهطور پیشفرض در حین اجرا، اشارهگر ماوس را به نشانگر ساعت تغییر میدهد. با این حال، برخی دستورها مانند xwd باید خودشان کنترل اشارهگر را به دست بگیرند و کار نخواهند کرد. برای غیرفعال کردن نشانگر ساعت، پیش از PipeRead از این دستور استفاده کنید:
BusyCursor Read off
دستور PipeRead بهصورت همگام اجرا میشود. اگر میخواهید دستوری را با Exec اجرا کنید، اما نیاز دارید که بهصورت همگام اجرا شود، میتوانید کاری شبیه به این انجام دهید:.sp
PipeRead 'command 1>&2'
تغییر مسیر باعث میشود هر خروجی برنامه به جای اینکه به عنوان توالی دستورها توسط fvwm خوانده شود، به stderr برود. در صورتی که دستور مشخصشده اجرا شود PipeRead مقدار 1 و در غیر این صورت مقدار -1 را برمیگرداند (برای مفهوم کدهای بازگشتی به بخش Conditional Commands مراجعه کنید).
Read filename [quiet]
SetEnv variable value
SetEnv height HEIGHT
Silent command
کاربرد دیگر Silent همراه با دستورهای مقیدسازی (binding) شامل Key، PointerKey و Mouse است که پیامهای خطا را غیرفعال میکند.
همچنین Silent پیام خطای مربوط به دستورهای ناموجود را غیرفعال میسازد. نکته: با این دستور به عنوان یک پیشوند برای command رفتار میشود. بسط خط فرمان به گونهای انجام میگیرد که گویی Silent وجود نداشته است.
مثالها:
Silent Move 0 0 Silent User_defined_function # do not complain on keyboards without "Help" key Silent Key Help R A Popup HelpMenu
UnsetEnv [variable]
Wait window
AddToFunc InitFunction + I Exec exec xterm -geometry 80x64+0+0 + I Wait xterm + I GotoDesk 0 2 + I Exec exec xmh -font fixed -geometry \ 507x750+0+0 + I Wait xmh + I GotoDesk 0 0
تابع فوق یک xterm را روی میزکار فعلی آغاز میکند، منتظر میماند تا پنجره نمایان (map) شود، سپس به میزکار 2 رفته و یک xmh را اجرا میکند. پس از ظاهر شدن پنجرهٔ xmh، کنترل به میزکار 0 منتقل میشود.
در طول انتظار، fvwm تا حدی کارایی خود را حفظ میکند، اما هر ورودی از جانب ماژولها در صف قرار گرفته و تنها پس از نمایش پنجره یا لغو دستور پردازش میشود. برای مثال، در طول انتظار نمیتوان پنجرهها را با FvwmIconMan یا FvwmPager فوکوس کرد.
میتوانید با فشردن Ctrl-Alt-Escape (که در آن Alt نخستین کلید تبدیلگر است) از توقف Wait خارج شوید. برای تعریف مجدد این توالی کلید، به دستور EscapeFunc مراجعه کنید.
Status On | Off
قالب دادههای JSON به شکل زیر است:
{
"version": 3,
"current_screen": "HDMI2",
"screens": {
"HDMI2": {
"randr_order": 0,
"current_client": "n6tadam@shuttle: ~",
"desktops": {
"0": {
"number": 0,
"is_urgent": false,
"is_current": true,
"number_of_clients": 5
},
},
},
},
}
این بخشها بسته به تعداد هر یک، برای تمام صفحهنمایشها، گروهها و غیره تکرار میشوند.
دستورهای شرطی، دستورهایی هستند که فقط در صورت برآورده شدن شرایطی خاص اجرا میشوند. بیشتر دستورهای شرطی مانند Next، ThisWindow یا All روی پنجرهها عمل میکنند. یک دستور شرطی به نام Test نیز وجود دارد که روی شرایط سراسری بدون ارتباط با پنجرهها کار میکند. نحو (syntax) این شرایط در ادامه شرح داده شده است. به منظور خوانایی بهتر، فهرست شرایط در انتهای این بخش قرار دارد.
کدهای بازگشتی (Return Codes)
حلقه پنجرهها (The Ring of Windows)
فهرست دستورهای شرطی (List of Conditional Commands)
All [options] [(conditions)] command
این دستور به طور ضمنی شامل شرایط CirculateHit، CirculateHitIcon و CirculateHitShaded است. این شرایط را میتوان با مشخص کردن صریح !CirculateHit و غیره غیرفعال کرد.
Any [(conditions)] command
Break [levels]
AddToFunc PickWindowRaiseAndDeiconify + I Pick + I TestRc (Error) Break + I Raise + I Iconify off
Current [(conditions)] command
این دستور به طور ضمنی شامل شرایط CirculateHit، CirculateHitIcon و CirculateHitShaded است. این شرایط را میتوان با مشخص کردن صریح !CirculateHit و غیره غیرفعال کرد.
Direction [FromPointer] direction [(conditions)] command
KeepRc command
Next [(conditions)] command
None [(conditions)] command
این دستور به طور ضمنی شامل شرایط CirculateHit، CirculateHitIcon و CirculateHitShaded است. این شرایط را میتوان با مشخص کردن صریح !CirculateHit و غیره غیرفعال کرد.
NoWindow command
Pick [(conditions)] command
این دستور به طور ضمنی شامل شرایط CirculateHit، CirculateHitIcon و CirculateHitShaded است. این شرایط را میتوان با مشخص کردن صریح !CirculateHit و غیره غیرفعال کرد.
PointerWindow [(conditions)] command
این دستور به طور ضمنی شامل شرایط CirculateHit، CirculateHitIcon و CirculateHitShaded است. این شرایط را میتوان با مشخص کردن صریح !CirculateHit و غیره غیرفعال کرد.
Prev [(conditions)] command
Test [(test-conditions)] command
شرط آزمون Version operator x.y.z در صورتی برآورده میشود که شرط منطقی عبارت درست باشد. مقادیر معتبر operator عبارتند از: >=، >، <=، <، == و !=.
مثال:
Test (Version >= 2.5.11) Echo 2.5.11 or later.
شرط آزمون EnvIsSet varname در صورتی درست است که متغیر محیطی دادهشده مقداردهی شده باشد. شرط آزمون EnvMatch varname pattern در صورتی درست است که pattern با مقدار متغیر محیطی یا infostore دادهشده مطابقت داشته باشد (به InfoStoreAdd مراجعه کنید). الگو میتواند شامل نویسههای خاص "*" و "?" باشد. نام متغیر "varname" بدون علامت دلار ابتدایی ($) نوشته میشود.
شرط StrMatch string pattern بررسی میکند که آیا string دادهشده با pattern دادهشده مطابقت دارد یا خیر، که یک رشته حساس به حروف بزرگ و کوچک است و میتواند شامل نویسههای خاص "*" و "?" برای نویسههای عمومی (wildcard) باشد. این دستور میتواند بهجای EnvMatch با نحوی متفاوت به کار رود و همچنین امکان بررسی این را فراهم میسازد که آیا سایر بسطهای متغیر با یک مقدار مشخص برابر هستند یا خیر. برای مثال، جهت بررسی اینکه آیا نام مانیتور کنونی "DP-2" است، از این دستور استفاده کنید:
Test (StrMatch $[monitor.current] DP-2) Echo True # StrMatch and EnvMatch have different syntaxes: Test (EnvMatch HOME /home/username) ... Test (StrMatch $[HOME] /home/username) ...
شرط آزمون EdgeHasPointer [direction] در صورتی درست است که لبه در جهت دادهشده در حال حاضر حاوی اشارهگر باشد. شرط آزمون EdgeIsActive [direction] در صورتی درست است که لبه در جهت دادهشده در حال حاضر فعال باشد. یک لبه فعال است و میتواند حاوی اشارهگر باشد اگر یا دستوری به آن متصل شده باشد و یا پیمایش لبه (edge scroll) در آن جهت در دسترس باشد. جهت میتواند یکی از * Any, North, Top, Up, West, Left, South, Bottom, Down, Right* و * East باشد. اگر هیچ جهتی مشخص نشود، Any* فرض میشود.
شرط آزمون Start معادل یکی از شرایط Init یا Restart است. این شرط فقط هنگام راهاندازی یا شروع مجدد، پیش از و در طول اجرای StartFunction درست است. شرط آزمون Exit معادل یکی از شرایط Quit یا ToRestart است. این شرط فقط هنگام خاموش شدن، در طول اجرای تابع ExitFunction معتبر است.
شرایط آزمون True و False بدون قید و شرط درست و نادرست هستند.
علاوه بر این، اگر نام یک شرط آزمون شناخته نشود، کد بازگشتی Error تنظیم میشود و دستور اجرا نمیگردد.
شرایط آزمون F file، R file، W file، X file و I file وجود فایل دادهشده [F]ile (احتمالاً با مجوزهای خواندن [R]ead یا نوشتن [W]rite)، فایل اجرایی e[X]ecutable (در $PATH)، یا تصویر [I]mage (در ImagePath) را بررسی میکنند.
مثال:
AddToFunc StartFunction I Test (Init) Exec exec xterm AddToFunc VerifyVersion + I Test (Version 2.5.*) Echo 2.5.x detected + I TestRc (NoMatch) \ Test (!Version 2.6.*) Echo Future version + I TestRc (NoMatch) \ Echo 2.6.x is detected Test (F $[FVWM_USERDIR]/local-config) Read local-config Test (X xterm-utf16) Exec exec xterm-utf16
TestRc [([!]returncode)] command
AddToFunc ToggleXterm + I All (my_xtermwindow) Close + I TestRc (NoMatch) Exec xterm -T my_xtermwindow
ThisWindow [(conditions)] command
این دستور بهطور ضمنی شامل شرایط CirculateHit، CirculateHitIcon و CirculateHitShaded است. میتوان آنها را با تعیین صریح "!CirculateHit" و غیره غیرفعال کرد.
WindowId [id] [(conditions)] | [root] command
این دستور بهطور ضمنی شامل شرایط CirculateHit، CirculateHitIcon و CirculateHitShaded است. میتوان آنها را با مشخص کردن صریح !CirculateHit و غیره غیرفعال کرد.
مثالها:
WindowId 0x34567890 Raise WindowId root 1 WarpToWindow 50 50 WindowId $0 (Silly_Popup) Deleteدر گذشته این دستور بیشتر برای توابعی مفید بود که با دستور WindowList به کار میرفتند، یا برای پردازش گزینشی فراخوانیهای FvwmEvent (مانند مثال آخر)، اما در حال حاضر این توابع گرداننده درون زمینه پنجره فراخوانی میشوند، بنابراین در این موارد واقعاً به این دستور نیازی نیست. با این حال هنوز هم اگر برای نمونه لازم باشد شناسه پنجره برای پردازشهای بعدی در یک متغیر محیطی ذخیره شود، میتواند مفید باشد.
Pick SetEnv BOOKMARKED_WINDOW $[w.id] WindowId $[BOOKMARKED_WINDOW] WarpToWindow
شرایط (Conditions)
علاوه بر این، شرایط ممکن است شامل یک یا چند نام پنجره برای مطابقت باشند. اگر بیش از یک نام پنجره مشخص شود، همه آنها باید مطابقت داشته باشند. هنگام تلاش برای یافتن تطابق، نام پنجره، نام آیکون، کلاس (class) و منبع (resource) مد نظر قرار میگیرند. هر نام میتواند شامل نویسههای عمومی (wildcard) '*' و '?' باشد و میتواند از دو یا چند جایگزین تشکیل شود که با نویسه '|' (که بهعنوان عملگر OR عمل میکند) از یکدیگر جدا شدهاند. (در صورت استفاده از عملگرهای OR، نباید با فاصله از نامها جدا شوند.) هر نام پنجره میتواند با '!' شروع شود، که در صورت تطابق هر یک از نام پنجره، نام آیکون، کلاس یا منبع، از اجرای command جلوگیری میکند. با این حال، '!' نباید برای تکتک نامها در گروهی که با عملگرهای OR جدا شدهاند اعمال شود؛ بلکه فقط میتواند در ابتدای گروه قرار گیرد، و در آن صورت روی کل گروه عمل خواهد کرد.
مثالها:
Next ("Netscape|konqueror|Mozilla*") WarpToWindow 99 90
این دستور بدون در نظر گرفتن اینکه کدامیک از سه مرورگر وب نامبرده در حال استفاده است، به پنجره مرورگر وب بعدی میرود.
Next ("Mozilla*", "Bookmark*") WarpToWindow 99 90
این دستور به پنجره مدیریت بوکمارک Mozilla میرود و سایر پنجرههای Mozilla و پنجرههای بوکمارک مرورگرهای دیگر را نادیده میگیرد.
All ("XTerm|rxvt", !console) Iconify
این دستور تمام پنجرههای xterm و rxvt در صفحه جاری را به آیکون تبدیل میکند (Iconify)، بهجز پنجرهای به نام "console" (با گزینه -name در xterm) که مستثنی میشود.
Next (!"FvwmPager|FvwmForm*|FvwmButtons") Raise Next (!FvwmPager, !FvwmForm*, !FvwmButtons) Raise
این دو دستور معادل یکدیگرند؛ هر یک از آنها پنجره بعدی را که جزو ماژولهای نامبرده fvwm نباشد، بالا میآورد (Raise).
هر شرطی را میتوان با قرار دادن یک علامت تعجب ('!') درست در جلوی نام آن، نقیض کرد.
AcceptsFocus, AnyScreen, CirculateHit, CirculateHitIcon, CirculateHitShaded, Closable, CurrentDesk, CurrentGlobalPage, CurrentGlobalPageAnyDesk, CurrentPage, CurrentPageAnyDesk, CurrentScreen, Desk, FixedPosition, FixedSize, Focused, HasBorders, HasHandles, HasPointer, HasTitle, TitleAtTop, TitleAtBottom, TitleAtLeft, TitleAtRight, Iconic, Iconifiable, Layer [n], Maximizable, Maximized, Overlapped, PlacedByButton n, PlacedByButton3, PlacedByFvwm, Raised, Shaded, State n, Sticky, StickyAcrossDesks, StickyAcrossPages, StickyIcon, StickyAcrossDesksIcon, StickyAcrossPagesIcon, Transient, Visible.
شرط AcceptsFocus تمام پنجرههایی را که فوکوس ورودی را نمیخواهند (برنامه، "Input hints" پنجره را روی False تنظیم کرده است) و از گزینه Lenience در دستور Style استفاده نمیکنند، مستثنی میکند. همچنین تمام پنجرههایی که از سبک NeverFocus استفاده میکنند نادیده گرفته میشوند. توجه: !Lenience معادل گزینه منسوخشده NoLenience است.
با استفاده از شرط AnyScreen همراه با هر یک از شرایط Current...، پنجرههایی که با صفحهنمایش حاوی اشارهگر ماوس تلاقی ندارند نیز برای بررسی تطابق در نظر گرفته میشوند. برای مثال:
# Focus next window on current page, # regardless of screen Next (CurrentPage, AnyScreen) Focus
گزینههای CirculateHit و CirculateHitIcon ویژگیهای Style مربوط به CirculateSkip و CirculateSkipIcon را برای پنجرههای عادی یا آیکونی نادیده میگیرند. گزینه CirculateHitShaded ویژگی CirculateSkipShaded در Style را بازنویسی میکند. هر سه گزینه بهطور پیشفرض برای دستور Current فعال هستند. میتوان آنها را با مشخص کردن صریح !CirculateHit و غیره خاموش کرد. توجه: این شرایط را با گزینههای سبک همنام اشتباه نگیرید. بهطور مشخص،
Style foo CirculateSkip Next (foo, CirculateHit) ...
با مورد زیر یکسان نیست:
Style foo CirculateHit ... Next (foo)
مورد نخست پنجرههایی با نام foo را تنها در دستور Next انتخاب میکند. در مثال دوم، این پنجرهها همواره در تمام دستورهای شرطی مطابقت داده میشوند.
شرط Closable تنها با پنجرههایی مطابقت دارد که اجازه بسته شدن دارند.
شرط CurrentDesk تنها با پنجرههایی مطابقت دارد که روی میزکار (desk) جاری قرار دارند.
شرط CurrentGlobalPage تنها با پنجرههایی مطابقت دارد که روی صفحه جاری از میزکار جاری قرار دارند، بدون در نظر گرفتن اینکه پنجره روی کدام صفحهنمایش واقع شده است. این شرط بهطور ضمنی شرط CurrentDesk را فعال میکند.
شرط CurrentGlobalPageAnyDesk تنها با پنجرههایی مطابقت دارد که روی صفحه جاری از هر میزکاری قرار دارند، بدون در نظر گرفتن صفحهنمایش RandR.
شرط CurrentPage تنها با پنجرههایی مطابقت دارد که روی صفحه جاری از میزکار جاری قرار دارند. این شرط بهطور ضمنی شرط CurrentDesk را فعال میکند.
شرایط CurrentPageAnyDesk و CurrentScreen تنها با پنجرههایی مطابقت دارند که روی صفحه جاری از هر میزکاری قرار گرفتهاند.
شرط Screen [name] تنها با پنجرههایی مطابقت دارد که روی صفحهنمایش مشخصشده قرار دارند..sp شرط Desk [n] تنها با پنجرههایی مطابقت دارد که روی میزکار (desk) مشخصشده قرار دارند.
شرط FixedPosition تمام پنجرههایی را که موقعیت ثابتی ندارند، چه از طریق اشارات (hints) مدیر پنجره (WM) و چه با گزینهٔ Style یعنی FixedPosition تنظیم شده باشند، مستثنی میکند. مثال:
DestroyFunc ToggleFixedGeometry AddToFunc ToggleFixedGeometry + I Pick (FixedPosition) \ WindowStyle VariablePosition, VariableSize + I TestRc (NoMatch) WindowStyle FixedPosition, FixedSize
شرط FixedSize تمام پنجرههایی را که اندازهٔ ثابتی ندارند، چه از طریق اشارات مدیر پنجره و چه با گزینهٔ Style یعنی FixedSize تنظیم شده باشند، مستثنی میکند.
شرط Focused با پنجرهای مطابقت دارد که در حال حاضر فوکوس صفحهکلید را در اختیار دارد. این شرط برای دستور Current مفید نیست، اما میتواند با سایر دستورات شرطی استفاده شود.
شرط HasBorders تمام پنجرههایی را که فاقد حاشیه هستند، مستثنی میکند.
شرط HasHandles تمام پنجرههایی را که فاقد دستگیرههای تغییر اندازه هستند، مستثنی میکند.
شرط HasPointer تمام پنجرههایی را که نشانگر ماوس درون آنها قرار ندارد، مستثنی میکند.
شرط HasTitle تمام پنجرههایی را که فاقد نوار عنوان هستند، مستثنی میکند.
شرطهای TitleAtTop، TitleAtBottom، TitleAtLeft و TitleAtRight وجود نوار عنوان را در آن موقعیت از پنجره بررسی میکنند.
شرط Iconic تنها با پنجرههای آیکونشده (iconic) مطابقت دارد.
شرط Iconifiable تنها با پنجرههایی مطابقت دارد که اجازهٔ آیکونشدن دارند.
شرط Layer [n] تنها با پنجرههای موجود در لایهٔ مشخصشده مطابقت دارد. آرگومان اختیاریِ شرط Layer بهطور پیشفرض لایهٔ پنجرهٔ دارای فوکوس است. نقیض آن یعنی !Layer شرط Layer را غیرفعال میکند.
شرط Maximizable تنها با پنجرههایی مطابقت دارد که اجازهٔ بیشینهشدن دارند.
شرط Maximized تنها با پنجرههای بیشینهشده مطابقت دارد.
شرط Overlapped تنها با پنجرههایی مطابقت دارد که توسط پنجرههای دیگر در همان لایه همپوشانی شدهاند (یا پنجرههای مدیریتنشده در صورتی که از گزینهٔ RaiseOverUnmanaged در دستور BugOpts استفاده شده باشد). توجه داشته باشید که این شرط در صورت وجود پنجرههای زیاد یا در صورت استفاده از RaiseOverUnmanaged و کند بودن اتصال به کارساز X، میتواند کند باشد.
شرط PlacedByButton n زمانی برقرار میشود که آخرین جابهجایی تعاملی پنجره (با دستور Move یا بهصورت ManualPlacement) با فشردن دکمهٔ ماوس n پایان یافته باشد. مثال:
Mouse 1 T A Function MoveWindow DestroyFunc MoveWindow AddToFunc MoveWindow + C Move + C ThisWindow (PlacedByButton 5) WindowShade off + C TestRc (Match) Maximize on 0 100 + C ThisWindow (PlacedByButton 4) WindowShade on
شرط PlacedByButton3 همان معنای PlacedByButton 3 را دارد. این شرط تنها برای سازگاری با نسخههای قبلی باقی مانده است.
شرط PlacedByFvwm تمام پنجرههایی را که بهصورت دستی یا با استفاده از اشارهٔ موقعیت کاربر یا برنامه جایگذاری شدهاند، مستثنی میکند.
شرط Raised تنها با پنجرههایی مطابقت دارد که کاملاً در درگاهدید (viewport) فعلی قابل مشاهده هستند و توسط هیچ پنجرهٔ دیگری همپوشانی نشدهاند.
شرط Shaded تنها با پنجرههای سایهخورده/جمعشده مطابقت دارد (دستور WindowShade را ببینید).
شرطهای State n یا !State n تنها با پنجرههایی مطابقت دارند که وضعیت عدد صحیح مشخصشده در آنها تنظیم (یا لغو تنظیم) شده باشد. برای جزئیات به دستور State مراجعه کنید. آرگومان میتواند در بازهٔ 0 تا 31 باشد.
شرطهای Sticky، StickyAcrossDesks و StickyAcrossPages تنها با پنجرههایی مطابقت دارند که در حال حاضر چسبان (sticky)، چسبان در تمام میزکارها یا چسبان در تمام صفحات هستند. لطفاً برای جزئیات به گزینههای Style با همین نام و دستورات Stick، StickAcrossDesks و StickAcrossPages مراجعه کنید.
شرطهای StickyIcon، StickyAcrossDesksIcon و StickyAcrossPagesIcon تنها با پنجرههایی مطابقت دارند که در وضعیت آیکونشده، چسبان، چسبان در تمام میزکارها یا چسبان در تمام صفحات میشوند.
شرط Transient تنها با پنجرههایی مطابقت دارد که ویژگی «transient» توسط برنامه برای آنها تنظیم شده است. این حالت معمولاً برای منوهای جهنده (popup) و کادرهای محاورهای برنامهها صادق است. ماژول FvwmIdent میتواند برای فهمیدن اینکه آیا پنجرهای خاص transient است یا خیر استفاده شود.
شرط Visible تنها با پنجرههایی مطابقت دارد که دستکم بهطور جزئی در درگاهدید (viewport) فعلی قابل مشاهده هستند و بهطور کامل توسط پنجرههای دیگر همپوشانی نشدهاند.
Fvwm پایگاه دادهای از خطوط پیکربندی پودمان را به شکل زیر نگهداری میکند:
*<ModuleName>: <Config-Resource>
که در آن <ModuleName> یا نام واقعی پودمان و یا یک نام مستعار (alias) است.
این پایگاه داده در ابتدا از فایل پیکربندی (یا از خروجی دستور پیکربندی -cmd) پر میشود و بعداً میتواند توسط کاربر (از طریق FvwmCommand) یا توسط پودمانها تغییر یابد.
هنگامی که پودمانها اجرا میشوند، بخش مربوط به خود را از پایگاه داده میخوانند. (مفهوم این پایگاه داده شبیه به پایگاه داده منابع در سامانه X است).
دستورهای کار با پایگاه داده پیکربندی پودمان در زیر شرح داده شدهاند.
* module_config_line
*FvwmPager: WindowBorderWidth 1 *FvwmButtons-TopRight: Geometry 100x100-0+0 *FvwmButtons-Bottom: Geometry +0-0
DestroyModuleConfig module_config
ساختار نوشتاری جدیدِ بدون تداخل اجازه میدهد یک جداکننده یعنی دونقطه و فاصلههای اختیاری بین نام پودمان و بقیه خط قرار گیرد. در این حالت نام پودمان (یا نام مستعار) نمیتواند شامل نویسههای عمومی باشد.
DestroyModuleConfig FvwmButtons* DestroyModuleConfig FvwmForm: Fore DestroyModuleConfig FvwmIconMan: Tips*
KillModule modulename [modulealias]
# kill all pagers KillModule FvwmPager Module FvwmEvent SoundEvent KillModule FvwmEvent SoundEvent
Module modulename [moduleparams]
Module FvwmForm MyForm
در حال حاضر پودمانهای موجود (همراه با fvwm) عبارتند از FvwmAnimate (ایجاد جلوههای پویانمایی هنگامی که پنجرهای کوچک یا بزرگ میشود)، FvwmAuto (پودمان بالا آوردن خودکار پنجره)، FvwmBacker (برای تغییر پسزمینه هنگام تغییر میزکارها)، FvwmBanner (برای نمایش یک تصویر چشمنواز XBM، XPM، PNG یا SVG)، FvwmButtons (یک نوار ابزار قابل سفارشیسازی ایجاد میکند)، FvwmPrompt (برای اجرای مستقیم دستورهای fvwm)، FvwmEvent (راهاندازی کنشهای گوناگون بر اساس رویدادها)، FvwmForm (برای نمایش کادرهای محاورهای)، FvwmIconMan (یک مدیر آیکون انعطافپذیر)، FvwmIdent (برای دریافت اطلاعات پنجره)، FvwmPager (یک نسخه مینیاتوری از میزکار)، FvwmPerl (یک دستکاریکننده و پیشپردازنده Perl)، FvwmProxy (برای یافتن و کنترل پنجرههای پوشاندهشده با استفاده از پنجرههای پروکسی کوچک)، FvwmRearrange (برای مرتبسازی دوباره پنجرهها)، FvwmScript (یکی دیگر از ابزارهای قدرتمند کادر محاوره). این پودمانها هر کدام صفحه راهنمای اختصاصی خود را دارند. پودمانهای دیگری نیز ممکن است در دسترس باشند.
پودمانها میتوانند برنامههای گذرا و کوتاهمدت باشند، یا مانند FvwmButtons در تمام طول مدت نشست X باقی بمانند. پودمانها در صورت امکان قبل از راهاندازیهای مجدد و خروجها توسط مدیر پنجره متوقف میشوند. بخش مقدماتی پودمانها را ببینید. در صورتی که modulename با تمام دستورهای fvwm متمایز باشد، کلیدواژه Module میتواند حذف شود.
ModuleListenOnly modulename [moduleparams]
ModulePath path
متغیر ModulePath میتواند شامل متغیرهای محیطی نظیر $HOME (یا ${HOME}) باشد. علاوه بر این، یک '+' در path به مقدار قبلی path بسط داده میشود که امکان افزودن آسان به انتها یا ابتدای path را فراهم میسازد.
به عنوان مثال:
ModulePath ${HOME}/lib/fvwm/modules:+
دایرکتوری حاوی پودمانهای استاندارد از طریق متغیر محیطی $FVWM_MODULEDIR در دسترس است.
ModuleSynchronous [Expect string] [Timeout secs] modulename
هشدار: قفل کردن fvwm با این دستور بسیار آسان است، حتی اگر زمان انتظاری (timeout) تعیین شده باشد. در انتخاب رشتهای که قرار است منتظرش بمانید نهایت دقت را به کار ببرید. اگرچه تمامی پودمانهای موجود در توزیع fvwm پس از راهاندازی درست رشته "NOP FINISHED STARTUP" را بازمیگردانند، اما ممکن است در مورد پودمانهای شخص ثالث اینگونه نباشد. علاوه بر این، میتوانید با استفاده از توالی کلیدهای زیر برای رهایی از یک دستور قفلشده ModuleSynchronous تلاش کنید.sp (به EscapeFunc مراجعه کنید).
ModuleTimeout timeout
SendToModule modulename string
دستورهای مدیریت نشست (Session Management Commands)
Quit
Restart [window_manager [params]]
این دستور نباید در انتها علامت اَمپرسند (&) داشته باشد. دستور میتواند پارامترهای اختیاری با نحو ساده شبیه به شل داشته باشد. میتوانید از ~ (که به دایرکتوری خانگی کاربر گسترش مییابد) و متغیرهای محیطی $VAR یا ${VAR} استفاده کنید. در اینجا چند مثال آمده است:
Key F1 R N Restart Key F1 R N Restart fvwm1 -f .fvwmrc Key F1 R N Restart xterm -n '"X console"' -T \"X\ console\" -e fvwm
توجه داشته باشید که در حال حاضر در نمایشگرهای چندسَره (multi-headed)، راهاندازی مجدد fvwm روی صفحههای مختلف بهطور مستقل عمل میکند.
Restart --pass-args window_manager
Restart --dont-preserve-state [other-params]
Restart [other-params]
اما هیچکدام از وضعیتهای پنجرهها را در طول راهاندازی مجدد ذخیره نمیکند.
بدون این گزینه، Restart وضعیتهای مربوط به اکثر پنجرهها را با نوشتن در فایلی به نام .fs-restart-$HOSTDISPLAY در دایرکتوری خانگی کاربر حفظ میکند.
SaveSession
SaveQuitSession
مجموعهرنگها (Colorsets) روشی قدرتمند برای واپایش رنگها هستند. مجموعهرنگها منابع ظاهری مشترکی را میان fvwm و ماژولهای آن ایجاد میکنند. هنگامی که یک مجموعهرنگ تغییر مییابد، تمام بخشهای fvwm به آن تغییر واکنش نشان میدهند. یک مجموعهرنگ شامل رنگ پیشزمینه، رنگ پسزمینه، رنگ سایه و برجستگی (اغلب بر پایهٔ رنگ پسزمینه)، و جلوهٔ پسزمینه (شامل تصاویر و انواع گرادیانها) است. روشی نیز برای جلوهبخشی پسزمینه و تعیین سایر عملیاتهای رنگی وجود دارد.
Colorset num [options]
هشدار: بالاترین شمارهٔ مجموعهرنگِ استفادهشده، میزان مصرف حافظه را تعیین میکند. بنابراین، اگر 'Colorset 100000' را تعریف کنید، حافظهٔ مورد نیاز برای ۱۰۰۰۰۱ مجموعهرنگ مصرف خواهد شد. شمارههای مجموعهرنگ خود را تا حد ممکن کوچک نگه دارید.
بر طبق قرارداد، مجموعهرنگها به این شکل شمارهگذاری میشوند:
# 0 = Default colors # 1 = Inactive windows # 2 = Active windows # 3 = Inactive menu entry and menu background # 4 = Active menu entry # 5 = greyed out menu entry (only bg used) # 6 = module foreground and background # 7 = hilight colors
اگر به رنگهای بیشتری نیاز دارید و نمیخواهید چرخ را دوباره اختراع کنید، میتوانید از قرارداد مورد استفاده در fvwm-themes بهره ببرید؛ این قرارداد معنای ۴۰ مجموعهرنگ اول را تقریباً برای تمام اهداف تعیین میکند:
http://fvwm-themes.sourceforge.net/doc/colorsets
هر مجموعهرنگ دارای چهار رنگ، یک pixmap اختیاری و یک mask شکل اختیاری است. این چهار رنگ توسط ماژولها بهعنوان رنگهای پیشزمینه، پسزمینه، برجستگی و سایه به کار میروند. زمانی که یک مجموعهرنگ ایجاد میشود، رنگ پیشزمینه بهطور پیشفرض سیاه و پسزمینه خاکستری است. پیشزمینه و پسزمینه بهعنوان «average» و «contrast» نشانهگذاری میشوند (در ادامه ببینید) تا تعیین یک pixmap یا گرادیان بهتنهایی نتایج معقولی تولید کند.
options فهرستی جداشده با کاما شامل برخی از کلیدواژههای زیر است: fg, Fore, Foreground, bg, Back, Background, hi, Hilite, Hilight, sh, Shade, Shadow, fgsh, Pixmap, TiledPixmap, AspectPixmap, Transparent, RootTransparent, Shape, TiledShape, AspectShape, NoShape, ?Gradient, Tint, fgTint, bgTint, Alpha, fgAlpha, Dither, NoDither, IconTint, IconAlpha, Plain.
گزینههای fg، Fore و Foreground یک نام رنگ را بهعنوان آرگومان گرفته و رنگ پیشزمینه را تنظیم میکنند. نام ویژهٔ Contrast میتواند برای انتخاب رنگی که کنتراست مناسبی با رنگ پسزمینه دارد استفاده شود. برای بازنشانی رنگ پیشزمینه به مقدار پیشفرض، میتوانید بهسادگی نام رنگ را حذف کنید.
گزینههای bg، Back و Background یک نام رنگ را بهعنوان آرگومان گرفته و رنگ پسزمینه را تنظیم میکنند. این گزینهها همچنین رنگهای برجستگی و سایه را روی مقادیری قرار میدهند که جلوهای سهبعدی ایجاد کنند، مگر اینکه این مقادیر با گزینههای زیر صریحاً مشخص شده باشند. نام ویژهٔ Average میتواند برای انتخاب رنگی به کار رود که رنگ میانگین pixmap است. اگر pixmap با گزینهٔ Tint دارای تهرنگ شده باشد، این تهرنگ در محاسبهٔ رنگ میانگین در نظر گرفته نمیشود. برای بهدست آوردن رنگ میانگین «واقعی» باید از گزینهٔ bgTint استفاده کنید. در صورت حذف نام رنگ، رنگ پسزمینه به مقدار پیشفرض بازنشانی میشود.
گزینههای hi، Hilite و Hilight یک نام رنگ را بهعنوان آرگومان دریافت کرده و رنگ برجستگی را مشخص میکنند. اگر رنگ برجستگی صریحاً تنظیم نشده باشد، پیشفرض محاسبهٔ آن از روی رنگ پسزمینه است. برای بازگشت به رفتار پیشفرض، نام رنگ را میتوان حذف کرد.
گزینههای sh، Shade و Shadow یک نام رنگ را بهعنوان آرگومان دریافت کرده و رنگ سایه را تنظیم میکنند. اگر رنگ سایه صریحاً تعیین نشده باشد، پیشفرض محاسبهٔ آن از روی رنگ پسزمینه است. برای بازگشت به رفتار پیشفرض، نام رنگ را میتوان حذف کرد.
گزینهٔ fgsh یک نام رنگ را بهعنوان آرگومان دریافت کرده و رنگ مورد استفاده در جلوهٔ سایهدار کردن قلم را مشخص میکند. بخش Font Shadow Effects در صفحهٔ راهنمای fvwm را ببینید. بهطور پیشفرض این رنگ از روی رنگهای پیشزمینه و پسزمینه محاسبه میشود. برای بازگشت به حالت پیشفرض، میتوان نام رنگ را حذف کرد.
گزینههای Pixmap، TiledPixmap و AspectPixmap یک نام فایل را بهعنوان آرگومان گرفته، در ImagePath جستجو کرده و آن را بهعنوان pixmap پسزمینه به کار میبرند. بخشهای شفاف با رنگ پسزمینه پر میشوند. تعیین نکردن نام فایل هر تصویر موجود را از مجموعهرنگ حذف میکند. گزینهٔ TiledPixmap نسخههای تکرارشونده از تصویر را بدون مقیاسبندی تولید میکند، Pixmap باعث میشود تصویر کشیده شود تا با هر شیئی که مجموعهرنگ روی آن اعمال شده متناسب گردد، و AspectPixmap آن را با حفظ نسبت ابعاد تصویر، برای برازش میکشد.
گزینهٔ Transparent یک pixmap پسزمینهٔ شفاف ایجاد میکند. این pixmap بهعنوان پسزمینهٔ پنجره برای دستیابی به شفافیت نسبت به ریشه (root transparency) استفاده میشود. برای این کار باید از گزینهٔ ParentalRelativity در دستور Style استفاده کنید. تغییر بعدی پسزمینهٔ ریشه ممکن است تشخیص داده شود یا خیر؛ این موضوع به برنامهای بستگی دارد که برای تنظیم پسزمینه استفاده میشود. اگر از fvwm-root، xsetbg (xli)، FvwmBacker با رنگهای یکدست یا رنگهای مجموعهرنگ، یا نسخههای جدید Esetroot (>= 9.2) استفاده کنید، تغییر پسزمینه تشخیص داده میشود. اگر تغییرات پسزمینه تشخیص داده نشود (مثلاً اگر از xv یا xsetroot استفاده کنید)، میتوانید با استفاده از گزینهٔ -d در fvwm-root تشخیص را اجبار کنید:
xv -root -quit mybg.png; fvwm-root -d
به دلیل شیوهٔ پیادهسازی شفافیت در سامانهٔ X، هیچ تضمینی وجود ندارد که جلوهٔ مورد نظر حاصل شود. ممکن است برنامه حتی از کار بیفتد (crash کند). اگر با این گزینه مشکلی دارید، از آن استفاده نکنید.
استفاده از جابهجایی و تغییر اندازهٔ خطوط پیرامونی (outline) (دستور OpaqueMoveSize و گزینهٔ Style با نام ResizeOpaque را ببینید) و همچنین تنظیم سبک WindowShadeShrinks میتواند کمککننده باشد. شفافیت حاصلشده با Transparent به این بستگی دارد که مجموعهرنگ روی پیشزمینه یا پسزمینهٔ پنجره اعمال شده باشد. در حالت دوم، شفافیت نسبت به پنجرهٔ والدِ پنجرهای است که مجموعهرنگ روی آن تعریف شده است. برای مثال:
Colorset 12 VGradient 200 grey30 grey60 Colorset 17 Transparent *FvwmIconMan: Colorset 12 *FvwmIconMan: PlainColorset 17
یک IconMan با پسزمینهٔ گرادیان عمودی خاکستری تولید میکند و دکمهها (بهوسیلهٔ شفافیت) از پسزمینه استفاده میکنند. برای داشتن یک IconMan شفاف (نسبت به root):
Colorset 12 Transparent Colorset 17 Transparent Colorset 18 Transparent Colorset 19 Transparent *FvwmIconMan: Colorset 12 *FvwmIconMan: PlainColorset 17 *FvwmIconMan: FocusColorset 18 *FvwmIconMan: IconColorset 19
گزینهٔ Colorset در IconMan پسزمینهٔ پنجرهٔ IconMan را تعریف میکند، اما PlainColorset و FocusColorset روی پیشزمینه کشیده میشوند. بنابراین، شفافیت دکمههای IconMan با رسم نکردن هیچ چیزی حاصل میشود. اکنون اگر این IconMan در یک FvwmButtons بلعیده شود، بهصورت:
FvwmButtons:(Colorset 10, Swallow "FvwmIconMan" 'FvwmIconMan')
آنگاه FvwmIconMan به فرزند FvwmButtons تبدیل میشود و نسبت به FvwmButtons شفاف خواهد بود. بنابراین در این حالت، FvwmIconMan از Colorset 10 بهعنوان پسزمینه استفاده میکند. اگر شفافیت نسبت به پنجرهٔ ریشه (root) را میخواهید، از گزینهٔ RootTransparent استفاده کنید. ماژولهای FvwmButtons، FvwmIconMan و FvwmIdent نسبتاً ساده هستند. یک گزینهٔ اصلی مجموعهرنگ وجود دارد که پسزمینهٔ پنجره را تعیین میکند و سایر مجموعهرنگها (در صورت وجود) روی پیشزمینه رسم میشوند. مورد FvwmProxy سادهتر است؛ دو مجموعهرنگ به پسزمینههای پنجره ارجاع دارند. ماژول FvwmPager پیچیدهتر است چرا که تقریباً همهچیز در pager پنجرههایی با برخی روابط والد و فرزندی هستند (پنجرههای کوچک فرزند هستند و میزکارها والد، و همهٔ اینها با صفحهٔ برجستهشده پیچیدهتر میشود). بنابراین مجموعهرنگها بر پسزمینهٔ این پنجرهها اعمال میشوند. باید این مورد را آزمایش کنید. برای FvwmForm و FvwmScript وضعیت مشابه است. یک پنجرهٔ اصلی (فرزندِ پنجرهٔ root) وجود دارد که متناظر با مجموعهرنگ اصلی است و بیشتر ویجتها پنجرههایی هستند که فرزند پنجرهٔ اصلی محسوب میشوند. گزینهٔ Tint ممکن است با گزینهٔ Transparent کار کند یا نکند. وقتی مجموعهرنگ روی پیشزمینه رسم شود، Tint باید کار کند. در برخی موارد، اعمال تهرنگ (tinting) ممکن است بسیار کُند باشد. اعمال تهرنگ ممکن است با منوی fvwm (بدون پویانمایی) کار کند. اگر ویژگی backing store در کارساز X شما فعال باشد، Tinting ممکن است بهتر کار کند (با xdpyinfo بررسی کنید که آیا اینطور است یا خیر). این احتمال وجود دارد که پشتیبانی کارساز X شما از backing store با روش دستکاری نامناسبی (terrible hack) که برای Tint کردن Pixmap با خاصیت ParentRelative به کار رفته سازگار نباشد. بنابراین، برای دستیابی به شفافیت دارای تهرنگ نسبت به ریشه، امنتر است که از گزینهٔ RootTransparent استفاده کنید..sp RootTransparent [ buffer ] یک پسزمینهٔ شفاف نسبت به ریشه (root transparent) ایجاد میکند. برای کارکرد این گزینه، باید از یک برنامهٔ سازگار با Esetroot، fvwm-root به همراه گزینهٔ --retain-pixmap، یا FvwmBacker با گزینهٔ RetainPixmap (و colorset یا پسزمینههای یکرنگ) استفاده کنید. کلیدواژهٔ buffer فقط زمانی سودمند است که گزینهٔ Tint نیز به کار رفته باشد. این کار ایجاد پنجرههایی را که از colorset استفاده میکنند تسریع میبخشد (که برای منوهای fvwm بسیار مفید است)، اما به بهای مصرف بیشتر حافظه تمام میشود. همچنین جابهجایی و تغییر اندازهٔ کدر (opaque) را که بدون buffer میتواند به طرز غیرقابلقبولی کند باشد، سرعت میبخشد. با این وجود، این گزینه ممکن است حافظهٔ زیادی را در کارساز X اشغال کند (بسته به اندازهٔ تصویری که برای تنظیم پسزمینه استفاده شده است). در مجموع، استفاده از جابهجایی و تغییر اندازهٔ خط بیرونی (outline) برای ماژولهایی که از چنین colorsetای استفاده میکنند، میتواند ایدهٔ خوبی باشد.
گزینههای Shape، TiledShape و AspectShape یک نام فایل را به عنوان آرگومان دریافت میکنند، مسیر ImagePath را برای یافتن آن جستجو کرده و از آن به عنوان نگاشت بیت شکل (shape bitmap) استفاده میکنند. TiledShape نسخههای تکرارشوندهای از نگاشت بیت را بدون مقیاسبندی تولید میکند؛ Shape سبب کشیده شدن تصویر bitmap برای تطبیق با هر شیئی که colorset روی آن اعمال شده میشود و AspectShape با حفظ نسبت ابعاد (aspect ratio)، آن را برای انطباق میکشد. اگر فایل یک pixmap در قالب xpm باشد، ماسک شکلِ pixmap (تمامی پیکسلهای کدر) استفاده میشود. برای تصاویر png و svg، ماسک شکل معادل تمامی پیکسلهایی است که کاملاً شفاف نیستند (alpha > 0).
هشدار به دلیل نحوهٔ پیادهسازی شکلها در X11، نمیتوان شکلدار کردن پنجرهها را لغو کرد. ممکن است مجبور شوید fvwm یا برنامهٔ شکلیافته را مجدداً راهاندازی کنید.
دستور ?Gradient ... یک pixmap ایجاد کرده و آن را برای انطباق با پنجره میکشد. مقدار ?Gradient میتواند یکی از گزینههای HGradient، VGradient، DGradient، BGradient، SGradient، CGradient، RGradient یا YGradient باشد. انواع گرادیان به شرح زیر است: H افقی (horizontal)؛ V عمودی (vertical)؛ D مورب از گوشهٔ بالا-چپ به پایین-راست؛ B مورب وارونه از گوشهٔ پایین-چپ به بالا-راست؛ S مربعهای هممرکز؛ C دایرههای هممرکز؛ R الگوی شبیه به رادار و Y سبک یین و یانگ (بدون نقطهها). لطفاً برای نحو گرادیانها به بخش Color Gradients مراجعه کنید.
گزینهٔ Tint دو آرگومان میگیرد: یک رنگ و درصدی بین 0 تا 100. این گزینه باعث میشود تصویری که با استفاده از ?Pixmap یا ?Gradient تعریف شده است، با رنگ مشخصشده بر اساس آن درصد تینت شود. اگر تصویر شفاف باشد، Tint فقط بخش تصویر را تینت میکند. متأسفانه، پسزمینهٔ colorset که با استفاده از گزینهٔ Transparent مشخص شده باشد میتواند نتایج نامتعارفی ایجاد کند. برای جزئیات به گزینهٔ Transparent مراجعه کنید. بدون آرگومان، این گزینه تینت را حذف میکند.
گزینهٔ fgTint دو آرگومان میگیرد: یک رنگ و درصدی بین 0 تا 100. این گزینه باعث میشود رنگ تعریفشده با fg با رنگ مشخصشده بر اساس درصد تینت شود. بدون آرگومان، این گزینه تینت را حذف میکند.
گزینهٔ bgTint دو آرگومان میگیرد: یک رنگ و درصدی بین 0 تا 100. این گزینه باعث میشود رنگ تعریفشده با bg با رنگ مشخصشده بر اساس درصد تینت شود. اگر رنگهای sh و hi مشخص نشده باشند، دوباره از روی رنگ bg تینتشده محاسبه میشوند. بدون آرگومان، این گزینه تینت را حذف میکند.
گزینهٔ Alpha یک درصد بین 0 تا 100 را به عنوان آرگومان میگیرد. این گزینه موجب میشود fvwm تصویر تعریفشده توسط ?Pixmap یا ?Gradient را بر اساس آن درصد با رنگ bg ادغام کند. اگر درصد 0 باشد تصویر پنهان میشود و اگر 100 باشد طبق روال عادی نمایش مییابد (بدون ادغام). پیشفرض 100 است و در صورت ارائه نشدن آرگومان، به این مقدار بازمیگردد.
گزینهٔ fgAlpha یک درصد بین 0 تا 100 را به عنوان آرگومان دریافت میکند. این گزینه باعث میشود fvwm متن و پسزمینهٔ colorset را با استفاده از درصد مشخصشده ادغام کند. اگر درصد 0 باشد متن پنهان میشود و اگر 100 باشد متن طبق روال معمول نمایش داده میشود (بدون ادغام). این گزینه تنها بر قلمهایی اثر دارد که با Xft بارگذاری شده باشند؛ به بخش Font Names and Font Loading مراجعه کنید. مقدار پیشفرض 100 است و در صورت عدم ارائهٔ آرگومان بازنشانی میشود.
گزینهٔ Dither سبب میشود fvwm تصویری را که با استفاده از ?Pixmap یا ?Gradient. تعریف شده است، دیتر (شبکهبندی) کند. این ویژگی تنها در نمایشگرهایی با عمق کمتر یا مساوی 16 مفید است (یعنی نمایشگرهایی که در یک لحظه فقط میتوانند کمتر از 65537 رنگ را نمایش دهند). جلوهٔ دیترینگ امکان شبیهسازی رنگهای بیشتری نسبت به آنچه واقعاً در دسترس دارید را فراهم میکند. NoDither مانع از دیتر کردن تصاویر توسط fvwm میشود. اگر عمق رنگ کمتر یا مساوی 8 باشد (صفحهای با 256 رنگ یا کمتر)، Dither پیشفرض است. در عمقهای 15 (32768 رنگ) و 16 (65536 رنگ)، پیشفرض NoDither است؛ هرچند این جلوه میتواند برای تصاویری که حاوی رنگهای بسیار نزدیک به هم هستند مفید باشد؛ برای نمونه یک گرادیان ظریف یکنواختتر و روانتر به نظر خواهد رسید.
گزینهٔ IconTint دو آرگومان دریافت میکند: یک رنگ و درصدی بین 0 تا 100. این گزینه باعث میشود fvwm یا یک ماژول، «آیکونها»یی را که درون پسزمینهٔ colorset کشیده میشوند، با رنگ تعیینشده بر حسب درصد تینت کند. در اینجا منظور از «آیکونها»، آیکونهای fvwm، آیکونهای منوی fvwm، MiniIconهایی که نشاندهندهٔ برنامهها در ماژولهای مختلف هستند، تصاویر بارگذاریشده توسط ماژولها (مانند تصاویر مشخصشده با گزینهٔ دکمهٔ Icon در FvwmButtons) و ... غیره است. بدون آرگومان، این گزینه تینت آیکون را حذف میکند.
گزینهٔ IconAlpha یک درصد بین 0 تا 100 را به عنوان آرگومان میگیرد. این گزینه باعث میشود fvwm «آیکونها»یی را که درون پسزمینهٔ colorset رندر میشوند بر اساس این درصد ادغام کند. مقدار پیشفرض 100 است و در صورت عدم ارائهٔ آرگومان بازگردانی میشود.
نکته: در صورتی که a = 100 باشد و رنگ bg برابر با a_color باشد، استفاده از «Tint a_color rate» و «Alpha a» معادل یکدیگر است. این همارزی برای IconAlpha و IconTint برقرار نیست، چرا که پسزمینه میتواند یک تصویر یا یک گرادیان باشد (نه یک پسزمینهٔ تکرنگ یکدست). با این حال، در برخی موارد میتوانید با استفاده از IconTint به جای IconAlpha (تقریباً) به همان اثر دست یابید. این کار ارجحیت دارد زیرا به طور کلی، IconAlpha نسبت به IconTint بازترسیمهای بیشتری ایجاد میکند.
گزینهٔ NoShape ماسک شکل را از colorset حذف میکند در حالی که Plain نگاشت پیکسل یا گرادیان پسزمینه را حذف مینماید.
مثالها
Colorset 3 fg tan, bg navy
در صورت لزوم، این دستور colorsetهای 0، 1، 2 و 3 را ایجاد کرده و سپس colorset شمارهٔ 3 را به داشتن پیشزمینهٔ tan و پسزمینهٔ navy تغییر میدهد.
Colorset 3 bg "navy blue"
رنگ پسزمینهٔ colorset شمارهٔ 3 را به navy blue تغییر میدهد. پیشزمینه و نگاشت پیکسل بدون تغییر باقی میمانند.
Colorset 3 AspectPixmap large_murky_dungeon.xpm
باعث افسردگی میشود.
Colorset 3 bg Average
رنگ پسزمینه و رنگهای برجستگی (relief) را طوری تنظیم میکند که با نگاشت پیکسلِ پسزمینه مطابقت داشته باشند. این مقدار پیشفرض است، اما زمانی که یک رنگ پسزمینه قبلاً تعیین شده و اکنون دیگر مورد نیاز نباشد، باید استفاده شود.
Colorset 3 YGradient 200 3 blue 1000 navy 1 blue 1000 navy
یک pixmap پسزمینه با گرادیان یین و یانگ (Yin Yang) به colorset شمارهٔ 3 اضافه میکند. اگر پسزمینه روی average تنظیم شده باشد، دوباره محاسبه میشود و چنانچه پیشزمینه نیز روی contrast تنظیم شده باشد، آن نیز بازنگری و محاسبه خواهد شد.
#!/bin/sh
FvwmCommand "Colorset 7 fg navy, bg gray"
while true
do
FvwmCommand "Colorset 7 fg gray"
sleep 1
FvwmCommand "Colorset 7 fg navy"
sleep 1
done
باعث چشمک زدن colorset شمارهٔ 7 میشود..sp نامهای رنگ استفادهشده در colorsetها به عنوان متغیرهای fvwm ذخیره میشوند که میتوانند در هر دستور fvwm جایگزین شوند. برای مثال:
AddToFunc InitFunction + I Exec exec xterm -fg $[fg.cs0] -bg $[bg.cs0]
که در آن $[fg.cs0] رنگ پیشزمینه colorset صفر است. لطفاً برای اطلاعات بیشتر به بخش Command Expansion مراجعه کنید.
CleanupColorsets
Color Gradients
نحو گرادیان رنگ دو شکل دارد:
?Gradient colors start-color end-color
این شکل یک گرادیان خطی را تعیین میکند. آرگومانها نشاندهنده تعداد کل colors برای تخصیص (بین ۲ تا ۱۰۰۰)، رنگ آغازین و رنگ پایانی هستند.
مثال:
TitleStyle VGradient 20 rgb:b8/ce/bc rgb:5b/85/d0
?Gradient colors segments color length color [length color] ...
شکل دوم یک گرادیان غیرخطی را مشخص میکند. آرگومانها عبارتند از: تعداد کل colors برای تخصیص (بین ۲ تا ۱۰۰۰)، سپس تعداد segments. برای هر بخش، color آغازین، یک length نسبی و سپس رنگ پایانی را مشخص کنید. هر بخش بعدی با رنگ دوم بخش قبلی آغاز میشود. طولها میتوانند هر عدد صحیح غیرمنفی باشند. طول یک بخش تقسیم بر مجموع طول تمام بخشها، کسری از رنگها است که برای آن بخش استفاده میشود.
مثالها:
Colorset 0 DGradient 128 2 lightgrey 50 blue 50 white # 20% gradient from red to blue, # 30% from blue to black, # 50% from black to grey Colorset 0 DGradient 100 3 Red 20 Blue 30 Black 50 Grey # 50% from blue to green, then # 50% from yellow to red Colorset 0 HGradient 128 3 Blue 1000 Green 1 Yellow 1000 Red
نکته: برخی سبکهای گرادیان ممکن است کُند باشند و مقدار زیادی حافظه مصرف کنند، بنابراین اگر با آنها به مشکلات کارایی برخوردید ممکن است بهتر باشد از آنها استفاده نکنید. برای بهبود کارایی میتوانید یک یا تمام موارد زیر را امتحان کنید:
برجستهسازی آیتم فعال منو به غیر از رنگ پیشزمینه را خاموش کنید:
MenuStyle <style> Hilight3DOff, !HilightBack
اطمینان حاصل کنید که زیرمنوها با منوی والد همپوشانی نداشته باشند. این کار میتواند از بازترسیم منوها در هر بار باز یا بسته شدن یک زیرمنو جلوگیری کند.
MenuStyle <style> PopupOffset 1 100
کارساز X خود را با backing storage اجرا کنید. اگر کارساز X شما با گزینه -bs آغاز میشود، آن را خاموش کنید. در غیر این صورت گزینههای -wm و +bs را امتحان کنید:
startx -- -wm +bs
ممکن است لازم باشد این مثال را با سیستم خود تطبیق دهید (برای نمونه اگر از xinit برای شروع X استفاده میکنید).
متغیرهای محیطی که بر نحوه عملکرد fvwm تأثیر میگذارند به شرح زیر هستند:
DISPLAY
FVWM_USERDIR
FVWM3_LOGFILE
FVWM_DATADIR
FVWM_MODULEDIR
SESSION_MANAGER
SESSION_MANAGER_NAME
SM_SAVE_DIR
نویسندگان (AUTHORS)
Robert Nation با کمک افراد بسیار، بر پایه کد twm که توسط Tom LaStrange نوشته شده بود. پس از Robert Nation نوبت به Charles Hines رسید و به دنبال او Brady Montz آمد. در حال حاضر fvwm توسط تعدادی از افراد در فهرست پستی fvwm-workers توسعه داده میشود.
کپیرایت و تکثیر (COPYRIGHT)
fvwm و تمام ماژولها، اسکریپتها و سایر فایلهای همراه این توزیع تحت مجوز عمومی همگانی گنو (GPL) هستند. لطفاً برای جزئیات به فایل COPYING که همراه fvwm ارائه شده است مراجعه کنید.
گزارش باگها (BUGS)
گزارشهای باگ را میتوان به فهرست پستی fvwm-workers فرستاد به نشانی <fvwm-workers@fvwm.org>
وبگاه رسمی fvwm عبارت است از http://fvwm.org
| 2026-06-28 |