را با صفر یا یک عدد صحیح مثبت جایگزین کنید). برای مثال «$[fg.cs3]» به نام رنگ پیشزمینهٔ colorset 3 (در قالب rgb:rrrr/gggg/bbbb) بسط مییابد.
.sp
اگر .lighten یا .darken
به انتهای پارامترها افزوده شود، آنها در عوض با رنگی جایگزین میشوند که به اندازهٔ درصد
(بین 0 تا 100) از رنگ تعریفشده در colorset روشنتر یا تیرهتر است. برای مثال «$[bg.cs3.lighten15]» به رنگ پسزمینهٔ colorset 3 بسط یافته و سپس 15٪ روشنتر میشود (در قالب rgb:rrrr/gggg/bbbb).
.sp
اگر .hash به انتها افزوده شود، خروجی رنگ از قالب #rrggbb استفاده خواهد کرد (به جای rgb:rrrr/gggg/bbbb). برای مثال، $[bg.cs3.hash] یا $[bg.cs3.lighten15.hash].
.sp
لطفاً برای جزئیات دربارهٔ مجموعه رنگها به بخش \fBColorsets\fP مراجعه کنید.
.RE
.sp
$[math.+.,] $[math.\-.,] $[math.*.,] $[math./.,] $[math.%.,] $[math.^.,] $[math.<.,] $[math.>.,]
.RS 4
متغیرهای بسط ریاضی میتوانند برای انجام برخی محاسبات حسابی پایه روی اعداد صحیح و استفاده شوند. این عبارتها میتوانند برای جمع (+)، تفریق (\-)، ضرب (*)، تقسیم (/)، باقیماندهٔ تقسیم (%) و توان (^) به کار روند. بیشینه (>) مقدار بزرگتر بین دو مقدار، و کمینه (<) مقدار کوچکتر را بازمیگرداند. این متغیرها میتوانند هنگام محاسبهٔ اندازهٔ پنلها یا موقعیت پنجرهها نسبت به نمایشگر مفید باشند؛ برای مثال $[math.\-.$[monitor.$[monitor.primary].height],200] مقدار ۲۰۰ پیکسل را از ارتفاع نمایشگر اصلی کم میکند. همچنین میتوان برای محاسبات پیچیدهتر آنها را به صورت تودرتو به کار برد؛
$[math.+.$[math.*.3,5],$[math.\-.4,\-2]]
با 21 جایگزین میشود.
.sp
ویرگول در «,» برای در نظر گرفتن امکان استفاده از اعداد اعشاری در آینده است. تمام عملیات از ریاضیات اعداد صحیح زبان C استفاده میکنند. نتیجهٔ تقسیم صحیح، خارجقسمت آن است. از عملگر باقیمانده میتوان برای به دست آوردن باقیماندهٔ تقسیم صحیح استفاده کرد. توجه داشته باشید که عملگر باقیماندهٔ C برای مقادیر منفی، باقیماندهٔ منفی بازمیگرداند. در نهایت، در صورتی که منفی باشد، عملیات به توان رساندن مقدار 1 را بازمیگرداند.
.RE
.sp
$[schedule.last]
.RS 4
این متغیر با شناسهٔ (id) آخرین دستوری که با دستور \fBSchedule\fP زمانبندی شده بود جایگزین میشود، حتی اگر این دستور پیشتر اجرا شده باشد.
.RE
.sp
$[schedule.next]
.RS 4
این متغیر با شناسهای (id) که دستور بعدی زمانبندیشده با \fBSchedule\fP دریافت خواهد کرد جایگزین میشود (مگر اینکه شناسهٔ متفاوتی صراحتاً تعیین شده باشد).
.RE
.sp
$[cond.rc]
.RS 4
کد بازگشتی آخرین دستور شرطی. این متغیر فقط داخل یک تابع معتبر است و نمیتوان از آن در یک دستور شرطی استفاده کرد. لطفاً به بخش \fBConditional Commands\fP در فهرست دستورات مراجعه کنید.
.RE
.sp
$[func.context]
.RS 4
نویسهٔ بافتار دستور در حال اجرا، به همان صورتی که در دستورهای \fBMouse\fP، \fBKey\fP یا \fBPointerKey\fP استفاده میشود. این متغیر برای مثال در موارد زیر کاربرد دارد:
.sp
.if n .RS 4
.nf
.fam C
Mouse 3 FS N WindowShade $$[func.context]
.fam
.fi
.if n .RE
.RE
.sp
$[debuglog.state]
.RS 4
یا \fI0\fP (گزارش اشکالزدایی بسته است) یا \fI1\fP. وضعیت فعلی سازوکار اشکالزدایی و گزارشگیری را نشان میدهد.
.RE
.sp
$[gt.\fIstr\fP]
.RS 4
ترجمهٔ \fIstr\fP را با جستجو در کاتالوگهای محلی (locale) فعلی بازمیگرداند. اگر ترجمهای یافت نشود، \fIstr\fP دستنخورده بازگردانده میشود. به دستور \fBLocalePath\fP مراجعه کنید.
.RE
.sp
$[infostore.\fIkey\fP]
.RS 4
مقدار دادهٔ ذخیرهشده در InfoStore را برای \fIkey\fP دادهشده بازمیگرداند. اگر کلیدی وجود نداشته باشد، رشتهٔ بسطنیافته بازگردانده میشود.
.RE
.sp
$[.\|.\|.]
.RS 4
اگر رشتهٔ داخل براکتها هیچیک از موارد بالا نباشد، fvwm تلاش میکند یک متغیر محیطی با این نام پیدا کند و در صورت یافتن، مقدار آن را جایگزین میکند (برای مثال «$[PAGER]» میتواند با «more» جایگزین شود). در غیر این صورت، رشته بدون تغییر رها میشود.
.sp
نمونههایی از این مورد را میتوان در توضیحات دستور \fBAddToFunc\fP یافت.
.RE.SH "اسکریپتنویسی و توابع پیچیده (SCRIPTING AND COMPLEX FUNCTIONS)"
.sp
برای دستیابی به جلوههای پیچیدهتر، fvwm دارای تعدادی دستور است که تواناییهای اسکریپتنویسی آن را بهبود میبخشند. اسکریپتها میتوانند با \fBRead\fP از یک فایل، با \fBPipeRead\fP از خروجی یک دستور خوانده شوند یا با دستور \fBAddToFunc\fP بهصورت یک تابع پیچیده نوشته شوند. برای علاقهمندان، بخش ۷ از FAQ مربوط به fvwm برخی از کاربردهای واقعی اسکریپتنویسی را نشان میدهد. لطفاً برای جزئیات به بخشهای \fBUser Functions and Shell Commands\fP و \fBConditional Commands\fP مراجعه کنید. یک هشدار: در هنگام اجرای توابع پیچیده، fvwm باید تمامی ورودیها را از اشارهگر ماوس دریافت کند (اشارهگر در اصطلاح X اصطلاحاً «تسخیر» یا "grabbed" میشود). هیچ برنامه دیگری نمیتواند در هنگام اجرای یک تابع، ورودیای از اشارهگر دریافت کند. این امر میتواند برخی برنامهها را دچار سردرگمی کند. برای نمونه، برنامه xwd هنگامی که از یک تابع پیچیده اجرا شود، از گرفتن اسکرینشات خودداری میکند. برای دستیابی به عملکرد یکسان، میتوانید بهجای آن از دستور \fBRead\fP یا \fBPipeRead\fP استفاده کنید.
.SH "منوها (MENUS)"
.sp
پیش از آنکه بتوان منویی را باز کرد، باید با استفاده از دستور \fBAddToMenu\fP با آیتمهای منو پر شده و با دستور \fBKey\fP، \fBPointerKey\fP یا \fBMouse\fP به یک کلید یا دکمه ماوس مقید (bind) شود (راههای بسیار دیگری نیز برای فراخوانی منو وجود دارد). این کار معمولاً در فایل پیکربندی انجام میشود.
.sp
منوهای fvwm در ظاهر و عملکرد (look and feel) بهشدت پیکربندیپذیر هستند. حتی جزئیترین نکات ظریف را میتوان مطابق با سلیقه کاربر تغییر داد، از جمله فونت آیتمهای منو، پسزمینه، تأخیرهای پیش از بالا آمدن (popup) زیرمنوها، تولید پویای منوها و بسیاری از ویژگیهای دیگر. لطفاً برای اطلاعات بیشتر به دستور \fBMenuStyle\fP مراجعه کنید.
.sp
\fBانواع منوها (Types of Menus)\fP
.RS 4
چهار نوع منو وجود دارد که کمی با یکدیگر تفاوت دارند:
.sp
منوهای بازشو (Popup menus) میتوانند بهتنهایی در هر کجای صفحه نمایش یا متصل به بخشی از یک پنجره ظاهر شوند. دستور \fBPopup\fP منوهای بازشو را باز میکند. اگر منوی بازشو در حالی که دکمه ماوس پایین نگه داشته شده فراخوانی شده باشد، با رها شدن دکمه بسته میشود. سپس آیتم زیر اشارهگر فعال شده و عمل مرتبط با آن اجرا میگردد.
.sp
منوهای عادی (Normal menus) بسیار مشابهاند، اما تا حدی گذرا هستند. هنگامی که با کلیک کردن روی یک دکمه ماوس فراخوانی شوند، باز میمانند و بدون نگهداشتن هیچ دکمهای میتوان در آنها پیمایش کرد. اما اگر با فشردن دکمه و بهدنبال آن حرکت ماوس فراخوانی شوند، دقیقاً مانند یک منوی بازشو رفتار میکنند. دستور \fBMenu\fP منوهای عادی را ایجاد میکند.
.sp
«زیرمنوها» (Sub menus) منوهای درون منوهای دیگر هستند. وقتی آیتمی از منو که عمل آن دستور \fBPopup\fP است انتخاب شود، منوی نامبرده بهعنوان زیرمنویی از والد باز میشود. هر نوع منویی میتواند دارای زیرمنو باشد.
.sp
«منوهای جداشدنی» (Tear off menus) منوهایی هستند که از بافتار اصلی خود روی میزکار مانند یک پنجره عادی «جدا شدهاند». آنها از منوهای دیگر با فشردن کلیدهای خاص یا توالیهای ماوس یا با دستور \fBTearMenuOff\fP از درون یک منو ایجاد میشوند.
.RE
.sp
\fBساختار منو (Menu Anatomy)\fP
.RS 4
منوها از هر تعداد عنوان که آیتمهای غیرفعال منو بوده و معمولاً در بالای منو ظاهر میشوند، آیتمهای عادی که در هنگام انتخاب اعمال گوناگونی را اجرا میکنند، خطوط جداکننده بین آیتمها، نوارهای جداکننده (یک خط تیره افقی بریدهبریده) که در صورت انتخاب، منو را جدا میکنند (tear off)، و آیتمهای زیرمنو که با مثلثی رو به چپ یا راست بسته به جهتی که زیرمنو در آن ظاهر میشود مشخص شدهاند، تشکیل میشوند. تمام آیتمهای فوق در منو اختیاری هستند.
.sp
علاوه بر این، اگر منو طولانیتر از آن باشد که در صفحه نمایش جا شود، آیتمهای اضافی در یک منوی ادامهدار قرار میگیرند و یک زیرمنو با رشته «More.\|.\|.» در پایین منو قرار داده میشود. رشته «More.\|.\|.» از تنظیمات محلی (locale) پیروی میکند.
.sp
در نهایت، ممکن است تصویری در امتداد هر یک از دو طرف منو وجود داشته باشد (یک «side bar» یا نوار کناری).
.RE
.sp
\fBپیمایش منو (Menu Navigation)\fP
.RS 4
پیمایش منوها با صفحهکلید و ماوس انجام میشود. افراد زیادی ترجیح میدهند از ماوس استفاده کنند، اما این کار میتواند خستهکننده باشد. پیمایش با صفحهکلید میتواند بسیار سریعتر باشد. مادامی که fvwm منویی را نمایش میدهد، کار دیگری نمیتواند انجام دهد. برای نمونه، پنجرههای جدید تا پیش از بسته شدن منو ظاهر نمیشوند. با این حال، این موضوع درباره منوهای جداشده دقیقاً صادق نیست. برای جزئیات به بخش \fBTear Off Menus\fP مراجعه کنید.
.RE
.sp
\fBپیمایش با ماوس (Mouse Navigation)\fP
.RS 4
حرکت دادن اشارهگر روی یک منو، آیتم زیر آن را انتخاب میکند. معمولاً این حالت با یک حاشیه سهبعدی در اطراف آیتم مشخص میشود، اما همه بخشهای یک منو قابل انتخاب نیستند. فشردن هر دکمه ماوس در هنگام باز بودن یک منو بهطور پیشفرض آیتم زیر آن را فعال میکند. آیتمهای یک منوی بازشو با رها کردن دکمه فشردهشده ماوس نیز فعال میشوند. در مورد آیتمی که شامل یک زیرمنو است، اگر اشارهگر به اندازه کافی روی آیتم معلق بماند یا به مثلث نشاندهنده زیرمنو نزدیک شود، زیرمنو نمایش داده میشود. این رفتار را میتوان با سبکهای منو (menu styles) تنظیم کرد.
.sp
چرخاندن چرخ ماوس روی یک منو، بسته به سبک منوی \fIMouseWheel\fP، یا اشارهگر را در طول منو میچرخاند (پیشفرض)، یا منوی زیر اشارهگر را پیمایش (اسکرول) میکند یا طوری عمل میکند که گویی روی منو کلیک شده است.
.sp
کلیک کردن روی یک آیتم انتخابشده آن را فعال میکند \- اینکه دقیقاً چه رخ میدهد به نوع آیتم بستگی دارد.
.sp
کلیک کردن روی یک عنوان، جداکننده، نوار کناری (side bar)، یا خارج از منو، منو را میبندد (استثنا: منوهای جداشده را نمیتوان از این طریق بست). فشردن دکمه ۲ ماوس روی عنوان منو یا فعال کردن نوار جداکننده (tear off bar)، یک منوی جداشده از منوی فعلی ایجاد میکند. کلیک روی یک آیتم منوی عادی دستوری را که به آن مقید شده فراخوانی میکند، و کلیک روی یک آیتم زیرمنو یا تمام منوهای باز را میبندد و زیرمنو را جایگزین آنها میکند، یا منو را تثبیت (post) مینماید (پیشفرض).
.sp
تثبیت منوها (Posting menus) برای تسهیل پیمایش با ماوس طراحی شده است. هنگامی که یک زیرمنو تثبیت شود، تنها آیتمهای همان زیرمنو را میتوان انتخاب کرد. اگر اشارهگر تمایل به خارج شدن از منو داشته باشد، این قابلیت میتواند برای پیمایش منو بسیار مفید باشد. برای لغو تثبیت منو و بازگشت به عملکرد عادی، یا روی همان آیتم زیرمنو کلیک کنید یا هر کلیدی را فشار دهید.
.RE
.sp
\fBپیمایش با صفحهکلید (Keyboard Navigation)\fP
.RS 4
درست همانند پیمایش با ماوس، آیتم زیر اشارهگر انتخاب میشود. این امر با هدایت و پرش (warp) اشارهگر به سمت آیتمهای منو در صورت نیاز انجام میپذیرد. هنگامی که یک منو باز است، تمام کلیدهای فشردهشده توسط منو رهگیری میشوند. هیچ برنامه دیگری نمیتواند ورودی صفحهکلید را دریافت کند (اگرچه این موضوع در مورد منوهای جداشده صدق نمیکند).
.sp
آیتمها را میتوان مستقیماً با فشردن یک کلید میانبر (hotkey) که برای هر آیتم منو بهصورت جداگانه قابل پیکربندی است انتخاب کرد. کلید میانبر با خط کشیدن زیر آن در برچسب آیتم منو مشخص میشود. با سبک منوی \fIAutomaticHotkeys\fP، fvwm بهطور خودکار به تمام آیتمهای منو کلید میانبر اختصاص میدهد.
.sp
پایهایترین کلیدها برای پیمایش در منوها کلیدهای مکاننما (cursor keys) هستند
(حرکت به اندازه یک آیتم به بالا یا پایین، ورود یا خروج از یک زیرمنو)،
.sp
(فعال کردن آیتم) و
.sp
(بستن منو). بهطور پیشفرض، کلیدهای متعدد دیگری نیز میتوانند برای پیمایش در منوها استفاده شوند:
.sp
کلیدهای \fIEnter\fP، \fIReturn\fP و \fISpace\fP آیتم فعلی را فعال میکنند.
.sp
کلیدهای \fIEscape\fP، \fIDelete\fP و \fICtrl\-G\fP از دنباله فعلی منوها خارج میشوند یا یک منوی جداشده را از بین میبرند.
.sp
کلیدهای \fIJ\fP، \fIN\fP، \fICursor\-Down\fP، \fITab\fP، \fIMeta\-Tab\fP و \fICtrl\-F\fP به آیتم بعدی میروند.
.sp
کلیدهای \fIK\fP، \fIP\fP، \fICursor\-Up\fP، \fIShift\-Tab\fP، \fIShift\-Meta\-Tab\fP و \fICtrl\-B\fP به آیتم قبلی میروند.
.sp
کلیدهای \fIL\fP، \fICursor\-Right\fP و \fIF\fP وارد یک زیرمنو میشوند.
.sp
کلیدهای \fIH\fP، \fICursor\-Left\fP و \fIB\fP به منوی قبلی بازمیگردند.
.sp
کلیدهای \fICtrl\-Cursor\-Up\fP، \fICtrl\-K\fP، \fICtrl\-P\fP، \fIShift\-Ctrl\-Meta\-Tab\fP و \fIPage\-Up\fP پنج آیتم به بالا میروند.
.sp
کلیدهای \fICtrl\-Cursor\-Down\fP، \fICtrl\-J\fP، \fICtrl\-N\fP، \fICtrl\-Meta\-Tab\fP و \fIPage\-Down\fP پنج آیتم به پایین میروند.
.sp
کلیدهای \fIShift\-P\fP، \fIHome\fP، \fIShift\-Cursor\-Up\fP و \fICtrl\-A\fP به نخستین آیتم میروند.
.sp
کلیدهای \fIShift\-N\fP، \fIEnd\fP، \fIShift\-Cursor\-Down\fP و \fICtrl\-E\fP به آخرین آیتم میروند.
.sp
کلیدهای \fIMeta\-P\fP، \fIMeta\-Cursor\-Up\fP، \fICtrl\-Cursor\-Left\fP و \fIShift\-Ctrl\-Tab\fP درست به زیر جداکننده بعدی به سمت بالا میروند.
.sp
کلیدهای \fIMeta\-N\fP، \fIMeta\-Cursor\-Down\fP، \fICtrl\-Cursor\-Right\fP و \fICtrl\-Tab\fP درست به زیر جداکننده بعدی به سمت پایین میروند.
.sp
کلید \fIInsert\fP در صورت وجود، زیرمنوی «More.\|.\|.» را باز میکند.
.sp
کلید \fIBackspace\fP منو را جدا میکند.
.RE
.sp
\fBقیدهای منو (Menu Bindings)\fP
.RS 4
کلیدها و دکمههای ماوس مورد استفاده برای پیمایش منو را میتوان با استفاده از دستورات \fBKey\fP و \fBMouse\fP با بافتار (context) ویژه \*(AqM\*(Aq پیکربندی کرد، که میتواند با \*(AqT\*(Aq برای عنوان منو، \*(AqI\*(Aq برای سایر آیتمهای منو، \*(AqS\*(Aq برای هر حاشیه یا تصویر کناری، \*(Aq[\*(Aq برای حاشیه سمت چپ از جمله تصویر کناری چپ، \*(Aq]\*(Aq برای حاشیه سمت راست از جمله تصویر کناری راست، \*(Aq\-\*(Aq برای حاشیه بالایی و \*(Aq_\*(Aq برای حاشیه پایینی ترکیب شود. بافتار منو از مجموعه اقدامات (actions) اختصاصی خود استفاده میکند که میتوانند به کلیدها و دکمههای ماوس مقید شوند.
این اقدامات عبارتند از: _MenuClose_، \fIMenuCloseAndExec\fP، \fIMenuEnterContinuation\fP، \fIMenuEnterSubmenu\fP، \fIMenuLeaveSubmenu\fP، \fIMenuMoveCursor\fP، \fIMenuCursorLeft\fP، \fIMenuCursorRight\fP، \fIMenuSelectItem\fP، \fIMenuScroll\fP و \fIMenuTearOff\fP..sp
امکان بازنویسی کلید Escape بدون کلیدهای تغییردهنده برای بستن منو وجود ندارد.
همچنین غیرفعال کردن دکمه ۱ ماوس، کلیدهای جهتنما یا کلید enter برای ناوبری
حداقلی امکانپذیر نیست.
.sp
دستور \fBMenuClose\fP از دنباله فعلی منوها خارج میشود یا یک منوی جداشونده
را از بین میبرد.
.sp
دستور \fBMenuCloseAndExec\fP از دنباله فعلی منوها خارج میشود یا یک منوی
جداشونده را از بین برده و بقیه خط را به عنوان یک دستور اجرا میکند.
.sp
دستور \fBMenuEnterContinuation\fP زیرمنوی «More.\|.\|.» را در صورت وجود باز میکند.
.sp
دستور \fBMenuEnterSubmenu\fP وارد یک زیرمنو میشود.
.sp
دستور \fBMenuLeaveSubmenu\fP به منوی پیشین بازمیگردد.
.sp
دستور \fBMenuMoveCursor\fP \fIn\fP [\fIm\fP] انتخاب را به مورد دیگری منتقل میکند.
اگر آرگومان نخست صفر باشد، آرگومان دوم یک مورد مطلق در منو را برای انتقال
نشانگر مشخص میکند. موارد منفی از انتهای منو شمرده میشوند. اگر آرگومان
نخست غیرصفر باشد، آرگومان دوم باید حذف شود، و آرگومان نخست تغییر نسبی را
در مورد انتخابشده مشخص میکند. موقعیتها میتوانند با پسوند \*(Aqs\*(Aq همراه
باشند تا مشخص شود موارد تنها باید به نخستین موارد پس از جداکنندهها اشاره کنند.
.sp
دستور \fBMenuCursorLeft\fP با سبک منوی \fISubmenusLeft\fP وارد یک زیرمنو میشود،
و با سبک منوی \fISubmenusRight\fP به منوی پیشین بازمیگردد.
.sp
دستور \fBMenuCursorRight\fP با سبک منوی \fISubmenusRight\fP وارد یک زیرمنو میشود،
و با سبک منوی \fISubmenusLeft\fP به منوی پیشین بازمیگردد.
.sp
دستور \fBMenuSelectItem\fP عمل مربوط به مورد منو را اجرا میکند.
.sp
دستور \fBMenuScroll \fP\fIn\fP پیمایش منو را مطابق با سبک منوی \fIMouseWheel\fP
با \fIn\fP مورد انجام میدهد. فاصله میتواند پسوند \*(Aqs\*(Aq داشته باشد تا
نشان دهد که موارد فقط باید به نخستین موارد پس از جداکنندهها اشاره کنند.
.sp
دستور \fBMenuTearOff\fP یک منوی معمولی را به یک منوی «جداشده» تبدیل میکند.
برای جزئیات به \fBTear Off Menus\fP مراجعه کنید.
.RE
.sp
\fBTear Off Menus\fP
.RS 4
یک منوی جداشونده (tear off) هر منویی است که از پنجرهای که به آن متصل بوده
«جدا شده» و به پنجره ریشه (root window) سنجاق شده باشد. سه راه برای جدا کردن
یک منو وجود دارد: کلیک روی عنوان منو با دکمه ۲ ماوس، فشردن
.sp
در منو، یا فعال کردن نوار جداکننده آن (یک نوار افقی با خطچین). نوارهای
جداکننده باید مانند هر مورد دیگر با اختصاص دستور \fBTearMenuOff\fP به آنها،
به منو افزوده شوند.
.sp
عملیات داخلی جدا کردن منو را میتوان با تعریفزدایی از عملیات منوی داخلیِ
متصل به جدا کردن بازنویسی کرد. برای حذف انتساب داخلی دکمه ۲ ماوس، از این
دستور استفاده کنید:
.sp
.if n .RS 4
.nf
.fam C
Mouse 2 MT A \-
.fam
.fi
.if n .RE
.sp
و برای حذف انتساب داخلی کلید backspace، استفاده کنید از:
.sp
.if n .RS 4
.nf
.fam C
Key Backspace M A \-
.fam
.fi
.if n .RE
.sp
برای جزئیات بیشتر در مورد نحوه انتساب سایر کلیدها برای جدا کردن منو،
بخش \fBMenu Bindings\fP را ببینید.
.sp
توجه داشته باشید که پیش از fvwm 2.5.20، انتسابهای ماوس برای جدا کردن منو به
روش دیگری بازتعریف میشدند که دیگر کار نمیکند.
.sp
پنجره حاوی منو مانند هر پنجره دیگری جایگذاری میشود. اگر ظاهر شدن منوهای
جداشونده در موقعیتهای تصادفی روی صفحه برایتان گیجکننده است، این خط را
در فایل پیکربندی خود قرار دهید:
.sp
.if n .RS 4
.nf
.fam C
Style fvwm_menu UsePPosition
.fam
.fi
.if n .RE
.sp
برای حذف حاشیهها و دکمهها از یک منوی جداشونده اما حفظ عنوان منو،
میتوانید از این دستورات استفاده کنید:
.sp
.if n .RS 4
.nf
.fam C
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
.fam
.fi
.if n .RE
.sp
یک منوی جداشونده ترکیبی میان یک پنجره و یک منو است. منو توسط یک پنجره
بلعیده میشود و عنوان آن برداشته شده و در عنوان پنجره نمایش مییابد.
مزیت اصلی این است که منو دائمی میشود \- فعال کردن یک مورد، منو را
نمیبندد. بنابراین، میتوان چندین بار بدون باز کردن مجدد از آن استفاده کرد.
برای بستن چنین منویی، پنجره آن را ببندید یا کلید Escape را فشار دهید.
.sp
منوهای جداشونده تا حدودی متفاوت از منوها و پنجرههای معمولی رفتار میکنند.
آنها فوکوس صفحهکلید را دریافت نمیکنند، اما تا زمانی که نشانگر روی یکی
از آنها قرار دارد، تمام کلیدهای فشردهشده به منو ارسال میشوند. سایر
انتسابهای کلید fvwm تا زمانی که نشانگر درون منوی جداشونده یا یکی از
زیرمنوهای آن باشد، غیرفعال هستند. هنگامی که نشانگر این ناحیه را ترک کند،
تمام زیرمنوها بلافاصله بسته میشوند. توجه داشته باشید پنجرهای که حاوی یک
منوی جداشونده است هرگز بهگونهای که گویی فوکوس دارد برجسته نمیشود.
.sp
یک منوی جداشونده نسخهای مستقل از منویی است که از آن سرچشمه گرفته است.
به همین دلیل، افزودن موارد به آن منو یا تغییر سبک منوی آن تأثیری بر آن
نخواهد داشت.
.sp
برای ایجاد یک منوی جداشونده بدون نیاز به باز کردن اولیه منوی عادی،
گزینه \fITearOffImmediately\fP میتواند به دستور \fBMenu\fP یا \fBPopup\fP
افزوده شود.
.RE.SS "ساخت محتویات منو (Building menu contents)"
.sp
\fBAddToMenu\fP \fImenu\-name\fP [\fImenu\-label\fP \fIaction\fP]
.RS 4
یک تعریف منو را آغاز میکند یا به آن میافزاید. معمولاً تعریف یک منو به این صورت است:
.sp
.if n .RS 4
.nf
.fam C
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
.fam
.fi
.if n .RE
.sp
منو میتواند به این شکل فراخوانی شود:
.sp
.if n .RS 4
.nf
.fam C
Mouse 1 R A Menu Utilities Nop
.fam
.fi
.if n .RE
.sp
یا
.sp
.if n .RS 4
.nf
.fam C
Mouse 1 R A Popup Utilities
.fam
.fi
.if n .RE
.sp
هیچ نمادی برای پایان منو وجود ندارد. نیازی نیست منوها در یک بخش پیوسته از فایل \fIconfig\fP تعریف شوند. بخش داخل گیومه (یا کلمه اول) در مثالهای بالا، برچسب منو (menu label) است که هنگام باز شدن منو توسط کاربر نمایش داده میشود. بخش باقیمانده، یک دستور fvwm است که در صورت انتخاب آن آیتم منو توسط کاربر، اجرا میشود. یک menu\-label خالی ("") و تابع \fBNop\fP برای درج یک خط جداکننده در منو استفاده میشوند.
.sp
کلمات کلیدی \fIDynamicPopUpAction\fP و \fIDynamicPopDownAction\fP هنگامی که به عنوان نام یک آیتم منو به کار روند، معنای ویژهای دارند. کنش (action) پس از کلمه کلیدی، هر زمان که منو باز یا بسته شود اجرا میگردد. از این طریق میتوانید منوهای پویا پیادهسازی کنید. حتی امکان تخریب خود منو با \fBDestroyMenu\fP و بازسازی مجدد آن از ابتدا وجود دارد. هنگامی که منو تخریب شد (مگر اینکه هنگام تخریب منو از گزینه \fIrecreate\fP استفاده کرده باشید)، اضافه کردن دوباره کنش پویا را فراموش نکنید.
.sp
نکته: کنشهایی را که نیاز به تعامل کاربر دارند فعال نکنید. ممکن است با شکست مواجه شوند و منوهای شما را بههم بریزند. دستور \fBSilent\fP را ببینید.
.sp
\fBهشدار:\fP دستورات \fBMenuStyle\fP را به عنوان کنشهای منوی پویا صادر نکنید. احتمال زیادی وجود دارد که این کار باعث کرش کردن fvwm شود.
.sp
کلمه کلیدی \fIGreyed\fP همچنان آیتم منو را نمایش میدهد، اما آن را خاکستری کرده و گزینه را غیرقابل انتخاب میسازد.
.sp
چندین اسکریپت با قابلیت پیکربندی برای تولید خودکار منو همراه با fvwm نصب میشوند. آنها صفحههای راهنمای (man page) مخصوص به خود را دارند. برخی از آنها، بهویژه \fBfvwm\-menu\-directory\fP و \fBfvwm\-menu\-desktop\fP، میتوانند به همراه \fIDynamicPopupAction\fP برای ایجاد فهرستی از دایرکتوریها یا برنامههای GNOME/KDE استفاده شوند.
.sp
مثال (مرورگر فایل):
.sp
.if n .RS 4
.nf
.fam C
# You can find the shell script fvwm_make_browse_menu.sh
# in the utils/ directory of the distribution.
AddToMenu BrowseMenu
+ DynamicPopupAction PipeRead \(rs
\*(Aqfvwm_make_browse_menu.sh BrowseMenu\*(Aq
.fam
.fi
.if n .RE
.sp
مثال (منوی تصاویر):
.sp
.if n .RS 4
.nf
.fam C
# 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 \*(Aqfor i in $HOME/Pictures/*.jpg; \(rs
do echo AddToMenu JpgMenu "`basename $i`" Exec xv $i; done\*(Aq
.fam
.fi
.if n .RE
.sp
کلمه کلیدی \fIMissingSubmenuFunction\fP معنای مشابهی دارد. هر زمان که بخواهید زیرمنویی را که وجود ندارد باز کنید، اجرا میشود. با این تابع میتوانید منوها را در حین اجرا (on the fly) تعریف کرده و تخریب کنید. پس از کلمه کلیدی میتوانید از هر دستوری استفاده کنید، اما اگر نام یک آیتم (که یک زیرمنو است) تعریفشده با \fBAddToFunc\fP به دنبال آن بیاید، fvwm این دستور را اجرا میکند:
.sp
.if n .RS 4
.nf
.fam C
Function
.fam
.fi
.if n .RE
.sp
یعنی نام به عنوان نخستین آرگومان به تابع ارسال میشود و با "$0" قابل ارجاع است.
.sp
اسکریپت \fBfvwm\-menu\-directory\fP که پیشتر ذکر شد، میتواند با \fIMissingSubmenuFunction\fP برای ایجاد یک فهرست بازگشتی و بهروز از دایرکتوری استفاده شود.
.sp
مثال:
.sp
.if n .RS 4
.nf
.fam C
# 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 /
.fam
.fi
.if n .RE
.sp
این پیادهسازی دیگری از مرورگر فایل است که از زیرمنوها برای زیردایرکتوریها استفاده میکند.
.sp
میتوان از عناوین درون منو استفاده کرد. اگر گزینه \fItop\fP را پس از کلمه کلیدی \fBTitle\fP اضافه کنید، عنوان به بالای منو افزوده میشود. اگر از پیش عنوانی وجود داشته باشد، بازنویسی میشود.
.sp
.if n .RS 4
.nf
.fam C
AddToMenu Utilities Tools Title top
.fam
.fi
.if n .RE
.sp
تمام متن تا نخستین کلید Tab در برچسب منو، در سمت چپ منو تراز میشود، تمام متن پس از اولین Tab، در ستون دوم به صورت چپچین قرار میگیرد و تمام متنهای بعد از آن در ستون سوم به صورت راستچین چیده میشوند. تمام کلیدهای Tab دیگر با فاصله جایگزین میشوند. توجه داشته باشید که میتوانید این قالببندی را با گزینه \fIItemFormat\fP از دستور \fBMenuStyle\fP تغییر دهید.
.sp
اگر برچسب منو شامل یک علامت امپرسند (\*(Aq&\*(Aq) باشد، نویسه بعدی به عنوان کلید میانبر (hot\-key) برای آن آیتم منو در نظر گرفته میشود. کلیدهای میانبر در برچسب زیرخطدار نمایش داده میشوند. برای درج یک \*(Aq&\*(Aq واقعی، "&&" را وارد کنید. فشردن کلید میانبر، بین فهرست آیتمهای منو که دارای این کلید میانبر هستند پیمایش میکند، یا در صورتی که تنها یک آیتم با این کلید وجود داشته باشد، آن را انتخاب میکند..sp
اگر menu\-label شامل زیررشتهای باشد که با علامتهای ستاره جدا شده است،
متن بین ستارهها به عنوان نام یک فایل تصویری برای درج در منو در نظر گرفته
میشود. برای نوشتن یک \*(Aq\fB\*(Aq واقعی، "\fP*" را درج کنید. برای
مثال
.sp
.if n .RS 4
.nf
.fam C
+ Calculator*xcalc.xpm* Exec exec xcalc
.fam
.fi
.if n .RE
.sp
یک آیتم منو با برچسب "Calculator" به همراه تصویری از یک ماشینحساب در
بالای آن درج میکند. مورد زیر:
.sp
.if n .RS 4
.nf
.fam C
+ *xcalc.xpm*\& Exec exec xcalc
.fam
.fi
.if n .RE
.sp
برچسب "Calculator" را حذف میکند، اما تصویر را باقی میگذارد.
.sp
اگر menu\-label شامل زیررشتهای باشد که با علامتهای درصد احاطه شده است،
متن میان علامتهای درصد به عنوان نام یک فایل تصویری (اصطلاحاً یک mini icon)
برای درج در سمت چپ برچسب منو در نظر گرفته میشود. یک mini icon دوم نیز
که در سمت راست منو رسم میشود میتواند به همین روش تعیین شود. برای نوشتن
یک \*(Aq%\*(Aq واقعی، "%%" را درج کنید. برای مثال
.sp
.if n .RS 4
.nf
.fam C
+ Calculator%xcalc.xpm% Exec exec xcalc
.fam
.fi
.if n .RE
.sp
یک آیتم منو با برچسب "Calculator" به همراه تصویری از یک ماشینحساب در
سمت چپ آن درج میکند. مورد زیر:
.sp
.if n .RS 4
.nf
.fam C
+ %xcalc.xpm%\& Exec exec xcalc
.fam
.fi
.if n .RE
.sp
برچسب "Calculator" را حذف میکند، اما تصویر را باقی میگذارد. تصاویر
استفادهشده در این قابلیت باید کوچک باشند (احتمالاً 16x16).
.sp
اگر menu\-name (و نه برچسب) شامل زیررشتهای باشد که با علامتهای اتساین
(\*(Aq@\*(Aq) جدا شده است، انتظار میرود متن میان آنها نام یک فایل تصویری
برای ترسیم در امتداد سمت چپ منو (یک side pixmap) باشد. ممکن است بخواهید
به جای آن از گزینه \fISidePic\fP در دستور \fBMenuStyle\fP استفاده کنید.
برای نوشتن یک \*(Aq@\*(Aq واقعی، "@@" را درج کنید. برای مثال
.sp
.if n .RS 4
.nf
.fam C
AddToMenu StartMenu@linux\-menu.xpm@
.fam
.fi
.if n .RE
.sp
منویی با یک تصویر در گوشه پایین سمت چپ آن ایجاد میکند.
.sp
اگر menu\-name همچنین شامل زیررشتهای محصور در \*(Aq^\*(Aqها باشد، متن میان
\*(Aq^\*(Aqها به عنوان نام یک رنگ X11 در نظر گرفته شده و ستونی که شامل تصویر
کناری است با آن رنگ، رنگآمیزی میشود. شما میتوانید این رنگ را برای یک سبک
منو با استفاده از گزینه \fISideColor\fP در دستور \fBMenuStyle\fP تنظیم کنید.
برای نوشتن یک \*(Aq^\*(Aq واقعی، "^^" را درج کنید. مثال:
.sp
.if n .RS 4
.nf
.fam C
AddToMenu StartMenu@linux\-menu.xpm@^blue^
.fam
.fi
.if n .RE
.sp
منویی با یک تصویر در گوشه پایین سمت چپ آن ایجاد کرده و ناحیهای از منو را
که تصویر در آن قرار دارد با رنگ آبی رنگآمیزی میکند.
.sp
در تمام موارد بالا، نام منوی حاصل همان نام مشخصشده است که زیررشتههای
میان جداکنندههای مختلف از آن حذف شدهاند.
.RE
.sp
\fBDestroyMenu\fP [recreate] \fImenu\fP
.RS 4
یک منو را حذف میکند، به طوری که ارجاعات بعدی به آن دیگر معتبر نخواهند بود.
میتوانید از این دستور برای تغییر محتویات یک منو در طول یک نشست fvwm
استفاده کنید. منو میتواند با استفاده از \fBAddToMenu\fP دوباره ساخته شود.
پارامتر اختیاری \fIrecreate\fP به fvwm میگوید که منو را به طور کامل دور
نیندازد، بلکه تمام آیتمهای منو (از جمله عنوان) را حذف کند.
.sp
.if n .RS 4
.nf
.fam C
DestroyMenu Utilities
.fam
.fi
.if n .RE
.RE
.sp
\fBTitle\fP
.RS 4
کاری انجام نمیدهد. برای درج یک خط عنوان در یک منو یا پنجره پاپآپ استفاده میشود.
.RE.SS "دستورهایی که منوها را باز میکنند (Commands that open menus)"
.sp
\fBMenu\fP \fImenu\-name\fP [\fIposition\fP] [\fIdouble\-click\-action\fP]
.RS 4
باعث میشود منویی که پیشتر تعریف شده است، بهصورت چسبنده (sticky) پدیدار شود.
بدین معنا که اگر کاربر منو را بهجای عمل کشیدن (drag)، با عمل کلیک باز کند، منو باز میماند. دستور \fIdouble\-click\-action\fP زمانی فراخوانی میشود که کاربر هنگام باز کردن منو، روی یک دکمه دوبار کلیک کند (یا اگر منو به یک کلید مقید شده باشد، آن کلید را بهسرعت دوبار فشار دهد). اگر عمل دوبار کلیک مشخص نشده باشد، دوبار کلیک روی منو هیچ کاری انجام نمیدهد. با این حال، اگر منو با یک آیتم منو آغاز شود (یعنی نه با یک عنوان یا جداکننده) و عمل دوبار کلیک داده نشده باشد، دوبار کلیک کردن نخستین آیتم منو را فراخوانی میکند (اما تنها در صورتی که نشانگر واقعاً روی آن آیتم باشد).
.sp
اگر منو هم با فشردن کلید فراخوانی شده و هم بسته شده باشد، نشانگر به مکانی که هنگام فراخوانی منو در آن قرار داشت بازگردانده میشود.
.sp
آرگومانهای \fIposition\fP امکان قرارگیری منو را در جایی از صفحه فراهم میکنند؛ برای مثال در مرکز بخش قابل مشاهده صفحه یا بالای یک نوار عنوان. اساساً سازوکار آن بدین صورت است: شما یک \fIcontext\-rectangle\fP و یک آفست نسبت به این مستطیل را مشخص میکنید که بهوسیله آن، گوشه بالا-چپ منو از گوشه بالا-چپ مستطیل جابهجا میشود. آرگومانهای \fIposition\fP از چندین بخش تشکیل شدهاند:
.sp
[\fIcontext\-rectangle\fP] \fIx\fP \fIy\fP [\fIspecial options\fP]
.sp
مستطیل زمینه (\fIcontext\-rectangle\fP) میتواند یکی از موارد زیر باشد:
.sp
\fIRoot\fP
.RS 4
پنجره ریشه صفحه جاری.
.RE
.sp
\fIMonitor\fP
.RS 4
ناحیه مربوط به صفحه RandR جاری.
.RE
.sp
\fIMouse\fP
.RS 4
یک مستطیل 1x1 در موقعیت ماوس.
.RE
.sp
\fIWindow\fP
.RS 4
قاب پنجره زمینه.
.RE
.sp
\fIInterior\fP
.RS 4
بخش درونی پنجره زمینه.
.RE
.sp
\fITitle\fP
.RS 4
عنوان پنجره زمینه یا آیکون.
.RE
.sp
\fIButton\fP
.RS 4
دکمه پنجره زمینه.
.RE
.sp
\fIIcon\fP
.RS 4
آیکون پنجره زمینه.
.RE
.sp
\fIMenu\fP
.RS 4
منوی جاری.
.RE
.sp
\fIItem\fP
.RS 4
آیتم منوی جاری.
.RE
.sp
\fIContext\fP
.RS 4
پنجره، منو یا آیکون جاری.
.RE
.sp
\fIThis\fP
.RS 4
هر ویجتی که نشانگر روی آن قرار دارد (مانند گوشهای از یک پنجره یا پنجره ریشه).
.RE
.sp
\fIRectangle\fP <_geometry_>
.RS 4
مستطیل تعریفشده توسط <_geometry_> در قالب هندسه X. در صورت عدم ذکر، پهنا و ارتفاع بهطور پیشفرض 1 هستند.
.sp
اگر context\-rectangle حذف شود یا نامعتبر باشد (برای مثال "item" روی یک پنجره)، مقدار پیشفرض "Mouse" است. توجه داشته باشید که همه این موارد در تمام شرایط معنا ندارند (برای مثال "Icon" هنگامی که نشانگر روی یک منو باشد).
.sp
مقادیر آفست \fIx\fP و \fIy\fP مشخص میکنند که منو چه مقدار از موقعیت پیشفرض خود جابهجا شود. بهطور پیشفرض، مقدار عددی دادهشده به عنوان درصدی از پهنا (ارتفاع) مستطیل زمینه تفسیر میشود، اما با یک \*(Aq\fIm\fP\*(Aq در انتها، بهجای آن از پهنا (ارتفاع) منو استفاده میشود. علاوه بر این، یک \*(Aq\fIp\fP\*(Aq در انتها، تفسیر را به پیکسل تغییر میدهد.
.sp
به جای یک مقدار واحد میتوانید از فهرستی از مقادیر استفاده کنید. همه اعداد اضافی پس از عدد نخست، با علامت خود از عدد پیش از خود جدا میشوند. از هیچ جداکننده دیگری استفاده نکنید.
.sp
اگر پیشوند "\*(Aq\fIo\fP" که در آن یک عدد صحیح است به \fIx\fP یا \fIy\fP اضافه شود، منو و مستطیل پیش از اعمال هر آفست دیگری، طوری جابهجا میشوند که در موقعیت مشخصشده همپوشانی داشته باشند. منو و مستطیل بهگونهای قرار میگیرند که پیکسل واقع در درصد از پهنا/ارتفاع مستطیل، دقیقاً روی پیکسل واقع در درصد از پهنا/ارتفاع منو باشد. بنابراین "o0" بدین معناست که حاشیههای بالا/چپ منو و مستطیل همپوشانی دارند، با "o100" حاشیههای پایین/راست همپوشانی دارند و اگر از "o50" استفاده کنید نسبت به یکدیگر متمرکز میشوند (آن را امتحان کنید تا ببینید بسیار سادهتر از این توضیحات است). پیشفرض "o0" است. پیشوند "o" مخففی برای "+\-m" است.
.sp
پیشوند \*(Aq\fIc\fP\*(Aq معادل با "o50" است. مثالها:
.sp
.if n .RS 4
.nf
.fam C
# 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
.fam
.fi
.if n .RE
.sp
توجه داشته باشید که میتوانید یک زیرمنو را بسیار دورتر از منوی جاری قرار دهید، بهطوری که نتوانید بدون ترک کردن منو با ماوس به آن برسید. اگر نشانگر در جهت کلی زیرمنو منوی جاری را ترک کند، منو باز میماند.
.RE
.sp
\fISpecial options\fP
.RS 4
.sp
برای ایجاد یک منوی جداشونده (tear off) بدون باز کردن منوی عادی، گزینه \fITearOffImmediately\fP را اضافه کنید. معمولاً منو پیش از جدا شدن، برای کسری از ثانیه در حالت عادی باز میشود. از آنجا که عمل جدا شدن، منو را مانند هر پنجره دیگری قرار میدهد، موقعیت باید بهصراحت مشخص شود:
.sp
.if n .RS 4
.nf
.fam C
# Forbid fvwm to place the menu window
Style UsePPosition
# Menu at top left corner of screen
Menu Root 0p 0p TearOffImmediately
.fam
.fi
.if n .RE
.sp
سبکهای منوی \fIAnimated\fP و \fIMwm\fP یا \fIWin\fP ممکن است منو را به جای دیگری روی صفحه منتقل کنند. اگر این را نمیخواهید میتوانید \fIFixed\fP را به عنوان یک گزینه اضافه کنید. این وضعیت ممکن است به عنوان مثال زمانی رخ دهد که بخواهید منو همیشه در گوشه بالا-راست صفحه باشد..sp
مایلید هنگامی که روی آیتم یک منو کلیک میکنید، منو در کجا ظاهر شود؟
حالت پیشفرض قرار دادن عنوان زیر مکاننما است، اما اگر میخواهید در جایی باشد
که آرگومانهای موقعیت تعیین میکنند، از گزینه \fISelectInPlace\fP استفاده کنید.
اگر میخواهید نشانگر روی عنوان منو قرار گیرد، از \fISelectWarp\fP نیز استفاده کنید.
توجه داشته باشید که این گزینهها تنها در صورتی اعمال میشوند که گزینه \fIPopupAsRootMenu\fP
در \fBMenuStyle\fP استفاده شده باشد.
.sp
نشانگر هر زمان که با باز شدن زیرمنو روی یکی از آیتمها قرار بگیرد، به سمت عنوان زیرمنو جهش مییابد
(سبک منوی \fIfvwm\fP) یا اصلاً هرگز به سمت عنوان جهش پیدا نمیکند
(سبکهای منوی \fIMwm\fP یا \fIWin\fP). با استفاده از گزینه \fIWarpTitle\fP (\fINoWarp\fP)
میتوانید هر زمان که زیرمنو باز میشود، جهش نشانگر را اجبار (یا منع) کنید.
.sp
توجه داشته باشید که \fIspecial\-options\fP با یک منوی معمولی که آرگومانهای
موقعیت دیگری ندارد نیز کار میکنند.
.RE
.RE
.sp
\fBPopup\fP \fIPopupName\fP [\fIposition\fP] [\fIdefault\-action\fP]
.RS 4
این دستور دو هدف دارد: مقید کردن یک منو به یک کلید یا دکمه ماوس، و مقید کردن
یک زیرمنو درون یک منو. قالبهای دستوری برای این دو هدف کمی متفاوت است.
آرگومانهای \fIposition\fP همانند دستور \fBMenu\fP هستند. دستور \fIdefault\-action\fP
زمانی فراخوانی میشود که کاربر برای فراخوانی منو روی یک دکمه کلیک کرده و بلافاصله
آن را رها کند (یا در صورتی که منو به یک کلید مقید شده باشد، کلید را سریعاً دو بار فشار دهد).
اگر اقدام پیشفرض مشخص نشده باشد، دوبار کلیک کردن روی منو هیچ کاری انجام نمیدهد.
با این حال، اگر منو با یک آیتم منو آغاز شود (یعنی نه با عنوان یا یک جداکننده) و
اقدام پیشفرض تعیین نشده باشد، دوبار کلیک کردن نخستین آیتم منو را فراخوانی میکند
(اما تنها در صورتی که نشانگر واقعاً روی آن آیتم باشد).
.sp
برای مقید کردن یک منوی پاپآپ از پیش تعریفشده به یک کلید یا دکمه ماوس:
.sp
مثال زیر دکمههای ۲ و ۳ ماوس را به یک پاپآپ به نام "Window Ops" مقید میکند.
اگر دکمههای ۲ یا ۳ در قاب پنجره، نوار کناری، یا نوار عنوان، بدون هیچ کلید تغییردهندهای
(هیچیک از shift، control، یا meta) فشرده شوند، منو بالا میآید.
.sp
.if n .RS 4
.nf
.fam C
Mouse 2 FST N Popup "Window Ops"
Mouse 3 FST N Popup "Window Ops"
.fam
.fi
.if n .RE
.sp
پاپآپها میتوانند با استفاده از دستور \fBKey\fP به کلیدها مقید شوند.
با مقید کردن پاپآپها به کلیدها و کنترل از طریق کلیدهای پیکان بالا،
پیکان پایین و enter، میتوان بدون استفاده از ماوس با آنها کار کرد.
.sp
برای مقید کردن یک منوی پاپآپ از پیش تعریفشده به منویی دیگر، جهت استفاده به عنوان زیرمنو:
.sp
مثال زیر یک زیرمنو به نام "Quit\-Verify" تعریف کرده و آن را به یک منوی اصلی
به نام "RootMenu" مقید میکند:
.sp
.if n .RS 4
.nf
.fam C
AddToMenu Quit\-Verify
+ "Really Quit Fvwm?" Title
+ "Yes, Really Quit"\& Quit
+ "Restart Fvwm"\& Restart
+ ""\& Nop
+ "No, Don\*(Aqt 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 \(rs
$HOME/.Xdefaults
+ ""\& Nop
+ ""\& Nop
+ Quit\& Popup Quit\-Verify
.fam
.fi
.if n .RE
.sp
دستور Popup با \fBMenu\fP در این تفاوت دارد که اگر کاربر تنها کلیک کند،
پاپآپها باز نمیمانند. اینها منوهای جهشی (popup) هستند که فشار کمی بیشتری به مچ دست
میآورند. منوهای \fBMenu\fP با عمل کلیک باز میمانند. برای توضیحات مربوط به رفتار تعاملی منوها
به دستور \fBMenu\fP مراجعه کنید. یک منو میتواند به طور همزمان تا ده بار باز باشد،
بنابراین یک منو حتی میتواند از خودش یا هر یک از منوهای والد خود به عنوان زیرمنو استفاده کند.
.RE
.sp
\fBTearMenuOff\fP
.RS 4
هنگامی که به یک آیتم منو اختصاص داده شود، یک نوار جداسازی (tear off bar) درون منو
قرار میدهد (یک خطچین افقی). فعال کردن آن آیتم منو را جدا میکند.
اگر آیتم منو دارای یک برچسب باشد، به جای خطچین نمایش داده میشود.
اگر خارج از منوها استفاده شود، این دستور هیچ کاری انجام نمیدهد. مثالها:
.sp
.if n .RS 4
.nf
.fam C
AddToMenu WindowMenu
+ I "" TearMenuOff
AddToMenu RootMenu
+ I "click here to tear me off" TearMenuOff
.fam
.fi
.if n .RE
.RE.SS "دستورهای سبک منو (Menu style commands)"
.sp
سبکهای منو (Menu styles) ظاهر و رفتار منوها را توصیف میکنند، همانطور که سبکهای معمولی این کار را برای پنجرهها انجام میدهند. سبکهای منو به منوهای مجزا یا همهٔ منوها اختصاص مییابند و تغییر سبک منو بلافاصله روی تمام منوهایی که از آن استفاده میکنند اثر میگذارد. (اگر یک سبک منو از درون خود یک منو استفاده شود، تغییرات در باز شدن بعدی منوی مربوطه اعمال میشوند.)
.sp
\fBChangeMenuStyle\fP \fImenustyle\fP \fImenu\fP .\|.\|.
.RS 4
سبک منوی \fImenu\fP را به \fImenustyle\fP تغییر میدهد. میتوانید در هر بار فراخوانی \fBChangeMenuStyle\fP بیش از یک منو را مشخص کنید.
.RE
.sp
\fBCopyMenuStyle\fP \fIorig\-menustyle\fP \fIdest\-menustyle\fP
.RS 4
سبک \fIorig\-menustyle\fP را در \fIdest\-menustyle\fP کپی میکند، که در آن \fIorig\-menustyle\fP یک سبک منوی موجود است. اگر سبک منوی \fIdest_menustyle\fP وجود نداشته باشد، ایجاد میشود.
.RE
.sp
\fBDestroyMenuStyle\fP \fImenustyle\fP
.RS 4
سبک منو به نام \fImenustyle\fP را حذف کرده و همهٔ منوهایی را که از این سبک استفاده میکنند به سبک پیشفرض تغییر میدهد؛ شما نمیتوانید سبک منوی پیشفرض را از بین ببرید.
.sp
.if n .RS 4
.nf
.fam C
DestroyMenuStyle pixmap1
.fam
.fi
.if n .RE
.RE
.sp
\fBMenuStyle\fP \fIstylename\fP [\fIoptions\fP]
.RS 4
یک سبک منوی جدید تنظیم میکند یا یک سبک از پیش تعریفشده را تغییر میدهد. آرگومان \fIstylename\fP نام سبک است؛ اگر شامل فاصله یا تب باشد باید درون نقلقول قرار گیرد. نام "\fB" برای سبک منوی پیشفرض رزرو شده است. سبک منوی پیشفرض برای هر شیء شبهمنو (مانند پنجرهٔ ایجاد شده توسط دستور *WindowList\fP) که سبکی با استفاده از \fBChangeMenuStyle\fP به آن اختصاص داده نشده باشد، به کار میرود. همچنین \fBDestroyMenuStyle\fP را ببینید. هنگام استفاده از حالت تکرنگ (monochrome)، گزینههای رنگ نادیده گرفته میشوند.
.sp
\fIoptions\fP فهرستی جدا شده با کاما شامل برخی از کلیدواژههای زیر است:
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.
.sp
در فهرست بالا برخی از گزینهها به صورت جفت یا سهتایی با \*(Aq/\*(Aq در میان آنها فهرست شدهاند. این گزینهها مانعةالجمع هستند. تمام گزینههای جفت را میتوان با افزودن پیشوند ! نقیض کرد تا اثر گزینهٔ مقابل را ایجاد کنند.
.sp
گزینههای \fIFvwm\fP، \fIMwm\fP و \fIWin\fP تمام گزینهها را به سبک همنام در نسخههای قبلی fvwm بازنشانی میکنند. سبک پیشفرض برای سبکهای منوی جدید، سبک \fIFvwm\fP است. این گزینهها تمام گزینههای دیگر به جز \fIHilightBack\fP، \fIActiveFore\fP و \fIPopupDelay\fP را بازنویسی (override) میکنند، بنابراین تنها باید به عنوان اولین گزینهٔ مشخصشده برای یک سبک منو یا برای بازنشانی سبک به رفتار تعریفشده استفاده شوند. همین اثر را میتوان با تنظیم تکتک گزینههای دیگر به صورت جداگانه نیز ایجاد کرد.
.sp
منوهای سبک \fIMwm\fP و \fIWin\fP زیرمنوها را به صورت خودکار باز میکنند (popup). منوهای \fIWin\fP با تغییر رنگ پسزمینه به تیره، مورد فعلی منو را مشخص میکنند. زیرمنوهای \fIFvwm\fP روی منوی والد همپوشانی دارند، در حالی که منوهای سبک \fIMwm\fP و \fIWin\fP هرگز با منوی والد همپوشانی پیدا نمیکنند.
.sp
سبک \fIFvwm\fP معادل است با: !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.
.sp
سبک \fIMwm\fP معادل است با: !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.
.sp
سبک \fIWin\fP معادل است با: 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.
.sp
\fIBorderWidth\fP ضخامت حاشیهٔ دور منوها را به پیکسل دریافت میکند. این مقدار میتواند از 0 تا 50 پیکسل باشد. مقدار پیشفرض 2 است. استفاده از یک مقدار نامعتبر، پهنای حاشیه را به مقدار پیشفرض بازمیگرداند.
.sp
\fIHilightBack\fP و \fI!HilightBack\fP برجستهسازی پسزمینهٔ مورد انتخابشده در منو را روشن و خاموش میکنند. رنگ پسزمینهٔ \fIActiveColorset\fP برای برجستهسازی استفاده میشود.
.sp
\fIHilightTitleBack\fP برجستهسازی پسزمینهٔ عنوانهای منو را روشن میکند. رنگ پسزمینهٔ \fITitleColorset\fP برای برجستهسازی استفاده میشود.
.sp
\fIActiveFore\fP و \fI!ActiveFore\fP برجستهسازی پیشزمینهٔ مورد انتخابشده در منو را روشن و خاموش میکنند. رنگ پیشزمینهٔ \fIActiveColorset\fP برای برجستهسازی استفاده میشود.
.sp
\fIMenuColorset\fP مجموعه رنگی (colorset) مورد استفاده برای رنگآمیزی منو را کنترل میکند. اگر برای مجموعه رنگی یک نگاشتپیکسلی (pixmap) یا گرادیان تعریف شده باشد، از آن به عنوان پسزمینهٔ منو استفاده میشود. ماسک شکل (shape mask) برگرفته از مجموعه رنگی برای شکلدهی به منو به کار میرود. لطفاً برای جزئیات مربوط به مجموعههای رنگی به بخش \fBColorsets\fP مراجعه کنید.
.sp
\fIActiveColorset\fP رنگ مورد فعال منو را کنترل میکند، به شرطی که سبکهای منوی \fIHilightBack\fP یا \fIActiveFore\fP به کار رفته باشند. در صورت تعیین، رنگهای سایه و برجستگی (hilight) از مجموعه رنگی نیز استفاده میشوند. نگاشتپیکسلی و ماسک شکلِ مجموعه رنگی استفاده نمیشوند. برجستهسازی پسزمینه یا پیشزمینه را میتوان به صورت مجزا با سبکهای منوی \fI!ActiveFore\fP یا \fI!HilightBack\fP خاموش کرد.
.sp
\fIGreyedColorset\fP دقیقاً مانند \fIMenuColorset\fP عمل میکند، اما پیشزمینهٔ مجموعه رنگی جایگزین رنگ داده شده با سبک منوی \fIGreyed\fP میشود. هیچ بخش دیگری از مجموعه رنگی استفاده نمیشود.
.sp
\fITitleColorset\fP دقیقاً مانند \fIMenuColorset\fP عمل میکند، اما تنها برای عنوانهای منو استفاده میشود.
.sp
\fITranslucent\fP جلوهٔ شبهشفافیتی را کنترل میکند که از تصویر میزکارِ زیر منو به عنوان تصویر پسزمینهٔ آن استفاده میکند. این گزینه یک مقدار عددی بین 0 (کاملاً نیمهشفاف) و 100 (غیرشفاف) دریافت میکند که درصد نیمهشفافیت است. برای خاموش کردن این اثر از \fI!Translucent\fP (یا بدون مقدار اضافی) استفاده کنید. اثر نیمهشفاف فقط روی منوهای معمولی اعمال میشود و بر منوهای «جدا شده» (torn off) اعمال نمیگردد. توجه داشته باشید که تنها پسزمینهٔ منو نیمهشفاف است؛ \fIHilightBack\fP مورد فعال و \fIHilightTitleBack\fP عنوان نیمهشفاف نیستند. برای داشتن یک منوی کاملاً نیمهشفاف دستور زیر را به کار ببرید:
.sp
.if n .RS 4
.nf
.fam C
MenuStyle * Translucent 60, !HilightBack, !HilightTitleBack, ActiveFore
.fam
.fi
.if n .RE
.sp
\fIHilight3DThick\fP، \fIHilight3DThin\fP و \fIHilight3DOff\fP مشخص میکنند که آیا مورد انتخابشده در منو با یک برجستگی سهبعدی برجسته شود یا خیر. برجستگیهای ضخیم دارای پهنای دو پیکسل و برجستگیهای نازک دارای پهنای یک پیکسل هستند.
.sp
\fIHilight3DThickness\fP یک آرگومان عددی میگیرد که میتواند بین \-50 تا +50 پیکسل باشد. با مقادیر منفی، مورد منو ظاهری فشردهشده به داخل پیدا میکند. سه دستور بالا به ترتیب معادل ضخامتهای 2، 1 و 0 هستند.
.sp
\fIAnimation\fP و \fI!Animation\fP پویانمایی منو را روشن یا خاموش میکنند. هنگامی که پویانمایی روشن است، زیرمنوهایی که در صفحه جا نمیشوند باعث میشوند منوی والد به سمت چپ منتقل شود تا زیرمنو قابل مشاهده باشد.
.sp
\fIFont\fP و \fITitleFont\fP نام یک قلم را به عنوان آرگومان دریافت میکنند. اگر قلمی با این نام موجود باشد، برای متن تمام موارد منو به کار میرود. اگر وجود نداشته باشد یا نام آن خالی گذاشته شود، از پیشفرض توکار استفاده میشود. اگر یک \fITitleFont\fP داده شود، به جای قلم عادی برای تمام عنوانهای منو به کار میرود.
.sp
\fIPopupDelay\fP به یک آرگومان عددی نیاز دارد. این مقدار، تأخیر بر حسب میلیثانیه پیش از باز شدن (popup) یک زیرمنو است، هنگامی که نشانگر روی یک مورد منو که دارای زیرمنو است قرار میگیرد. اگر مقدار صفر باشد، هیچ باز شدن خودکاری انجام نمیشود. اگر آرگومان حذف شود، از پیشفرض توکار استفاده میشود. توجه داشته باشید که اگر گزینهٔ \fIPopupImmediately\fP استفاده شود، تأخیر باز شدن هیچ اثری ندارد زیرا در آن حالت زیرمنوها بلافاصله باز میشوند..sp
\fIPopupImmediately\fP باعث میشود آیتمهای منو که دارای زیرمنو هستند، به محض ورود نشانگر به آیتم باز شوند. در این حالت گزینهٔ \fIPopupDelay\fP نادیده گرفته میشود. اگر از \fIPopupDelayed\fP استفاده شود، fvwm گزینهٔ \fIPopupDelay\fP را بررسی میکند تا تعیین کند آیا یا چه زمانی این باز شدن خودکار رخ دهد.
.sp
\fIPopdownDelay\fP دقیقاً مانند \fIPopupDelay\fP عمل میکند اما مهلت زمانی شیوهٔ \fIPopupDelayed\fP را تعیین میکند.
.sp
\fIPopdownImmediately\fP باعث ناپدید شدن زیرمنوها به محض خروج نشانگر از زیرمنو و آیتم متناظر در منوی والد میشود. با گزینهٔ معکوس آن یعنی \fIPopdownDelayed\fP، زیرمنو تنها پس از زمان مشخصشده با گزینهٔ \fIPopdownDelay\fP بسته میشود. این ویژگی زمانی مفید است که نشانگر هنگام تلاش برای رفتن به داخل زیرمنو، مکرراً از آیتم منو منحرف میشود. هرگاه بین سبکهای \fIPopupImmediately\fP، \fIPopupDelayed\fP، \fIPopupDelay\fP و سبکهای \fIPopdownImmediately\fP، \fIPopdownDelayed\fP، \fIPopdownDelay\fP تداخلی پیش آید، هنگام پیمایش با ماوس سبکهای \fIPopup.\|.\|.\fP و هنگام پیمایش با صفحهکلید سبکهای \fIPopdown.\|.\|.\fP اولویت دارند.
.sp
\fIPopupOffset\fP نیازمند دو آرگومان عدد صحیح است. هر دو مقدار بر مکان قرارگیری زیرمنوها نسبت به منوی والد تأثیر میگذارند. اگر هر دو مقدار صفر باشند، لبهٔ چپ زیرمنو با لبهٔ چپ منوی والد همپوشانی خواهد داشت. اگر مقدار اول غیرصفر باشد، زیرمنو به همان تعداد پیکسل به سمت راست (یا چپ در صورت منفی بودن) جابهجا میشود. اگر مقدار دوم غیرصفر باشد، منو به اندازهٔ همان درصد از پهنای منوی والد به راست یا چپ جابهجا خواهد شد.
.sp
\fIPopupActiveArea\fP نیازمند یک مقدار عدد صحیح بین ۵۱ و ۱۰۰ است. در حالت عادی، زمانی که نشانگر روی یک آیتم منو با زیرمنو قرار دارد و وارد ناحیهای میشود که از ۷۵٪ پهنای منو آغاز میگردد، زیرمنو فوراً نشان داده میشود. این درصد را میتوان با \fIPopupActiveArea\fP تغییر داد. تنظیم این مقدار روی ۱۰۰، این گونه باز شدنهای خودکار را به طور کامل غیرفعال میکند. در صورت عدم ارائهٔ مقدار یا دادن مقداری نامعتبر، مقدار پیشفرض بازیابی میشود.
.sp
\fITitleWarp\fP و \fI!TitleWarp\fP بر این امر تأثیر میگذارند که آیا هنگام باز شدن یک زیرمنو، نشانگر به عنوان منو منتقل (warp) شود یا خیر. توجه داشته باشید که صرفنظر از این تنظیم، اگر منو در زیر نشانگر باز نشود، نشانگر منتقل نخواهد شد.
.sp
\fITitleUnderlines0\fP، \fITitleUnderlines1\fP و \fITitleUnderlines2\fP مشخص میکنند که چند خط در زیر عنوان منو رسم شود.
.sp
\fISeparatorsLong\fP و \fISeparatorsShort\fP طول جداکنندههای منو را تعیین میکنند. جداکنندههای بلند سراسر منو را از لبهٔ چپ تا لبهٔ راست طی میکنند. جداکنندههای کوتاه چند پیکسل تا لبههای منو فاصله باقی میگذارند.
.sp
\fITrianglesSolid\fP و \fITrianglesRelief\fP بر نحوهٔ رسم مثلثهای کوچک مربوط به زیرمنوها اثر میگذارند. مثلثهای توپر (Solid) با یک رنگ پر میشوند در حالی که مثلثهای برجسته (Relief) توخالی هستند.
.sp
\fIDoubleClickTime\fP به یک آرگومان عددی نیاز دارد. این مقدار، زمان بر حسب میلیثانیه میان دو کلیک ماوس در یک منو است تا دوبار کلیک در نظر گرفته شود. مقدار پیشفرض ۴۵۰ میلیثانیه است. اگر این آرگومان حذف شود، زمان دوبار کلیک به این مقدار پیشفرض بازنشانی میگردد.
.sp
\fISidePic\fP نام یک فایل تصویری را به عنوان آرگومان میپذیرد. این تصویر در امتداد سمت چپ منو رسم میشود. گزینهٔ \fISidePic\fP میتواند توسط یک پیکسمپ کناری ویژهٔ منو رونویسی شود (به \fBAddToMenu\fP مراجعه کنید). اگر نام فایل حذف شود، هرگونه پیکسمپ کناریِ موجود از سبک منو حذف میشود.
.sp
\fISideColor\fP نام یک رنگ X11 را به عنوان آرگومان میپذیرد. این رنگ برای رنگآمیزی ستون حاوی تصویر کناری به کار میرود (بالا را ببینید). گزینهٔ SideColor میتواند با یک رنگ کناری ویژهٔ منو رونویسی شود (به \fBAddToMenu\fP مراجعه کنید). اگر نام رنگ حذف شود، گزینهٔ رنگ کناری غیرفعال میشود.
.sp
\fIPopupAsRootMenu\fP، \fIPopupAsSubmenu\fP، \fIPopupIgnore\fP و \fIPopupClose\fP رفتار برنامه را هنگام کلیک بر روی آیتم منویی که زیرمنویی باز میکند تغییر میدهند. با \fIPopupAsRootMenu\fP منوی اصلی پیش از نمایان شدن زیرمنو بسته میشود، در حالی که با \fIPopupAsSubmenu\fP اینگونه نیست و میتوانید مجدداً به منوی والد برگردید. علاوه بر این، با \fIPopupAsSubmenu\fP زیرمنو صرفنظر از اینکه ماوس را به کجا حرکت دهید، باز نگه داشته میشود (posted). بسته به سبک منوی شما، این امر ممکن است ناوبری درون منو را سادهتر کند. \fBهرگونه\fP فشردن کلید در حین باز نگه داشته شدن منو، آن را به رفتار عادی بازمیگرداند. با \fIPopupClose\fP با فعال شدن یکی از آیتمهای زیرمنو، منو بسته میشود و در صورت استفاده از \fIPopupIgnore\fP منو باز باقی میماند (حتی اگر منو با دستور \fBPopup\fP فراخوانی شده باشد). \fIPopupAsSubmenu\fP حالت پیشفرض است.
.sp
\fIRemoveSubmenus\fP به fvwm دستور میدهد هنگام بازگشت به منوی والد، زیرمنو را حذف کند. با \fIHoldSubmenus\fP زیرمنو مرئی باقی میماند. اگر از سبک \fIPopupDelayed\fP استفاده میکنید، احتمالاً ترجیح میدهید از \fIHoldSubmenus\fP بهره ببرید. \fIRemoveSubmenus\fP بر ناوبری منو با صفحهکلید تأثیر میگذارد.
.sp
\fISelectOnRelease\fP یک نام کلید اختیاری را به عنوان آرگومان دریافت میکند. اگر کلید ارائهشده در منویی که از این سبک بهره میبرد رها شود، آیتم فعلی منو انتخاب میشود. این قابلیت برای ناوبری در \fBWindowList\fP در نظر گرفته شده است. نام کلید یک نام کلید استاندارد X11 است که در \fI/usr/include/X11/keysymdef.h\fP (بدون پیشوند \fIXK_\fP) یا در پایگاهدادهٔ keysym واقع در \fI/usr/X11R6/lib/X11/XKeysymDB\fP تعریف شده است. برای غیرفعال کردن این رفتار، نام کلید را حذف کنید.
.sp
نکته: برخی از کارگزارهای X از رویدادهای KeyRelease پشتیبانی نمیکنند. \fISelectOnRelease\fP بر روی چنین سیستمهایی کار نمیکند.
.sp
\fIItemFormat\fP رشتهای ویژه را به عنوان آرگومان خود میپذیرد که چیدمان آیتمهای منو را تعیین میکند. رشتهٔ قالب را به منزلهٔ یک آیتم منو تصور کنید. تمام کاری که باید انجام دهید این است که به fvwm بگویید بخشهای گوناگون آیتم منو (یعنی برچسبها، مثلث نمایانگر زیرمنو، آیکونهای کوچک و تصویر کناری) را در کجای ناحیهٔ خالی جای دهد. این رشته از فاصلهها،
.sp
نویسهها و دستورالعملهای قالببندی که با \*(Aq%\*(Aq آغاز میشوند تشکیل شده است. هر نویسه و دستورالعمل قالببندیِ نامعتبر در سکوت نادیده گرفته میشود:
.sp
\fB%l\fP، \fB%c\fP و \fB%r\fP
.RS 4
برچسب آیتم بعدی را درج میکنند. حداکثر تا سه برچسب را میتوان به کار برد. ستون آیتم چپچین (\fB%l\fP)، وسطچین (\fB%c\fP) یا راستچین (\fB%r\fP) است.
.RE
.sp
\fB%i\fP
.RS 4
آیکون کوچک را درج میکند.
.RE
.sp
\fB%>\fP و \fB%<\fP
.RS 4
مثلث زیرمنو را درج میکنند که یا به سمت راست (\fB%>\fP) یا به سمت چپ (\fB%<\fP) اشاره دارد.
.RE
.sp
\fB%|\fP
.RS 4
نخستین \fB%|\fP نمایانگر آغاز ناحیهای است که با رنگ پسزمینه یا یک برجستگی (یا هر دو) برجسته میشود. دومین \fB%|\fP پایان این ناحیه را نشان میدهد. \fB%|\fP را میتوان حداکثر تا دو بار در رشته به کار برد. اگر هیچیک یا فقط یکی از آنها را اضافه نکنید، fvwm حاشیهها را برابر با حاشیههای کل آیتم قرار میدهد (بدون در نظر گرفتن تصویر کناری).
.RE
.sp
\fB%s\fP
.RS 4
تصویر کناری را در آغاز یا پایان منو قرار میدهد. این دستورالعمل تنها یک بار و فقط در ابتدا یا انتهای رشتهٔ قالب قابل استفاده است. اگر \fB%s\fP در ابتدای رشته نباشد، منوها به درستی رسم نمیشوند.
.RE
.sp
\fBSpace\fP، \fBTab\fP، \fB%Space\fP و \fB%Tab\fP
.RS 4
فاصلهای به اندازهٔ یک فاصله (space) یا یک تب (tab) با استفاده از پهنای قلم منو اضافه میکنند. هنگام استفاده از تب، اندازهٔ این فاصله میتواند بین ۱ تا ۸ فاصله باشد زیرا موقعیت تب مضربی از ۸ نسبت به لبهٔ منو است. در صورت استفاده از نویسههای فاصله یا تب، کل رشته باید درون نقلقول قرار گیرد.
.RE
.sp
\fB%p\fP
.RS 4
مانند Space و Tab، مورد \fB%p\fP نیز یک ناحیهٔ خالی را در آیتم درج میکند، اما با کنترل بهتر بر اندازهٔ آن (پایین را ببینید).
.RE
.sp
میتوانید مانند زیر، یک فضای اضافی پیش و پس از هر یک از شیءها تعریف کنید
.sp
.if n .RS 4
.nf
.fam C
%left.rightp
.fam
.fi
.if n .RE
.sp
این بدان معناست: اگر شیء در منو تعریف شده باشد (برای نمونه اگر \fB%s\fP باشد و از یک تصویر کناری استفاده کنید، یا برای ستون سوم \fB%l\fP باشد و آیتمهایی تعریف شده باشند که در عمل دارای ستون سوم هستند)، آنگاه \fIleft\fP پیکسل قبل از شیء و \fIright\fP پیکسل بعد از آن بیفزایید. در صورت عدم نیاز، میتوانید بخشهای \fIleft\fP یا \fI.right\fP را حذف کنید. تمام مقادیر تا سقف پهنای صفحه مجاز هستند. حتی مقادیر منفی را نیز میتوان با احتیاط به کار برد. به جای \fBp\fP میتوان هر یک از دستورالعملهای قالببندی دیگری را که در بالا شرح داده شد جایگزین کرد.
.sp
نکته: تنها آیتمهای تعریفشده در رشتهٔ قالب درون منوها قابل رؤیت هستند. بنابراین اگر \fB%s\fP را در آن قرار ندهید، تصویر کناری را نخواهید دید، حتی اگر یکی از آنها مشخص شده باشد..sp
نکته: سبک \fISubmenusLeft\fP رشتهی پیشفرض \fIItemFormat\fP را تغییر میدهد، اما اگر بهصورت دستی تنظیم شده باشد، تغییر داده نمیشود.
.sp
نکته: اگر هر عنوان قالببندینشدهای در منو از عریضترین آیتم منو پهنتر باشد، فاصلههای بین بخشهای مختلف آیتمهای منو افزایش مییابند تا با عرض عنوان مطابقت پیدا کنند. اشیاء چپچین ابتدایی در رشته قالببندی (\fB%l\fP، \fB%i\fP، \fB%<\fP، اولین \fB%|\fP) به لبه سمت چپ منو میچسبند و اشیاء راستچین انتهایی (\fB%r\fP، \fB%i\fP، \fB%>\fP، دومین \fB%|\fP) به لبه سمت راست میچسبند. فاصلههای بین آیتمهای باقیمانده بهطور یکسان افزایش مییابند.
.sp
مثالها:
.sp
.if n .RS 4
.nf
.fam C
MenuStyle * ItemFormat "%.4s%.1|%.5i%.5l%.5l%.5r%.5i%2.3>%1|"
.fam
.fi
.if n .RE
.sp
رشته پیشفرضی است که توسط fvwm استفاده میشود: (تصویر کناری + ۴ پیکسل فاصله) (ابتدای ناحیه برجسته + ۱ پیکسل فاصله) (آیکون کوچک + ۵ پیکسل) (ستون اول چپچین + ۵ پیکسل) (ستون دوم چپچین + ۵ پیکسل) (ستون سوم راستچین + ۵ پیکسل) (آیکون کوچک دوم + ۵ پیکسل) (۲ پیکسل + مثلث زیرمنو + ۳ پیکسل) (۱ پیکسل + انتهای ناحیه برجسته).
.sp
.if n .RS 4
.nf
.fam C
MenuStyle * ItemFormat "%.1|%3.2<%5i%5l%5l%5r%5i%1|%4s"
.fam
.fi
.if n .RE
.sp
توسط fvwm به همراه گزینه \fISubmenusLeft\fP در زیر استفاده میشود.
.sp
دستورات \fIVerticalItemSpacing\fP و \fIVerticalTitleSpacing\fP فاصله عمودی آیتمها و عناوین منو را کنترل میکنند، همانطور که \fIItemFormat\fP فاصله افقی را کنترل میکند. هر دو دستور دو آرگومان عددی میگیرند که میتوانند در بازه \-100 تا +100 باشند. آرگومان اول فاصله به پیکسل در بالای یک آیتم عادی منو (یا یک عنوان منو) است و دومی فاصله به پیکسل در زیر آن است. اعداد منفی مفهوم چندانی ندارند و ممکن است ظاهر منو را کاملاً به هم بریزند. اگر آرگومانی داده نشود یا آرگومانهای دادهشده نامعتبر باشند، از مقادیر پیشفرض توکار استفاده میشود: یک پیکسل بالای آیتم یا عنوان و دو پیکسل زیر آن.
.sp
از \fIVerticalMargins\fP میتوان برای افزودن فاصلهگذاری درونی (padding) در بالا و پایین منوها استفاده کرد. این دستور دو آرگومان عددی میگیرد که باید اعداد صحیح مثبت (یا صفر) باشند. اگر تعداد آرگومانها یا مقادیر آنها نادرست باشد، fvwm بهطور پیشفرض هر دو را 0 در نظر میگیرد، که به معنای عدم وجود هرگونه فاصلهگذاری درونی است. اگر مقادیر صحیح باشند، مقدار اول برای حاشیه بالا و مقدار دوم برای حاشیه پایین استفاده میشود.
.sp
گزینه \fISubmenusLeft\fP چیدمان و رفتار منو را آینهای (معکوس) میکند. زیرمنوها در سمت چپ باز میشوند، مثلث زیرمنو در سمت چپ رسم میشود، و آیکون کوچک و تصویر کناری در سمت راست منو رسم میشوند. حالت پیشفرض \fISubmenusRight\fP است. راهنماهای موقعیت منو نیز تحت تأثیر این تنظیمات قرار میگیرند؛ یعنی راهنماهای موقعیت با استفاده از \fIitem\fP یا \fImenu\fP بهعنوان مستطیل زمینه و راهنماهای موقعیت با استفاده از آفستهای \fIm\fP.
.sp
گزینههای \fIAutomaticHotkeys\fP و \fI!AutomaticHotkeys\fP توانایی منو برای ارائه خودکار کلیدهای میانبر (hot\-keys) بر روی اولین نویسه از برچسب هر آیتم منو را کنترل میکنند. اگر در دستور \fBAddToMenu\fP یک کلید میانبر صریح تعیین شده باشد، این رفتار همواره نادیده گرفته میشود.
.sp
گزینههای \fIUniqueHotkeyActivatesImmediate\fP و \fI!UniqueHotkeyActivatesImmediate\fP نحوه فراخوانی آیتمهای منو در هنگام استفاده از کلیدهای میانبر را کنترل میکنند. بهطور پیشفرض، اگر یک مدخل منو تنها یک تطابق قابل تکمیل برای یک کلید میانبر مشخص داشته باشد، کنشِ مربوط به آن مدخل منو اجرا شده و منو بسته میشود. این به دلیل گزینه \fIUniqueHotkeyActivatesImmediate\fP است. با این حال، با استفاده از گزینه \fI!UniqueHotkeyActivatesImmediate\fP میتوان به منو اعلام کرد که حتی در صورت وجود تنها یک آیتم منطبق برای یک کلید میانبر، همچنان باز بماند و منتظر بماند تا کاربر آیتم انتخابشده را فراخوانی کند.
.sp
گزینه \fIMouseWheel\fP توانایی پیمایش منو با استفاده از چرخ ماوس را کنترل میکند. این گزینه یک آرگومان میگیرد که میتواند یکی از مقادیر ScrollsPointer، ScrollsMenu، ScrollsMenuBackwards یا ActivatesItem باشد. گزینه ScrollsPointer باعث میشود چرخ ماوس، اشارهگر را روی منو پیمایش کند. این حالت پیشفرض است. گزینههای ScrollsMenu و ScrollsMenuBackwards منو را در زیر اشارهگر پیمایش میکنند. گزینه ActivatesItem پیمایش با چرخ ماوس را غیرفعال کرده و استفاده از چرخ ماوس را طوری عمل میدهد که گویی روی منو کلیک شده است. اگر هیچ آرگومانی ارائه نشود، تنظیمات پیشفرض بازگردانی میشوند.
.sp
گزینه \fIScrollOffPage\fP اجازه میدهد تا در صورت تنظیم \fIMouseWheel\fP روی ScrollsMenu یا ScrollsMenuBackwards، منو به خارج از ناحیه قابلمشاهده پیمایش شود. این حالت پیشفرض است. برعکس آن، یعنی \fI!ScrollOffPage\fP، این رفتار را غیرفعال میکند.
.sp
گزینه \fITrianglesUseFore\fP مثلثهای زیرمنو را با رنگ پیشزمینه مجموعه رنگهای منو رسم میکند (که بهطور معمول با رنگ برجستهسازی رسم میشوند). گزینه \fI!TrianglesUseFore\fP این رفتار را غیرفعال میکند.
.RE.SH "فهرست دستورهای FVWM (LIST OF FVWM COMMANDS)"
.sp
توضیحات دستورهای زیر در بخشهای پس از این گروهبندی شدهاند. ترتیب بخشها به این امید تنظیم شده است که بر اساس میزان سودمندی برای کاربران تازهکار باشد.
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای منو\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای متفرقه\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای مؤثر بر جابهجایی و جایگذاری پنجره\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای مربوط به فوکوس و حرکت ماوس\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای کنترل وضعیت پنجره\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای مربوط به مقیدسازیهای ماوس و کلید\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستور Style (کنترل سبکهای پنجره)\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBسایر دستورهای کنترلکننده سبکهای پنجره\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای کنترلکننده میزکار مجازی\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای مربوط به توابع کاربری و دستورهای شل\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای شرطی\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای ماژول\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBدستورهای خروج، راهاندازی مجدد و مدیریت نشست\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBمجموعههای رنگ (Colorsets)\fP
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fBگرادیانهای رنگی (Color gradients)\fP
.RE.SS "دستورهای گوناگون (Miscellaneous Commands)"
.sp
\fBBugOpts\fP [\fIoption\fP [\fIbool\fP]], .\|.\|.
.RS 4
این دستور چندین راهکار جایگزین (workaround) را برای باگهای برنامههای شخص ثالث کنترل میکند. گزینههای مجزا با کاما از هم جدا میشوند. آرگومان اختیاری \fIbool\fP یک آرگومان دودویی (بولی) است و فعال یا غیرفعال بودن راهکار باگ را کنترل میکند. این مقدار میتواند "True" یا "False" برای روشن یا خاموش کردن گزینه، یا "toggle" برای جابجایی بین حالتها باشد. در صورت حذف \fIbool\fP، تنظیمات پیشفرض بازگردانده میشود.
.sp
\fIDebugRandR\fP پیامهای اشکالزدایی چیدمان نمایشگر را فعال میکند.
.sp
\fIFlickeringMoveWorkaround\fP رویدادهای ConfigureNotify را که معمولاً هنگام جابجایی پنجره به برنامه فرستاده میشوند، غیرفعال میکند. اگر برخی پنجرهها در حین جابجایی به صورت آزاردهندهای چشمک میزنند (flicker)، این گزینه ممکن است به شما کمک کند. توجه داشته باشید که اگر این مشکل رخ دهد، باگ fvwm نیست، بلکه اشکال از خود برنامه است.
.sp
\fIMixedVisualWorkaround\fP باعث میشود fvwm پیش از انجام برخی عملیات با استفاده از جلوههای بصری پنجره ریشه (root window visuals)، نقشه رنگ ریشه (root colormap) را نصب کند. این فقط زمانی مفید است که از گزینه \fB\-visual\fP برای راهاندازی fvwm استفاده شود و آن هم فقط با برخی پیکربندیهای سرورهای خاص (مانند Exceed 6.0 با یک ریشه هشت بیتی PseudoColor و fvwm با یک visual بیست و چهار بیتی TrueColor).
.sp
گزینه \fIModalityIsEvil\fP کنترل میکند که آیا برنامههای Motif قابلیت داشتن کادرهای محاورهای مُدال (دیالوگهایی که پیش از انجام هر کار دیگری شما را وادار به بستن آنها میکنند) را دارند یا خیر. پیشفرض این است که به برنامهها اجازه داشتن کادرهای محاورهای مدال داده نشود. از این گزینه با احتیاط استفاده کنید. پس از روشن شدن این گزینه، برای خاموش کردن آن باید fvwm را مجدداً راهاندازی کنید.
.sp
\fIRaiseOverNativeWindows\fP باعث میشود fvwm تلاش کند پنجرههای تحت مدیریت خود را بالاتر از پنجرههای بومی (native) سیستم میزبان X server بیاورد. این برای برخی از X serverهایی که زیر Windows، Windows NT یا Mac OS X اجرا میشوند لازم است. fvwm تلاش میکند تشخیص دهد که آیا تحت چنین X serverی در حال اجرا است یا خیر، و پرچم را متناسب با آن مقداردهی اولیه میکند.
.sp
\fIRaiseOverUnmanaged\fP باعث میشود fvwm تلاش کند پنجرههای تحت مدیریت خود را بالاتر از پنجرههای override_redirect بیاورد. این کار برای سازگاری با برنامههای نامناسبی استفاده میشود که برخلاف قراردادهای ICCCM، از پنجرههای طولانیمدت از این نوع استفاده میکنند. این گزینه همراه با گزینه سبک \fIUnmanaged\fP نیز مفید است.
.sp
\fIFlickeringQtDialogsWorkaround\fP از چشمکزدن پنجره فوکوسشده در برخی ماژولها هنگام استفاده از برنامههای KDE یا QT دارای پنجرههای محاورهای مدال، جلوگیری میکند. به طور پیشفرض این گزینه فعال است. این گزینه ممکن است برای سایر برنامههایی که از پنجرههای مدیریتنشده توسط fvwm استفاده میکنند از نظر بصری ناخوشایند باشد. از آنجا که این برنامهها نادر هستند، به احتمال زیاد باقی گذاشتن این گزینه روی مقدار پیشفرض آن بیخطر است.
.sp
\fIQtDragnDropWorkaround\fP فرستادن پیامهای ناشناخته ClientEvent را به پنجرهها سرکوب میکند \(em این عمل معمولاً بیضرر است، اما Qt در مدیریت پیامهای ناشناخته ClientEvent دچار مشکل میشود. بنابراین فعال کردن این گزینه ممکن است برای برنامههای Qt که از DragnDrop استفاده میکنند مفید باشد. این گزینه به طور پیشفرض خاموش است.
.sp
\fIEWMHIconicStateWorkaround\fP برای پیجرها (pagers) یا تسکبارهای سازگار با EWMH لازم است که پنجرههای موجود در میزکارهای دیگر را به صورت آیکونشده (iconified) نمایش میدهند. این پیجرها و تسکبارها از نسخهای از مشخصات EWMH قبل از نسخه 1.2 (نسخههای کنونی KDE 2 و 3) استفاده میکنند. این پیجرها و تسکبارها از وضعیت IconicState در WM_STATE برای تشخیص اینکه آیا یک برنامه آیکون شده است یا خیر استفاده میکنند. این وضعیت، طبق ICCCM، دلالت بر این ندارد که یک پنجره (به معنای معمول) آیکون شده است. روشن کردن این گزینه fvwm را وادار میکند که یک همارزی بین وضعیت IconicState در WM_STATE و پنجره آیکونشده برقرار کند. این کار نقض سازگاری با ICCCM است، اما نباید مشکلات بزرگی ایجاد کند. به طور پیشفرض این گزینه خاموش است.
.sp
با فعال بودن \fIDisplayNewWindowNames\fP، fvwm نام، نام آیکون (در صورت وجود)، منبع (resource) و کلاس پنجرههای جدید را در کنسول چاپ میکند. این میتواند به یافتن رشتههای درست برای استفاده در دستور \fBStyle\fP کمک کند.
.sp
هنگامی که گزینه \fIExplainWindowPlacement\fP فعال است، هر بار که پنجره جدیدی قرار داده میشود یا از \fBPlaceAgain\fP استفاده میشود، fvwm پیامی را در کنسول چاپ میکند. این پیام توضیح میدهد که پنجره روی کدام desk، صفحه (page)، نمایشگر (screen) و موقعیت قرار گرفته و چرا. از این گزینه میتوان برای پی بردن به این که چرا یک پنجره خاص در جایی که انتظار دارید ظاهر نمیشود، استفاده کرد.
.sp
گزینه \fIDebugCRMotionMethod\fP کدهای اشکالزدایی خاصی را در روالهای مدیریت ConfigureRequest در fvwm فعال میکند. این گزینه برای کاربر مفید نیست، اما اگر باگی را به تیم fvwm گزارش دهید ممکن است از شما بخواهیم این گزینه را فعال کنید.
.sp
گزینه \fITransliterateUtf8\fP نویسهگردانی (transliteration) را در حین تبدیل از رشتههای utf\-8 فعال میکند. به طور پیشفرض fvwm در حین تبدیل نویسهگردانی انجام نمیدهد، اما اگر تبدیل از utf\-8 به دلیل نویسههایی که مطابقت مستقیمی در مجموعه نویسه مقصد ندارند با شکست مواجه شود، به رشتههای جایگزین ارائهشده توسط کلاینتها رجوع میکند. با این حال برخی کلاینتها در تنظیم صحیح ویژگیهای غیر utf\-8 کوتاهی میکنند، که در این صورت این گزینه ممکن است کمککننده باشد.
.RE
.sp
\fBBusyCursor\fP [\fIOption\fP \fIbool\fP], .\|.\|.
.RS 4
این دستور مکاننما (cursor) را در حین اجرای دستورهای مشخصی کنترل میکند. \fIOption\fP میتواند \fIDynamicMenu\fP، \fIModuleSynchronous\fP، \fIRead\fP، \fIWait\fP یا \fI*\fP باشد. یک گزینه باید با آرگومان بولی \fIbool\fP دنبال شود. برای جداسازی گزینههای مجزا میتوانید از کاما استفاده کنید. اگر گزینهای را روی "True" تنظیم کنید، هنگام اجرای دستور متناظر، fvwm مکاننمای بافتار (context) \fIWAIT\fP از دستور \fBCursorStyle\fP را نمایش میدهد. مقدار "False" عدم نمایش مکاننما را تحمیل میکند. پیشفرض عبارت است از:
.sp
.if n .RS 4
.nf
.fam C
BusyCursor DynamicMenu False, ModuleSynchronous False, \(rs
Read False, Wait False
.fam
.fi
.if n .RE
.sp
گزینه \fI*\fP به تمام گزینههای موجود اشاره دارد.
.sp
گزینه \fIRead\fP دستور \fBPipeRead\fP را کنترل میکند.
.sp
گزینه \fIDynamicMenu\fP گزینههای \fIDynamicPopupAction\fP و \fIMissingSubmenuFunction\fP از دستور \fBAddToMenu\fP را تحت تأثیر قرار میدهد. اگر این گزینه روی "False" تنظیم شده باشد، مکاننمای مشغول در حین اجرای دستور منوی پویا نمایش داده نمیشود، حتی اگر این دستور یک دستور \fBRead\fP یا \fBPipeRead\fP باشد و گزینه \fIRead\fP روی "True" تنظیم شده باشد.
.sp
گزینه \fIModuleSynchronous\fP دستور \fBModuleSynchronous\fP را تحت تأثیر قرار میدهد. اگر این گزینه روی "False" تنظیم شود، در حالی که fvwm منتظر ماژول راهاندازیشده توسط \fBModuleSynchronous\fP برای تکمیل راهاندازی آن است، مکاننمای مشغول نمایش داده نمیشود.
.sp
گزینه \fIWait\fP فقط روی مکاننمای ریشه (root cursor) تأثیر میگذارد. در طول وقفه انتظار، مکاننمای ریشه با مکاننمای مشغول جایگزین میشود و fvwm همچنان کاملاً پاسخگو است (میتوانید از این وقفه خارج شوید، به دستور \fBEscapeFunc\fP مراجعه کنید). اگر میخواهید از این گزینه استفاده کنید و از مکاننمای پیشفرض ریشه استفاده نمیکنید، باید مکاننمای ریشه خود را با دستور \fBCursorStyle\fP تنظیم کنید.
.RE
.sp
\fBClickTime\fP [\fIdelay\fP]
.RS 4
حداکثر تاخیر بر حسب میلیثانیه بین فشردن یک کلید ماوس و رها کردن آن را تعیین میکند تا دستور \fBFunction\fP این کنش را به عنوان یک کلیک ماوس در نظر بگیرد. تاخیر پیشفرض ۱۵۰ میلیثانیه است. حذف مقدار تاخیر، \fBClickTime\fP را به مقدار پیشفرض بازمیگرداند.
.sp
همچنین ClickTime تاخیر بین دو کلیک را برای تفسیر به عنوان دابلکلیک (double\-click) مشخص میکند.
.RE
.sp
\fBColormapFocus\fP FollowsMouse | FollowsFocus
.RS 4
به طور پیشفرض، fvwm نقشه رنگ (colormap) پنجرهای را که مکاننما در آن قرار دارد نصب میکند. اگر از
.sp
.if n .RS 4
.nf
.fam C
ColormapFocus FollowsFocus
.fam
.fi
.if n .RE
.sp
استفاده کنید، نقشه رنگ نصبشده مربوط به پنجرهای خواهد بود که در حال حاضر فوکوس صفحهکلید را در اختیار دارد.
.RE
.sp
\fBCursorStyle\fP \fIcontext\fP [\fInum\fP | \fIname\fP | None | Tiny | \fIfile\fP [\fIx\fP \fIy\fP] [\fIfg\fP \fIbg\fP]]
.RS 4
یک مکاننمای جدید برای بافتار (context) مشخصشده تعریف میکند. توجه داشته باشید که این دستور نمیتواند شکلهایی را که یک برنامه برای مثال برای نشان دادن مشغول بودن خود استفاده میکند، کنترل کند. بافتارهای گوناگون عبارتند از:
.sp
\fIPOSITION\fP (top_left_corner)
.RS 4
هنگام جایگذاری اولیه پنجرهها استفاده میشود
.RE
.sp
\fITITLE\fP (top_left_arrow)
.RS 4
در نوار عنوان پنجره (title\-bar) استفاده میشود
.RE
.sp
\fIDEFAULT\fP (top_left_arrow)
.RS 4
در پنجرههایی استفاده میشود که مکاننمای خود را تعیین نکردهاند
.RE.sp
\fISYS\fP (hand2)
.RS 4
در یکی از دکمههای نوار عنوان استفاده میشود
.RE
.sp
\fIMOVE\fP (fleur)
.RS 4
هنگام جابهجایی یا تغییر اندازهٔ پنجرهها استفاده میشود
.RE
.sp
\fIRESIZE\fP (sizing)
.RS 4
هنگام جابهجایی یا تغییر اندازهٔ پنجرهها استفاده میشود
.RE
.sp
\fIWAIT\fP (watch)
.RS 4
در طول اجرای برخی دستورهای fvwm استفاده میشود (برای جزئیات \fBBusyCursor\fP را ببینید)
.RE
.sp
\fIMENU\fP (top_left_arrow)
.RS 4
در منوها استفاده میشود
.RE
.sp
\fISELECT\fP (crosshair)
.RS 4
هنگامی که نیاز است کاربر پنجرهای را انتخاب کند استفاده میشود
.RE
.sp
\fIDESTROY\fP (pirate)
.RS 4
برای دستورهای \fBDestroy\fP، \fBClose\fP و \fBDelete\fP استفاده میشود
.RE
.sp
\fITOP\fP (top_side)
.RS 4
در نوار کناری بالایی پنجره استفاده میشود
.RE
.sp
\fIRIGHT\fP (right_side)
.RS 4
در نوار کناری راست پنجره استفاده میشود
.RE
.sp
\fIBOTTOM\fP (bottom_side)
.RS 4
در نوار کناری پایینی پنجره استفاده میشود
.RE
.sp
\fILEFT\fP (left_side)
.RS 4
در نوار کناری چپ پنجره استفاده میشود
.RE
.sp
\fITOP_LEFT\fP (top_left_corner)
.RS 4
در گوشهٔ بالا و سمت چپ پنجره استفاده میشود
.RE
.sp
\fITOP_RIGHT\fP (top_right_corner)
.RS 4
در گوشهٔ بالا و سمت راست پنجره استفاده میشود
.RE
.sp
\fIBOTTOM_LEFT\fP (bottom_left_corner)
.RS 4
در گوشهٔ پایین و سمت چپ پنجره استفاده میشود
.RE
.sp
\fIBOTTOM_RIGHT\fP (bottom_right_corner)
.RS 4
در گوشهٔ پایین و سمت راست پنجره استفاده میشود
.RE
.sp
\fITOP_EDGE\fP (top_side)
.RS 4
در لبهٔ بالایی صفحه نمایش استفاده میشود
.RE
.sp
\fIRIGHT_EDGE\fP (right_side)
.RS 4
در لبهٔ راست صفحه نمایش استفاده میشود
.RE
.sp
\fIBOTTOM_EDGE\fP (bottom_side)
.RS 4
در لبهٔ پایینی صفحه نمایش استفاده میشود
.RE
.sp
\fILEFT_EDGE\fP (left_side)
.RS 4
در لبهٔ چپ صفحه نمایش استفاده میشود
.RE
.sp
\fIROOT\fP (left_ptr)
.RS 4
به عنوان مکاننمای ریشه استفاده میشود
.RE
.RE
.sp
مقادیر پیشفرض در پرانتزهای بالا نشان داده شدهاند. اگر بخواهید مکاننمای پیشفرض را برای زمینهای مشخص بازیابی کنید، میتوانید آرگومان دوم را حذف نمایید.
.sp
آرگومان دوم یا مقدار عددی مکاننما به صورتی است که در فایل سربرگ \fIX11/cursorfont.h\fP تعریف شده، یا نام آن (بدون پیشوند XC_). در غیر این صورت، میتوان نام فایل xpm را مشخص کرد. این نام همچنین میتواند \fINone\fP (بدون مکاننما) یا \fITiny\fP (یک تکپیکسل به عنوان مکاننما) باشد.
.sp
.if n .RS 4
.nf
.fam C
# make the kill cursor be XC_gumby (both forms work):
CursorStyle DESTROY 56
CursorStyle DESTROY gumby
.fam
.fi
.if n .RE
.sp
همچنین مکاننما میتواند از یک \fIfile\fP تصویر (XPM، PNG یا SVG) بارگذاری شود. اگر fvwm با پشتیبانی از Xcursor کامپایل شده باشد، ARGB کامل استفاده میشود و فایلهای مکاننمای ساختهشده با برنامهٔ \fBxcursorgen\fP (که احتمالاً متحرک هستند) میتوانند بارگذاری شوند. در غیر این صورت، مکاننما به تکرنگ تبدیل میشود.
.sp
آرگومانهای اختیاری \fIx\fP و \fIy\fP (پس از آرگومان \fIfile\fP) مختصات نقطهٔ کانونی (hot\-spot) را مشخص میکنند که در آن 0 0 گوشهٔ بالا و سمت چپ تصویر است. مختصات درون محدودهٔ تصویر معتبر بوده و بر هرگونه نقطهٔ کانونی تعریفشده در فایل تصویر (XPM/Xcursor) اولویت دارد. یک نقطهٔ کانونی نامعتبر یا تعریفنشده در مرکز تصویر قرار میگیرد.
.sp
.if n .RS 4
.nf
.fam C
CursorStyle ROOT cursor_image.png 0 0
.fam
.fi
.if n .RE
.sp
آرگومانهای اختیاری \fIfg\fP و \fIbg\fP رنگهای پیشزمینه و پسزمینه را برای مکاننما مشخص میکنند که پیشفرض آنها سیاه و سفید است (تصویر معکوس در مقایسه با تصویر بیتیِ واقعی). این رنگها تنها برای مکاننماهای تکرنگ استفاده میشوند؛ در غیر این صورت بدون اعلام خطا نادیده گرفته میشوند.
.sp
.if n .RS 4
.nf
.fam C
CursorStyle ROOT nice_arrow.xpm yellow black
.fam
.fi
.if n .RE
.sp
\fBDefaultFont\fP [\fIfontname\fP]
.RS 4
دستور \fBDefaultFont\fP قلم پیشفرض را روی قلم \fIfontname\fP تنظیم میکند. این قلم پیشفرض هر زمان که هیچ قلم دیگری توسط fvwm مشخص نشده باشد، به کار میرود. برای بازنشانی قلم پیشفرض به مقدار توکار، آرگومان را حذف کنید. قلم پیشفرض برای منوها، عنوان پنجرهها، عنوان آیکونها و همچنین پنجرههای بازخورد هندسی در طول عملیات جابهجایی یا تغییر اندازه استفاده میشود. برای نادیده گرفتن قلم پیشفرض در زمینهای مشخص، از دستورهای \fBStyle\fP * \fIFont\fP، \fBStyle\fP * \fIIconFont\fP یا \fBMenuStyle\fP استفاده کنید.
.RE
.sp
\fBDefaultIcon\fP \fIfilename\fP
.RS 4
آیکون پیشفرضی را تنظیم میکند که اگر پنجرهای نه آیکون ارائهشده توسط کلاینت و نه آیکون ارائهشده از طریق گزینهٔ \fIIcon\fP از دستور \fBStyle\fP را داشته باشد، استفاده میشود.
.RE
.sp
\fBDefaultLayers\fP \fIbottom\fP \fIput\fP \fItop\fP
.RS 4
لایههایی را که برای گزینههای \fBStyle\fP شامل \fIStaysOnBottom\fP، \fIStaysPut\fP و \fIStaysOnTop\fP استفاده میشوند، تغییر میدهد. در ابتدا لایههای 2، 4 و 6 استفاده میشوند.
.RE
.sp
\fBDeschedule\fP [\fIcommand_id\fP]
.RS 4
تمام دستورهایی را که با شناسهٔ \fIcommand_id\fP توسط دستور \fBSchedule\fP زمانبندی شده بودند، از فهرست دستورهای در انتظار اجرا حذف میکند، مگر اینکه قبلاً اجرا شده باشند. اگر \fIcommand_id\fP حذف شود، مقدار متغیر $[schedule.last] به عنوان شناسه استفاده میشود.
.RE.sp
\fBEmulate\fP Fvwm | Mwm | Win
.RS 4
این دستور روشی جامع برای تعیین چگونگی انجام کارهای متفرقه توسط fvwm است. در حال حاضر این دستور بر محل نمایش پنجره بازخورد جابهجایی/تغییر اندازه و چگونگی لغو جایگذاری پنجره تأثیر میگذارد. برای داشتن رفتاری شبیهتر به Mwm یا Win میتوانید \fBEmulate\fP را با آرگومان \fIMwm\fP یا \fIWin\fP فراخوانی کنید. با Mwm پنجرههای بازخورد تغییر اندازه و جابهجایی به جای گوشه بالا سمت چپ، در مرکز صفحه نمایش قرار میگیرند. این امر همچنین بر چگونگی لغو جایگذاری دستی تأثیر میگذارد. توضیحات \fIManualPlacement\fP را ببینید.
.RE
.sp
\fBEscapeFunc\fP
.RS 4
بهطور پیشفرض توالی کلید Ctrl\-Alt\-Escape امکان خروج از مکث \fBWait\fP و از یک دستور قفلشده \fBModuleSynchronous\fP را فراهم میکند. دستور \fBEscapeFunc\fP که همراه با دستور \fBKey\fP استفاده میشود امکان پیکربندی این توالی کلید را میدهد. یک مثال:
.sp
.if n .RS 4
.nf
.fam C
Key Escape A MC \-
Key Escape A\& S EscapeFunc
.fam
.fi
.if n .RE
.sp
توالی کلید Ctrl\-Alt\-Escape را با Shift\-Escape برای لغو مکث \fBWait\fP و دستور \fBModuleSynchronous\fP جایگزین میکند. استفاده از \fBEscapeFunc\fP خارج از دستور \fBKey\fP هیچ کاری انجام نمیدهد.
.RE
.sp
\fBFakeClick\fP [\fIcommand\fP \fIvalue\fP] .\|.\|.
.RS 4
این دستور عمدتاً برای اشکالزدایی fvwm در نظر گرفته شده است و هیچ تضمینی وجود ندارد که برای شما کار کند. \fIFakeClick\fP میتواند رویدادهای فشردن و رها کردن دکمه ماوس را شبیهسازی کرده و آنها را به fvwm یا برنامههای کاربردی ارسال کند. پارامترها فهرستی از دستورات هستند که از جفتهای نشانههای \fIcommand\fP و مقادیر صحیح (\fIvalues\fP) تشکیل شدهاند. پس از دستورات \fIpress\fP و \fIrelease\fP، شماره دکمه ماوس مناسب میآید و یک رویداد فشردن یا رها کردن دکمه را روی پنجره زیر اشارهگر ایجاد میکنند. دستور \fIwait\fP اجرای fvwm را به مدت زمان دادهشده بر حسب میلیثانیه متوقف میکند. دستور \fImodifiers\fP فشردن یا رها کردن کلیدهای تبدیلگر (modifier) را شبیهسازی میکند. مقادیر ۱ تا ۵ به Mod1 تا Mod5 نگاشت میشوند در حالی که ۶، ۷ و ۸ به Shift، Lock و Control نگاشت شدهاند. کلید تبدیلگر برای رویدادهای بعدی دکمه تنظیم میشود. برای رها کردن کلید تبدیلگر، از عدد منفی متناظر استفاده کنید. دستور \fIdepth\fP مشخص میکند که رویدادهای دکمه به کدام پنجره ارسال شوند. با عمق ۱، همه رویدادها بدون در نظر گرفتن موقعیت اشارهگر به پنجره ریشه (root window) میروند. با ۲، رویداد به پنجره سطح بالایی زیر اشارهگر که معمولاً پنجره فریم است ارسال میشود. با ۳، رویدادها به پنجره کلاینت میروند. اعداد بزرگتر به زیرپنجرههای متوالی بعدی میروند. صفر (0) به کوچکترین پنجرهای که حاوی اشارهگر است ارسال میشود. توجه داشته باشید که رویدادها به سمت بالا انتشار مییابند.
.sp
.if n .RS 4
.nf
.fam C
FakeClick depth 2 press 1 wait 250 release 1
.fam
.fi
.if n .RE
.sp
این دستور یک کلیک با دکمه ۱ را در پنجره والد (عمق ۲) با تأخیر ۲۵۰ میلیثانیه بین فشردن و رها کردن شبیهسازی میکند.
نکته: تمام نامهای دستورات را میتوان با اولین حرف آنها خلاصه کرد.
.RE
.sp
\fBFakeKeypress\fP [\fIcommand\fP \fIvalue\fP] .\|.\|.
.RS 4
این دستور عمدتاً برای اشکالزدایی fvwm در نظر گرفته شده است و هیچ تضمینی وجود ندارد که برای شما کار کند. \fBFakeKeypress\fP میتواند رویدادهای فشردن و رها کردن کلید را شبیهسازی کرده و آنها را به fvwm یا برنامههای کاربردی ارسال کند. پارامترها فهرستی از دستورات هستند که از جفتهای نشانههای دستور و مقادیر تشکیل شدهاند. پس از دستورات \fIpress\fP و \fIrelease\fP یک نام کلید میآید. نام کلید یک نام استاندارد کلید X11 است، همانطور که در \fI/usr/include/X11/keysymdef.h\fP (بدون پیشوند \fIXK_\fP) یا در پایگاه داده keysym در \fI/usr/X11R6/lib/X11/XKeysymDB\fP تعریف شده است. دستورات \fIwait\fP، \fImodifiers\fP و \fIdepth\fP همانند موارد استفاده شده توسط \fBFakeClick\fP هستند.
.sp
ذخیره تمام نشستهای GVim با: "Esc:w\(rsn"
.sp
.if n .RS 4
.nf
.fam C
All (gvim) FakeKeypress press Escape \(rs
press colon \(rs
press w \(rs
press Return
.fam
.fi
.if n .RE
.sp
ذخیره و خروج از تمام نشستهای GVim با: "Esc:wq\(rsn"
.sp
.if n .RS 4
.nf
.fam C
All (gvim) FakeKeypress press Escape \(rs
press colon \(rs
press w \(rs
press q \(rs
press Return
.fam
.fi
.if n .RE
.sp
ارسال A به یک پنجره خاص:
.sp
.if n .RS 4
.nf
.fam C
WindowId 0x3800002 FakeKeypress press A
.fam
.fi
.if n .RE
.sp
نکته: تمام نامهای دستورات را میتوان با اولین حرف آنها خلاصه کرد.
.RE
.sp
\fBImagePath\fP \fIpath\fP
.RS 4
فهرستی جدا شده با دونقطه از دایرکتوریها را برای جستجوی تصاویر (هم تصاویر تکرنگ و هم pixmap) مشخص میکند. برای یافتن تصویری که با یک نام مسیر نسبی مشخص شده است، fvwm هر دایرکتوری فهرستشده را به نوبت بررسی میکند و از اولین فایل پیدا شده استفاده میکند.
.sp
اگر دایرکتوری به صورت "/some/dir;.ext" مشخص شود، به این معنی است که تمام تصاویر موجود در این دایرکتوری دارای پسوند ".ext" هستند که باید اعمال شود. نام اصلی تصویر (که ممکن است حاوی پسوند دیگری باشد یا اصلاً پسوندی نداشته باشد) بررسی نمیشود، بلکه ".ext" به آن اضافه میشود یا جایگزین پسوند اصلی میگردد. این قابلیت به عنوان مثال زمانی مفید است که کاربر دایرکتوریهایی از تصاویر با پسوند ".xpm" و دایرکتوریهای دیگری با همان نامها اما با تصاویر ".png" داشته باشد.
.sp
متغیر \fIpath\fP میتواند شامل متغیرهای محیطی مانند \fI$HOME\fP (یا \fI${HOME}\fP) باشد. علاوه بر این، یک \*(Aq+\*(Aq در \fIpath\fP به مقدار قبلی مسیر گسترش مییابد، که امکان افزودن آسان به ابتدا یا انتهای مسیر را فراهم میسازد.
.sp
به عنوان مثال:
.sp
.if n .RS 4
.nf
.fam C
ImagePath $HOME/icons:+:/usr/include/X11/bitmaps
.fam
.fi
.if n .RE
.RE
.sp
\fBLocalePath\fP \fIpath\fP
.RS 4
فهرستی جدا شده با دونقطه از "مسیرهای محلی" (locale path) را مشخص میکند که در آنها ترجمههای رشتهها جستجو شود. یک مسیر محلی متشکل از یک مسیر دایرکتوری و یک دامنه متنی است که با یک نقطه ویرگول (\*(Aq;\*(Aq) از هم جدا شدهاند. به عنوان مثال، مسیر محلی پیشفرض عبارت است از:
.sp
.if n .RS 4
.nf
.fam C
/install_prefix/share/locale;fvwm
.fam
.fi
.if n .RE
.sp
که در آن install_prefix دایرکتوری محل نصب fvwm است. با چنین مسیر محلی، ترجمهها در این مسیر جستجو میشوند:
.sp
.if n .RS 4
.nf
.fam C
/install_prefix/share/locale/lang/LC_MESSAGES/fvwm.mo
.fam
.fi
.if n .RE
.sp
که در آن \fIlang\fP به لوکال (locale) بستگی دارد. اگر هیچ دایرکتوری مشخص نشود، مسیر دایرکتوری پیشفرض در نظر گرفته میشود. اگر هیچ دامنه متنی مشخص نشود، \fBfvwm\fP فرض میشود. بدون آرگومان، مسیر محلی پیشفرض بازیابی میشود..sp
همانند دستور \fBImagePath\fP، \fIpath\fP میتواند حاوی متغیرهای محیطی
و علامت \*(Aq+\*(Aq برای افزودن آسان مسیر محلی به انتها یا ابتدای آن باشد.
.sp
برای نمونه، بسته fvwm\-themes از دستور زیر استفاده میکند:
.sp
.if n .RS 4
.nf
.fam C
LocalePath ";fvwm\-themes:+"
.fam
.fi
.if n .RE
.sp
تا کاتالوگهای محلی (locale catalogs) را اضافه کند.
.sp
کاتالوگ پیشفرض fvwm شامل چند رشته است که توسط خود فایل اجرایی fvwm
استفاده میشوند (مانند Desk و Geometry) و رشتههایی که در برخی فایلهای
پیکربندی پیشفرض و پیکربندی \fBFvwmForm\fP به کار رفتهاند. میتوانید
به زیرپوشه po/ در سورسکد fvwm نگاهی بیندازید تا فهرست رشتهها را به همراه
ترجمههای احتمالی به زبانهای گوناگون به دست آورید. در حال حاضر،
زبانهای بسیار کمی پشتیبانی میشوند.
.sp
کاربرد اصلی کاتالوگهای محلی از طریق پارامتر "$[gt.string]" است:
.sp
.if n .RS 4
.nf
.fam C
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
.fam
.fi
.if n .RE
.sp
در صورت در دسترس بودن ترجمهها، منویی به زبانهای محلی ارائه میدهد.
.sp
توجه داشته باشید که ماژول \fBFvwmScript\fP دارای مجموعهای از دستورالعملهای
ویژه برای ترجمه رشتهها است. توضیح نحوه ساخت کاتالوگهای محلی خارج از
حیطه این بحث است. لطفاً به مستندات GNU gettext مراجعه کنید.
.RE
.sp
\fBPrintInfo\fP \fIsubject\fP [\fIverbose\fP]
.RS 4
اطلاعات مربوط به \fIsubject\fP را در فایل گزارش اشکالزدایی چاپ میکند، که به طور
پیشفرض \fI$HOME/.fvwm/fvwm3\-output.log\fP است. متغیرهای محیطی \fI$FVWM_USERDIR\fP
و \fI$FVWM3_LOGFILE\fP میتوانند این پیشفرض را تغییر دهند. برای نوشته شدن در این
فایل گزارش، یا باید fvwm3 با گزینه \fB\-v\fP راهاندازی شود یا میتوان از سیگنال
\fBSIGUSR2\fP برای تغییر وضعیت باز یا بسته بودن فایل گزارش اشکالزدایی استفاده کرد.
.sp
یک آرگومان اختیاری عدد صحیح در فایل گزارش اشکالزدایی، که پیشفرض آن
\fI$HOME/.fvwm/fvwm3\-output.log\fP است. متغیرهای محیطی \fI$FVWM_USERDIR\fP
و \fI$FVWM3_LOGFILE\fP میتوانند این پیشفرض را تغییر دهند. برای نوشته شدن در این
فایل گزارش، یا باید fvwm3 با گزینه \fB\-v\fP راهاندازی شود یا میتوان از سیگنال
\fBSIGUSR2\fP برای تغییر وضعیت باز یا بسته بودن فایل گزارش اشکالزدایی استفاده کرد.
.sp
یک آرگومان اختیاری عدد صحیح \fIverbose\fP سطح اطلاعات ارائهشده را مشخص
میکند. موضوعات معتبر کنونی عبارتند از:
.sp
\fIColors\fP که اطلاعات مربوط به رنگهای استفادهشده توسط fvwm را چاپ میکند.
این مورد در نمایشگرهایی که فقط میتوانند ۲۵۶ رنگ (یا کمتر) را به طور همزمان نمایش دهند
مفید است. اگر \fIverbose\fP یک یا بیشتر باشد، پالت رنگ مورد استفاده fvwm چاپ میشود.
اگر پالت رنگ محدودی دارید و ظرفیت رنگهایتان تمام شده است، این دستور میتواند مفید باشد.
.sp
\fIImageCache\fP که اطلاعات مربوط به تصاویر بارگذاریشده توسط fvwm را چاپ میکند.
اگر \fIverbose\fP یک یا بیشتر باشد، تمام تصاویر موجود در حافظه پنهان همراه با
میزان استفاده مجدد هر یک فهرست میشوند.
.sp
\fILocale\fP که اطلاعات مربوط به locale شما و قلمهایی که fvwm استفاده کرده است را
چاپ میکند. مقدار \fIverbose\fP میتواند ۱ یا ۲ باشد.
.sp
\fInls\fP که اطلاعات مربوط به کاتالوگهای محلی مورد استفاده fvwm را چاپ میکند.
.sp
\fIbindings\fP که اطلاعات تمام مقیدسازیهای موجود در fvwm را چاپ میکند: مقیدسازیهای
کلید و ماوس. مقدار \fIverbose\fP هیچ تأثیری روی این گزینه ندارد.
.sp
\fIinfostore\fP که اطلاعات تمام ورودیهای موجود در infostore را چاپ کرده و کلید و
مقدار آن را فهرست میکند. مقدار \fIverbose\fP هیچ تأثیری روی این گزینه ندارد.
.RE
.sp
\fBSchedule\fP [\fIPeriodic\fP] \fIdelay_ms\fP [\fIcommand_id\fP] \fIcommand\fP
.RS 4
دستور \fIcommand\fP پس از حدود \fIdelay_ms\fP میلیثانیه اجرا میشود. این قابلیت
ممکن است در برخی تنظیمات پیچیده مفید باشد. دستور \fIcommand\fP در همان پنجره زمینهای
که دستور \fBSchedule\fP در آن بوده است، اجرا میشود. یک آرگومان عددی اختیاری
\fIcommand_id\fP میتواند در قالب دهدهی، شانزدهشانزدهی یا هشتهشتی ارائه شود.
از این شناسه میتوان همراه با دستور \fBDeschedule\fP استفاده کرد تا دستور
زمانبندیشده پیش از اجرا لغو شود. اگر شناسهای مشخص نشود، fvwm از شناسههای
عددی منفی استفاده میکند که از \-1 شروع شده و با هر بار استفاده از دستور
\fBSchedule\fP یک واحد کاهش مییابند. توجه داشته باشید که دستور \fBSchedule\fP و
آرگومانهای آن تحت گسترش معمول خط فرمان قرار میگیرند، و هنگامی که در نهایت
\fIcommand\fP اجرا میشود، مجدداً گسترش مییابد. بنابراین ممکن است لازم باشد
بخشهایی از دستور را که نباید دو بار گسترش یابند درون کوتیشن قرار دهید.
.sp
نکته: شناسه پنجره که از طریق $[w.id] برگردانده میشود را میتوان به عنوان
\fIcommand_id\fP استفاده کرد. مثال:
.sp
.if n .RS 4
.nf
.fam C
Current Schedule 1000 $[w.id] WindowShade
.fam
.fi
.if n .RE
.sp
دستور \fBSchedule\fP همچنین از کلیدواژه اختیاری \fIPeriodic\fP پشتیبانی میکند
که مشخص میکند \fIcommand\fP باید هر \fIdelay_ms\fP یکبار اجرا شود. مثال:
.sp
.if n .RS 4
.nf
.fam C
Schedule Periodic 10000 PipeRead \*(Aq[ \-N "$MAIL" ] && echo \(rs
Echo You have mail\*(Aq
.fam
.fi
.if n .RE
.sp
برای متوقف کردن دستورات دورهای از دستور \fBDeschedule\fP استفاده کنید.
.RE
.sp
\fBState\fP \fIstate\fP [\fIbool\fP]
.RS 4
یکی از ۳۲ وضعیت تعریفشده توسط کاربر را که به هر پنجره اختصاص دارد تنظیم،
پاک یا معکوس (toggle) میکند. مقدار \fIstate\fP عددی از ۰ تا ۳۱ است. این وضعیتها
هیچ معنای خاصی در fvwm ندارند، اما میتوان آنها را در دستورات شرطی مانند
\fBNext\fP همراه با شرط \fIState\fP بررسی کرد. آرگومان اختیاری \fIbool\fP یک آرگومان
بولی است. مقدار "True" وضعیت مشخصشده را فعال کرده، در حالی که "False" آن را پاک میکند.
استفاده از "toggle" وضعیت را معکوس میکند. اگر آرگومان \fIbool\fP داده نشود، وضعیت
معکوس میشود.
.RE
.sp
\fBWindowList\fP [(\fIconditions\fP)] [\fIposition\fP] [\fIoptions\fP] [\fIdouble\-click\-action\fP]
.RS 4
یک منوی بازشو تولید کرده (و آن را نمایش میدهد) که در آن عنوان و هندسه (geometry)
هر یک از پنجرههایی که در حال حاضر روی میزکار هستند نشان داده میشود.
.sp
قالب بخش هندسه به این صورت است: \fIdesk\fP(\fIlayer\fP): \fIx\-geometry\fP
\fIsticky\fP، که در آن \fIdesk\fP و \fIlayer\fP شمارههای متناظر بوده و
\fIsticky\fP خالی یا حرف بزرگ S است. هندسه پنجرههای آیکونشده داخل پرانتز
نمایش داده میشود. انتخاب یک مورد از منوی بازشوی فهرست پنجرهها باعث اجرای
تابع تفسیرشده "WindowListFunc" میشود که شناسه پنجره مربوطه به عنوان $0 به آن
ارسال شده است. تابع پیشفرض "WindowListFunc" به این صورت است:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc WindowListFunc
+ I Iconify off
+ I FlipFocus
+ I Raise
+ I WarpToWindow 5p 5p
.fam
.fi
.if n .RE
.sp
اگر این مقادیر پیشفرض برای شما مناسب نیستند، میتوانید "WindowListFunc"
پیشساخته را حذف کرده و تابع مورد نظر خود را ایجاد کنید.
.sp
منوی فهرست پنجره در صورت تعریف شدن از سبک منوی "WindowList" استفاده میکند
(دستور \fBMenuStyle\fP را ببینید). در غیر این صورت از سبک منوی پیشفرض استفاده
خواهد شد. برای بازگشت به سبک منوی پیشفرض، دستور زیر را اجرا کنید:
.sp
.if n .RS 4
.nf
.fam C
DestroyMenuStyle WindowList
.fam
.fi
.if n .RE.sp
مثال:
.sp
.if n .RS 4
.nf
.fam C
MenuStyle WindowList SelectOnRelease Meta_L
.fam
.fi
.if n .RE
.sp
از \fIconditions\fP (شرایط) میتوان برای مستثنی کردن پنجرههای خاصی از فهرست پنجرهها استفاده کرد. لطفاً برای جزئیات به دستور \fBCurrent\fP مراجعه کنید. تنها پنجرههایی که با شرایط دادهشده مطابقت داشته باشند در فهرست پنجرهها نمایش داده میشوند. \fIoptions\fP (گزینهها) در زیر به صورت عکس عمل میکنند: پنجرههایی که در غیر این صورت در فهرست پنجرهها قرار نمیگرفتند را میتوان با آنها انتخاب کرد. \fIconditions\fP همواره بر \fIoptions\fP ارجحیت دارد.
.sp
آرگومانهای \fIposition\fP همانند دستور \fBMenu\fP هستند. در صورتی که کاربر هنگام باز کردن فهرست پنجرهها دوبار کلیک کند (یا اگر منو به یک کلید مقید شده باشد، کلید را سریعاً دو بار فشار دهد)، دستور \fIdouble\-click\-action\fP فراخوانی میشود. اگر \fIdouble\-click\-action\fP از بیش از یک کلمه تشکیل شده باشد، باید داخل نقلقول قرار گیرد.
.sp
دستور \fIdouble\-click\-action\fP برای تعریف یک پنجرهٔ پیشفرض در صورتی که فهرست پنجرهها را مانند زیر به یک کلید (یا دکمه) مقید کرده باشید، مفید است:
.sp
.if n .RS 4
.nf
.fam C
# 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"
.fam
.fi
.if n .RE
.sp
فشردن یکبارهٔ Alt\-Tab فهرست پنجرهها را بالا میآورد؛ اگر آن را دو بار فشار دهید، فوکوس بین پنجرهٔ فعلی و آخرین پنجرهٔ فوکوسشده جابهجا میشود. با سبک منوی مناسب \fISelectOnRelease\fP (مثال بالا را ببینید) به محض رها کردن کلید Alt، یک پنجره انتخاب میشود.
.sp
گزینههای \fIoptions\fP که به WindowList ارسال میشوند با ویرگول از هم جدا شده و میتوانند شامل موارد زیر باشند:
\fIGeometry\fP / \fINoGeometry\fP / \fINoGeometryWithInfo\fP، \fINoDeskNum\fP،
\fINoLayer\fP، \fINoNumInDeskTitle\fP، \fINoCurrentDeskTitle\fP، \fIMaxLabelWidth
width\fP، \fITitleForAllDesks\fP، \fIFunction funcname\fP، \fIDesk desknum\fP،
\fICurrentDesk\fP، \fINoIcons\fP / \fIIcons\fP / \fIOnlyIcons\fP، \fINoNormal\fP /
\fINormal\fP / \fIOnlyNormal\fP، \fINoSticky\fP / \fISticky\fP / \fIOnlySticky\fP،
\fINoStickyAcrossPages\fP / \fIStickyAcrossPages\fP / \fIOnlyStickyAcrossPages\fP،
\fINoStickyAcrossDesks\fP / \fIStickyAcrossDesks\fP / \fIOnlyStickyAcrossDesks\fP،
\fINoOnTop\fP / \fIOnTop\fP / \fIOnlyOnTop\fP، \fINoOnBottom\fP / \fIOnBottom\fP /
\fIOnlyOnBottom\fP، \fILayer m [n]\fP، \fIUseSkipList\fP / \fIOnlySkipList\fP،
\fINoDeskSort\fP، \fIReverseOrder\fP، \fICurrentAtEnd\fP، \fIIconifiedAtEnd\fP،
\fIUseIconName\fP، \fIAlphabetic\fP / \fINotAlphabetic\fP، \fISortByResource\fP،
\fISortByClass\fP، \fINoHotkeys\fP، \fISelectOnRelease\fP، \fIShowPage\fP، \fIShowPageX\fP،
\fIShowPageY\fP، \fIShowScreen\fP.
.sp
(توجه \- واژهٔ normal به معنی غیرشمایلی، غیرچسبان یا روی بقیه نبودن است)
.sp
با گزینهٔ \fISortByResource\fP پنجرهها بر اساس حروف الفبا ابتدا بر اساس ردهٔ منبع (resource class)، سپس بر اساس نام منبع (resource name) و در نهایت بر اساس نام پنجره (یا نام شمایل در صورت تعیین \fIUseIconName\fP) مرتب میشوند. \fIReverseOrder\fP نیز به همان شیوهٔ مورد انتظار عمل میکند.
.sp
با گزینهٔ \fISortByClass\fP پنجرهها دقیقاً مانند \fISortByResource\fP مرتب میشوند، با این تفاوت که نام منبع نادیده گرفته شده و تنها ردهٔ منبع لحاظ میشود.
.sp
گزینهٔ \fISelectOnRelease\fP دقیقاً مانند گزینهٔ همنام در \fBMenuStyle\fP عمل میکند، اما بر گزینهٔ ارائهشده در سبک منو ارجحیت دارد. بهطور پیشفرض، این گزینه روی کلید سمت چپ
.sp
تنظیم شده است. برای غیرفعال کردن آن، از \fISelectOnRelease\fP بدون نام کلید استفاده کنید.
.sp
اگر تابعی را از طریق \fBFunction\fP funcname ارسال کنید، در بستر پنجرهٔ انتخابشده فراخوانی میشود:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc IFunc I Iconify toggle
WindowList Function IFunc, NoSticky, CurrentDesk, NoIcons
.fam
.fi
.if n .RE
.sp
اگر از گزینهٔ \fILayer\fP \fIm\fP [\fIn\fP] استفاده کنید، تنها پنجرههای موجود در لایههای بین m و n نمایش داده میشوند. مقدار پیشفرض n برابر با m است. با گزینهٔ \fIReverseOrder\fP، ترتیب پنجرهها در فهرست معکوس میشود.
.sp
با گزینهٔ \fICurrentAtEnd\fP، پنجرهای که هماکنون دارای فوکوس است (در صورت وجود) در انتهای فهرست نمایش داده میشود. این گزینه عمدتاً برای شبیهسازی رفتار Alt\-Tab در رابطهای گرافیکی دیگر در نظر گرفته شده است.
.sp
گزینهٔ \fIIconifiedAtEnd\fP باعث میشود پنجرههای کوچکشده (آیکونشده) به انتهای فهرست منتقل شوند. این ویژگی نیز برگرفته از یک رابط گرافیکی دیگر است.
.sp
گزینهٔ \fINoGeometry\fP باعث میشود fvwm ابعاد و مختصات (geometries) و همچنین جداکنندههای نشاندهندهٔ میزکارهای مختلف را نمایش ندهد. \fINoGeometryWithInfo\fP ابعاد و مختصات را حذف میکند، اما اطلاعات میزکار را نگه داشته و پنجرههای آیکونشده را مشخص میکند. \fINoDeskNum\fP باعث میشود fvwm شمارهٔ میزکار را در ابعاد یا قبل از عنوان پنجره در گزینهٔ \fINoGeometryWithInfo\fP نمایش ندهد. \fINoNumInDeskTitle\fP تنها زمانی کاربرد دارد که نام میزکار با دستور \fBDesktopName\fP تعریف شده باشد؛ این گزینه باعث میشود fvwm شمارهٔ میزکار را قبل از نام میزکار نمایش ندهد. بهطور پیشفرض، منوی WindowList دارای عنوانی است که میزکار جاری یا میزکار انتخابشده (در صورت استفاده از شرط \fIDesk\fP) را نشان میدهد. گزینهٔ \fINoCurrentDeskTitle\fP این عنوان را حذف میکند. \fITitleForAllDesks\fP باعث میشود fvwm یک عنوان منو به همراه نام و/یا شمارهٔ میزکار قبل از هر گروه از پنجرههای موجود در همان میزکار اضافه کند. با \fINoLayer\fP، لایهٔ پنجره نمایش داده نمیشود. گزینههای \fIShowPage\fP، \fIShowPageX\fP و \fIShowPageY\fP امکان نمایش صفحهٔ پنجره را بهصورت مضارب گردشده از اندازهٔ صفحهٔ نمایش فراهم میکنند. با \fIShowScreen\fP، نام صفحهٔ نمایش پنجره نشان داده میشود.
.sp
گزینهٔ \fIMaxLabelWidth\fP تعداد نویسههایی که باید چاپ شوند را به عنوان آرگومان دریافت میکند. بیش از این تعداد نویسه از نام پنجره قابل مشاهده نخواهد بود.
.sp
اگر بخواهید از \fBWindowList\fP به عنوان یک مدیریتکنندهٔ شمایل (icon manager) استفاده کنید، میتوانید دستور زیر را فراخوانی کنید:
.sp
.if n .RS 4
.nf
.fam C
WindowList OnlyIcons, Sticky, OnTop, Geometry
.fam
.fi
.if n .RE
.sp
(توجه \- گزینههای \fIOnly\fP اساساً تمامی گزینههای دیگر را نادیده میگیرند.\|.\|. به جز گزینهٔ \fIOnlyListSkip\fP که تنها باعث میشود \fBWindowList\fP فقط پنجرههای دارای سبک \fIWindowListSkip\fP را در نظر بگیرد.)
.RE
.sp
\fBXSync\fP
.RS 4
هنگامی که \fBXSync\fP فراخوانی میشود، از تابع همنام X برای ارسال تمام درخواستهای معلق X به کارگزار استفاده میشود. این دستور فقط برای اشکالزدایی در نظر گرفته شده است.
.RE
.sp
\fBXSynchronize\fP [bool]
.RS 4
دستور \fBXSynchronize\fP کنترل میکند که آیا درخواستهای X بلافاصله به کارگزار X ارسال شوند یا خیر. معمولاً درخواستها در دستههای بزرگتر فرستاده میشوند تا از ارتباطات غیرضروری جلوگیری شود. برای ارسال فوری درخواستها، از "True" به عنوان آرگومان استفاده کنید؛ برای غیرفعال کردن آن از "False" و برای تغییر وضعیت میان هر دو روش از "Toggle" استفاده نمایید یا آرگومان \fBbool\fP را حذف کنید. Fvwm در صورت اجرا با گزینهٔ \fB\-\-debug\fP بهطور پیشفرض درخواستها را همگامسازی میکند. این دستور فقط برای اشکالزدایی در نظر گرفته شده است.
.RE
.sp
\fB+\fP
.RS 4
برای ادامهٔ افزودن به آخرین دکور (decor)، تابع (function) یا منوی (menu) مشخصشده استفاده میشود. توضیحات مربوط به \fBAddToDecor\fP، \fBAddToFunc\fP و \fBAddToMenu\fP را ببینید.
.RE.SS "جابهجایی و جایگذاری پنجره (Window Movement and Placement)"
.sp
\fBAnimatedMove\fP \fIx\fP \fIy\fP [Warp]
.RS 4
پنجره را به صورت پویانماییشده جابهجا میکند. شبیه به دستور \fBMove\fP است.
گزینهها یکسان هستند، با این تفاوت که در اینجا اجباری میباشند، زیرا جابهجایی
پنجره توسط کاربر به صورت تعاملی و همزمان متحرکسازیشده معنایی ندارد. اگر
آرگومان اختیاری \fIWarp\fP مشخص شده باشد، اشارهگر همراه با پنجره منتقل میشود.
.RE
.sp
\fBGeometryWindow\fP Hide | Show | Colorset \fIn\fP | Position \fIx\fP \fIy\fP | Screen \fIS\fP
.RS 4
پنجرهٔ نمایش موقعیت یا اندازه (geometry window) را که معمولاً هنگام جابهجایی
یا تغییر اندازهٔ تعاملی یک پنجره نشان داده میشود، پیکربندی میکند. این دستور میتواند
برای پنهان کردن، نمایش دادن، تغییر مجموعهرنگ (colorset)، تغییر مکان یا تغییر
صفحهٔ پنجرهٔ هندسه به کار رود. میتوان چندین گزینه را همزمان با فاصله از یکدیگر
تنظیم کرد. جزئیات هر گزینه در ادامه شرح داده شده است.
.sp
.if n .RS 4
.nf
.fam C
GeometryWindow Hide [Never | Move | Resize]
.fam
.fi
.if n .RE
.sp
پنجرهٔ هندسه را پنهان یا خاموش میکند. اگر پارامترهای اختیاری \fIMove\fP یا
\fIResize\fP داده شوند، تنها در طول عملیات مربوطه پنجرهٔ هندسه را پنهان میکند.
پارامتر \fINever\fP نمایش پنجرهٔ هندسه را دوباره فعال میکند (معادل \fIShow\fP).
.sp
.if n .RS 4
.nf
.fam C
GeometryWindow Show [Never | Move | Resize]
.fam
.fi
.if n .RE
.sp
پنجرهٔ هندسه را نمایش داده یا روشن میکند (معادل \fIHide Never\fP). اگر
پارامترهای اختیاری \fIMove\fP یا \fIResize\fP داده شوند، پنجرهٔ هندسه تنها
در طول عملیات مربوطه نشان داده میشود. پارامتر \fINever\fP پنجرهٔ هندسه را
خاموش میکند (معادل \fIHide\fP).
.sp
.if n .RS 4
.nf
.fam C
GeometryWindow Colorset _cset_
.fam
.fi
.if n .RE
.sp
مجموعهرنگ (colorset) پنجرهٔ هندسه را روی \fIcset\fP تنظیم میکند. از گزینهٔ صریح
\fIdefault\fP برای \fIcset\fP استفاده کنید تا مجموعهرنگ پیشفرض به کار گرفته شود.
.sp
.if n .RS 4
.nf
.fam C
GeometryWindow Position [+|\-]_x_[p] [+|\-]_y_[p]
.fam
.fi
.if n .RE
.sp
موقعیتی را که پنجرهٔ هندسه در آن ظاهر میشود پیکربندی میکند. \fIx\fP و \fIy\fP
مختصات نسبی بر حسب درصدی از اندازهٔ صفحه هستند. اگر یک \*(Aq\-\*(Aq در ابتدا قرار گیرد،
مختصات به ترتیب از چپ/پایین صفحه محاسبه میشوند. اگر یک \*(Aqp\*(Aq به انتهای مختصات
افزوده شود، آنها به عنوان تعداد پیکسلها از لبهٔ مربوطهٔ صفحه تفسیر میشوند. اگر هیچ آرگومان
موقعیتی داده نشود، موقعیت پنجرهٔ هندسه به حالت پیشفرض خود یعنی گوشهٔ بالا سمت چپ، یا
در صورت شبیهسازی MWM به مرکز صفحه بازمیگردد.
.sp
.if n .RS 4
.nf
.fam C
GeometryWindow Screen _RANDRNAME_
.fam
.fi
.if n .RE
.sp
مشخص میکند که پنجرهٔ هندسه در کدام صفحه نمایش داده شود. به طور پیشفرض پنجرهٔ
هندسه در صفحهٔ جاری نشان داده میشود. اگر یک \fIRANDRNAME\fP معتبر مشخص شود،
پنجرهٔ هندسه همواره در آن صفحه نمایش خواهد یافت. از \fIcurrent\fP به عنوان
\fIRANDRNAME\fP استفاده کنید تا به حالت پیشفرض بازگردد.
.sp
مثالها:
.sp
.if n .RS 4
.nf
.fam C
# قرار دادن پنجره هندسه در مرکز صفحه
GeometryWindow Position 50 50
# قرار دادن پنجره هندسه در کنار RightPanel
GeometryWindow Position \-120p 0
# استفاده از مجموعهرنگ ۲ برای پنجره هندسه
GeometryWindow Colorset 2
# نمایش پنجره هندسه تنها در مانیتور اصلی
GeometryWindow Screen $[monitor.primary]
# پنهان کردن پنجره هندسه
GeometryWindow Hide
.fam
.fi
.if n .RE
.RE
.sp
\fBLayer\fP [\fIarg1\fP \fIarg2\fP] | [default]
.RS 4
پنجرهٔ جاری را در یک لایهٔ جدید قرار میدهد. اگر \fIarg1\fP غیر صفر باشد، لایهٔ بعدی
برابر با شمارهٔ لایهٔ جاری به علاوهٔ \fIarg1\fP خواهد بود. اگر \fIarg1\fP صفر باشد،
لایهٔ جدید \fIarg2\fP خواهد بود.
.sp
به عنوان یک حالت ویژه، \fIdefault\fP پنجره را در لایهٔ پیشفرض آن، یعنی همان لایهای
که در ابتدا در آن قرار داشت، میگذارد. در صورت مشخص نشدن آرگومان یا نامعتبر بودن
آرگومانها نیز همین اتفاق میافتد.
.RE
.sp
\fBLower\fP
.RS 4
به کاربر امکان میدهد یک پنجره را به سطح پایینتر ببرد. توجه داشته باشید که این دستور
یک پنجره را تنها در لایهٔ خودش پایین میبرد. برای بردن یک پنجره به پایینترین سطح مطلق،
از دستورات زیر استفاده کنید:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc lower\-to\-bottom
+ I Layer 0 0
+ I Lower
.fam
.fi
.if n .RE
.RE
.sp
\fBMove\fP [\fIoptions\fP]
.RS 4
به کاربر امکان میدهد یک پنجره را جابهجا کند. اگر از جایی درون پنجره یا حاشیهٔ آن فراخوانی
شود، همان پنجره جابهجا میشود. اگر از پنجرهٔ ریشه (root window) فراخوانی شود، به کاربر
اجازه داده میشود پنجرهٔ هدف را انتخاب کند. دستور Move میتواند با گزینههای گوناگونی
فراخوانی شود تا یک جابهجایی تعاملی را آغاز کند، موقعیت جابهجایی را مشخص نماید، یا یک جهت را تعیین کند.
.sp
دستور \fBMove\fP بدون گزینه، یک جابهجایی تعاملی را آغاز میکند. پنجره ممکن است به دیگر پنجرهها
و مرزهای صفحه بچسبد (snap)، که این ویژگی با سبک \fBSnapAttraction\fP قابل پیکربندی است.
جابهجا کردن پنجره به لبهٔ صفحه میتواند برای کشیدن پنجره به صفحههای دیگر (pages) استفاده شود.
(برای اطلاعات بیشتر به \fBEdgeScroll\fP و سبک \fIEdgeMoveDelay\fP مراجعه کنید.)
.sp
نگهداشتن کلید \fIAlt\fP قابلیت چسبیدن پنجره را غیرفعال کرده و اجازه میدهد بدون هیچ تأخیری
میان صفحهها جابهجا شوید. جابهجایی تعاملی را میتوان با کلید \fIEscape\fP یا هر کلید ماوسی
که برای جایگذاری پنجره تنظیم نشده باشد لغو کرد. به طور پیشفرض دکمهٔ ۲ ماوس برای لغو عملیات
جابهجایی تنظیم شده است. برای تغییر این رفتار میتوانید از دستور \fBMouse\fP با بافتار
ویژهٔ \*(AqP\*(Aq برای جایگذاری (Placement) استفاده کنید.
.sp
شرط پنجرهٔ \fIPlacedByButton\fP میتواند برای بررسی اینکه آیا دکمهٔ خاصی برای جایگذاری پنجره
فشرده شده است یا خیر استفاده شود (دستور \fBCurrent\fP را ببینید).
.sp
اگر تنها آرگومان \fIpointer\fP داده شود، پیش از آغاز جابهجایی تعاملی، گوشهٔ بالا سمت چپ
پنجره به موقعیت اشارهگر منتقل میشود؛ این قابلیت عمدتاً برای استفادهٔ درونی ماژولهایی
مانند \fBFvwmPager\fP در نظر گرفته شده است.
.sp
.if n .RS 4
.nf
.fam C
Move pointer
.fam
.fi
.if n .RE
.sp
برای جابهجا کردن یک پنجره در جهتی مشخص تا زمانی که به پنجرهای دیگر، آیکون، یا مرز
صفحه برخورد کند، از دستور زیر استفاده کنید:
.sp
.if n .RS 4
.nf
.fam C
Move shuffle [options] _direction_(s)
.fam
.fi
.if n .RE
.sp
آرگومان \fIdirection\fP میتواند \fINorth\fP/\fIN\fP/\fIUp\fP/\fIU\fP، \fIEast\fP/\fIE\fP/\fIRight\fP/\fIR\fP،
\fISouth\fP/\fIS\fP/\fIDown\fP/\fID\fP، یا \fIWest\fP/\fIW\fP/\fILeft\fP/\fIL\fP باشد. پنجره
در جهت مشخصشده جابهجا خواهد شد تا زمانی که به پنجرهای دیگر یا مرز صفحه/\fBEwmhBaseStruts\fP
برخورد کند. هنگامی که یک پنجره در مرز صفحه/\fBEwmhBaseStruts\fP قرار دارد، در صورت وجود
مانیتور بعدی در آن جهت، به آن مانیتور منتقل میشود. اگر پنجرهای خارج از فضای کاری جاری باشد
(بخشی از آن بیرون از صفحه باشد)، به لبهٔ فضای کاری منتقل خواهد شد. پنجرهها به فضای کاری EWMH
احترام میگذارند و در \fBEwmhBaseStruts\fP متوقف میشوند، مگر اینکه گزینهٔ صریح \fIewmhiwa\fP
مشخص شده باشد. اگر چند \fIdirection\fP داده شود، پنجره جهتها را به همان ترتیبی که در توالی ذکر
شدهاند طی خواهد کرد..sp
گزینهٔ لفظی \fIWarp\fP اشارهگر ماوس را فوراً به سمت پنجره منتقل میکند.
گزینهٔ لفظی \fIall_windows\fP بهجای این که فقط پنجرههای موجود در مسیر حرکت
پنجره را بررسی کند، تمام پنجرههای روی همان نمایشگر را در نظر خواهد گرفت.
این کار امکان جابهجایی تا مرز پنجرهای که در کنار آن قرار دارد را فراهم میکند.
گزینهٔ لفظی \fIboth_sides\fP هر دو سمت نزدیک و دور پنجره را در نظر میگیرد
(بهطور پیشفرض تنها سمت نزدیک در نظر گرفته میشود).
.sp
اگر گزینهٔ لفظی \fIsnap\fP به همراه یک نوع چسبیدن (\fItype\fP) شامل \fIwindows\fP،
\fIicons\fP یا \fIsame\fP مشخص شود، پنجره تنها در صورتی متوقف میشود که
به پنجرهای دیگر، یک آیکون یا شیئی از همان نوع برخورد کند. اگر گزینهٔ لفظی \fIlayers\fP
به همراه دو عدد صحیح که لایههای \fImin\fP و \fImax\fP را مشخص میکنند داده شود،
تنها پنجرههای واقع در لایههای بین لایهٔ \fImin\fP و \fImax\fP پنجره را متوقف
خواهند کرد. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
# جابهجایی پنجره به سمت راست.
Move shuffle Right
# جابهجایی به بالا، تنها در نظر گرفتن پنجرههای روی لایهٔ ۳.
Move shuffle layers 3 3 Up
# جابهجایی به چپ سپس به بالا
Move shuffle Left Up
# جابهجایی به بالا سپس به چپ (ممکن است در موقعیت مشابه بالا قرار نگیرد)
Move shuffle Up Left
.fam
.fi
.if n .RE
.sp
از \fBMove\fP میتوان برای جابهجا کردن یک پنجره به موقعیتی مشخص استفاده کرد:
.sp
.if n .RS 4
.nf
.fam C
Move [screen _S_] [desk _N_] [w | m | v]_x_[p | w] \(rs
[w | m | v]_y_[p | w] [Warp] [ewmhiwa]
.fam
.fi
.if n .RE
.sp
این دستور پنجره را به موقعیت \fIx\fP و \fIy\fP جابهجا میکند (پایین را ببینید).
بهطور پیشفرض، ناحیهٔ کاری EWMH مربوط به هر نمایشگر رعایت میشود (ناحیهٔ
کاری هر نمایشگر از طریق \fBEwmhBaseStruts\fP تعیین میشود و هرگونه راهنمای
فاصله (strut hints) ارائهشده توسط پنجرههای آن نمایشگر را رعایت میکند). این
بدان معناست که اگر پنجرهای خارج از ناحیهٔ کاری قرار گیرد، موقعیت پنجره به
گونهای تنظیم میشود که درون ناحیهٔ کاریِ صفحهای که مرکز پنجره روی آن قرار
دارد جای گیرد. اگر گزینهٔ پایانی \fIewmhiwa\fP داده شود، موقعیت پنجره ناحیهٔ
کاری را نادیده گرفته و موقعیت آن تعدیل نخواهد شد (این گزینه برای انتقال
پنجرهها به خارج از صفحه نمایش و داشتن کنترل کامل بر محل قرارگیری آنها لازم است).
اگر گزینهٔ \fIWarp\fP داده شود، اشارهگر ماوس به سمت پنجره منتقل خواهد شد.
.sp
اگر گزینهٔ لفظی \fIscreen\fP همراه با یک نام صفحهٔ RandR یعنی \fIS\fP مشخص شود،
مختصات بهصورت نسبی نسبت به صفحهٔ دادهشده تفسیر میشوند. عرض و ارتفاع آن
صفحه بهجای ابعاد کل صفحه نمایش در محاسبات به کار میروند. گزینهٔ \fIscreen\fP
همانند دستور \fBMoveToScreen\fP تفسیر میشود.
.sp
اگر گزینهٔ لفظی \fIdesk\fP به همراه شماره میزکار \fIN\fP مشخص شود، پنجره پس
از انتقال بر روی میزکار مشخصشده قرار میگیرد. این قابلیت میتواند دو هدف
داشته باشد: نخست، میتوانید موقعیت پنجره و میزکار آن را در یک دستور واحد
تغییر دهید؛ دوم، هنگامی که یک پنجره بین نمایشگرها جابهجا میشود، میزکار آن
بهروزرسانی شده تا با نمایشگر جدید یکسان شود. این گزینه میتواند با تعیین
اینکه پنجره در نهایت روی کدام میزکار قرار گیرد، آن رفتار را بازنویسی کند.
.sp
آرگومانهای مکانی \fIx\fP و \fIy\fP میتوانند یک موقعیت مطلق یا نسبی را از
سمت چپ/بالا (مقادیر مثبت) یا راست/پایین (مقادیر منفی) صفحهٔ سراسری (کادر
احاطهکنندهای که شامل همهٔ نمایشگرها است) یا \fIscreen\fP مشخصشده تعیین کنند.
بهطور پیشفرض، مقدار عددی دادهشده به عنوان درصدی از عرض/ارتفاع صفحه تفسیر
میشود، اما یک \*(Aq\fIp\fP\*(Aq پایانی تفسیر را به پیکسل تغییر میدهد، در حالی که
یک \*(Aq\fIw\fP\*(Aq پایانی به معنای درصدی از عرض/ارتفاع پنجره است. برای جابهجایی
پنجره نسبت به موقعیت فعلیاش، پیشوند \*(Aq\fIw\fP\*(Aq (مخفف «window») را پیش از
مقدار \fIx\fP یا \fIy\fP اضافه کنید. برای جابهجایی پنجره به موقعیتی نسبت به
مکان فعلی اشارهگر، پیشوند \*(Aq\fIm\fP\*(Aq (مخفف «mouse») را اضافه نمایید. برای
جابهجایی پنجره نسبت به مختصات صفحهٔ مجازی، پیشوند \*(Aq\fIv\fP\*(Aq (مخفف
«virtual screen») را بیفزایید. این ویژگی بیشتر برای استفادهٔ داخلی توسط FvwmPager
است، اما میتواند برای تعیین مختصات دقیق روی صفحهٔ مجازی استفاده شود و بهترین
حالت استفاده از آن همراه با پسوند \*(Aq\fIp\fP\*(Aq است. برای بدون تغییر ماندن
هر یک از مختصاتها، میتوان «\fIkeep\fP» را به جای \fIx\fP یا \fIy\fP مشخص کرد.
.sp
برای کاربردهای پیشرفته، آرگومانهای \fIx\fP و \fIy\fP میتوانند چندین بار
استفاده شوند، اما بدون پیشوند \*(Aq\fIm\fP\*(Aq یا \*(Aq\fIw\fP\*(Aq. (مثالهای
پیچیدهٔ زیر را ببینید).
.sp
مثالهای ساده:
.sp
.if n .RS 4
.nf
.fam C
# جابهجایی تعاملی
Mouse 1 T A Move
# جابهجایی پنجره بهطوری که گوشهٔ بالا-چپ در (10%,10%) باشد
Mouse 2 T A Move 10 10
# جابهجایی گوشهٔ بالا-چپ به (10pixels,10pixels)
Mouse 3 T A Move 10p 10p
.fam
.fi
.if n .RE
.sp
مثالهای پیچیدهتر (اینها میتوانند به عنوان کنش به کلیدهای صفحهکلید و غیره
مقید شوند؛ گرچه در اینجا تنها خود دستور نمایش داده شده است):
.sp
.if n .RS 4
.nf
.fam C
# جابهجایی پنجره بهطوری که پایین-راست آن در پایین-راست
# صفحه نمایش قرار گیرد
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
.fam
.fi
.if n .RE
.sp
همچنین به دستور \fBAnimatedMove\fP نگاه کنید.
.RE
.sp
\fBMoveToDesk\fP [prev | \fIarg1\fP [\fIarg2\fP] [\fImin\fP \fImax\fP]]
.RS 4
پنجرهٔ انتخابشده را به میزکار دیگری منتقل میکند. آرگومانها همانند دستور
\fBGotoDesk\fP هستند. بدون هیچ آرگومانی، پنجره به میزکار جاری منتقل میشود.
.RE
.sp
\fBMoveThreshold\fP [\fIpixels\fP]
.RS 4
هنگامی که کاربر یکی از کلیدهای ماوس را بر روی شیئی فشار میدهد، fvwm منتظر
میماند تا مشخص شود آیا این کنش یک کلیک است یا کشیدن (drag). اگر ماوس به
اندازهٔ بیش از \fIpixels\fP پیکسل جابهجا شود، به عنوان کشیدن در نظر گرفته میشود.
.sp
نسخههای پیشین fvwm مقدار \fIpixels\fP را روی ۳ تثبیت کرده بودند، که اکنون این
مقدار، مقدار پیشفرض است. اگر \fIpixels\fP منفی باشد یا مشخص نشود، مقدار
پیشفرض (که ممکن است زمانی که نمایشگرهای ۱۶۰۰۰x۹۰۰۰ پیکسلی از نظر اقتصادی
مقرونبهصرفه شوند افزایش یابد) بازگردانده میشود.
.RE
.sp
\fBMoveToPage\fP [\fIoptions\fP] [\fIx\fP[p | w] \fIy\fP[p | w]] | [prev]
.RS 4
پنجرهٔ انتخابشده را به صفحهای دیگر (\fIx\fP,\fIy\fP) منتقل میکند. صفحهٔ
بالا-چپ (0,0) و صفحهٔ بالا-راست (M,0) است، که در آن M یکی کمتر از تعداد
صفحات افقی فعلی تعیینشده در دستور \fBDesktopSize\fP است. به همین ترتیب صفحهٔ
پایین-چپ (0,N) و صفحهٔ پایین-راست (M,N) است. شماره صفحات منفی به صفحاتی از
سمت راستترین/پایینترین صفحه اشاره میکنند. اگر \fIx\fP و \fIy\fP مشخص نشوند،
پنجره به صفحهٔ جاری منتقل میشود (پنجرهای که فوکوس دارد ولی خارج از صفحه
نمایش (off\-screen) است را میتوان با این دستور بازیابی کرد). جابهجایی پنجرهها
به یک صفحه به صورت نسبی نسبت به صفحهٔ جاری با افزودن یک \*(Aq\fIp\fP\*(Aq پایانی پس
از هر یک یا هر دو آرگومان عددی انجامپذیر است. برای جابهجایی پنجره نسبت به مکان
فعلی آن، یک \*(Aq\fIw\fP\*(Aq پایانی اضافه کنید. برای انتقال پنجره به صفحهٔ قبلی،
از \fIprev\fP به عنوان تکآرگومان استفاده کنید.
.sp
پنجرهها معمولاً به فراتر از مرزهای میزکار منتقل نمیشوند.
.sp
گزینههای ممکن (\fIoptions\fP) شامل \fIwrapx\fP و \fIwrapy\fP هستند تا هنگام
جابهجایی پنجره به فراتر از مرز میزکار، مختصات x یا y چرخش یابد (دور بزند).
برای مثال، با \fIwrapx\fP، هنگامی که پنجره از لبهٔ راست میزکار عبور میکند،
دوباره در لبهٔ چپ پدیدار میشود. گزینههای \fInodesklimitx\fP و \fInodesklimity\fP
اجازهٔ جابهجایی پنجرهها به فراتر از مرزهای میزکار در راستای x و y را میدهند
(که گزینههای \fIwrapx\fP و \fIwrapy\fP را غیرفعال میکند).
.sp
مثالها:.sp
.if n .RS 4
.nf
.fam C
# انتقال پنجره به صفحه (2,3)
MoveToPage 2 3
# انتقال پنجره به پایینترین و راستترین صفحه
MoveToPage \-1 \-1
# انتقال پنجره به آخرین صفحه بازدیدشده
MoveToPage prev
# انتقال پنجره به اندازه دو صفحه به راست و یک
# صفحه به بالا، با پیچش در مرزهای میزکار
MoveToPage wrapx wrapy +2p \-1p
.fam
.fi
.if n .RE
.RE
.sp
\fBMoveToScreen\fP [\fIscreen\fP]
.RS 4
پنجره انتخابشده را به صفحهنمایش دیگری منتقل میکند. آرگومان \fIscreen\fP
باید یک نام معتبر RandR باشد.
.RE
.sp
\fBOpaqueMoveSize\fP [\fIpercentage\fP]
.RS 4
به fvwm حداکثر اندازه پنجرهای را اعلام میکند که باید برای آن از جابهجایی کدر (opaque) پنجره
استفاده شود. درصد مشخصشده، درصدی از کل مساحت صفحهنمایش
است (ممکن است بزرگتر از ۱۰۰ باشد). با
.sp
.if n .RS 4
.nf
.fam C
OpaqueMoveSize 0
.fam
.fi
.if n .RE
.sp
تمام پنجرهها با استفاده از خطوط پیرامونی کشسان سنتی (rubber\-band) جابهجا میشوند. با
.sp
.if n .RS 4
.nf
.fam C
OpaqueMoveSize unlimited
.fam
.fi
.if n .RE
.sp
یا در صورتی که درصدی منفی مشخص شود، تمام پنجرهها به صورت توپر جابهجا
میشوند. مقدار پیشفرض
.sp
.if n .RS 4
.nf
.fam C
OpaqueMoveSize 5
.fam
.fi
.if n .RE
.sp
است که اجازه میدهد پنجرههای کوچک به صورت کدر جابهجا شوند اما پنجرههای
بزرگ به صورت خطوط کشسان جابهجا شوند. اگر \fIpercentage\fP حذف شود یا
نامعتبر باشد، مقدار پیشفرض تنظیم میشود. برای تغییر اندازه پنجرهها به صورت
کدر میتوانید از سبک \fIResizeOpaque\fP استفاده کنید. دستور \fBStyle\fP را ببینید.
.RE
.sp
\fBPlaceAgain\fP [Anim] [Icon]
.RS 4
باعث میشود موقعیت پنجره جاری با استفاده از منطق اولیه جایگذاری پنجره
مجدداً محاسبه شود. پنجره به مکانی منتقل میشود که اگر یک پنجره جدید تازه ظاهرشده
میبود، در آنجا قرار میگرفت. با جایگذاری \fISmart\fP یا \fIClever\fP (\fIReallySmart\fP) بیشترین
کاربرد را دارد. با آرگومان اختیاری \fIAnim\fP، از یک جابهجایی پویانماییشده برای قرار دادن پنجره در
موقعیت جدیدش استفاده میشود. با گزینه اضافی \fIIcon\fP، به جای آن، آیکون مجدداً
جایگذاری میشود.
.RE
.sp
\fBRaise\fP
.RS 4
به کاربر اجازه میدهد یک پنجره را بالا بیاورد. توجه داشته باشید که این دستور پنجره را فقط
در لایه خودش بالا میآورد. برای آوردن یک پنجره به بالاترین سطح مطلق، از دستور زیر استفاده کنید:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc raise\-to\-top
+ I Layer 0 ontop
+ I Raise
.fam
.fi
.if n .RE
.sp
که در آن ontop بالاترین لایه استفادهشده در پیکربندی شماست.
.RE
.sp
\fBRaiseLower\fP
.RS 4
به صورت متناوب پنجره را بالا میآورد و پایین میبرد. پنجره در صورتی بالا آورده میشود که
توسط پنجره دیگری پوشانده شده باشد (به جز پنجرههای گذرا (transient) متعلق به خودش هنگامی که از سبک
\fIRaiseTransient\fP استفاده میشود؛ دستور \fBStyle\fP را ببینید) در غیر این صورت
پایین برده میشود.
.RE
.sp
\fBResize\fP [[frame] [direction \fIdir\fP] [warptoborder \fIautomatic\fP] [fixeddirection] \fIwidth\fP[p | c | wa | da] \fIheight\fP[p | c]]
.RS 4
امکان تغییر اندازه یک پنجره را فراهم میکند. اگر از درون یک پنجره یا
حاشیه آن فراخوانی شود، اندازه آن پنجره تغییر میکند. اگر از پنجره
ریشه (root) فراخوانی شود، به کاربر امکان انتخاب پنجره هدف داده میشود.
.sp
\fBResize\fP بدون گزینه، یک تغییر اندازه تعاملی را آغاز میکند.
.sp
اگر سبک \fIEdgeResizeDelay\fP تنظیم شده باشد یا کلید \fIAlt\fP فشرده نگه داشته شود،
پنجره را میتوان از لبه صفحهنمایش عبور داد و اندازه آن را تغییر داد.
.sp
این عملیات را میتوان با کلید \fIEscape\fP یا با فشردن
هر یک از دکمههای موشواره (به جز دکمه ۱ که آن را تأیید میکند) لغو کرد.
.sp
اگر آرگومانهای اختیاری \fIwidth\fP و \fIheight\fP ارائه شوند، پنجره طوری
تغییر اندازه میدهد که ابعاد آن \fIwidth\fP در \fIheight\fP شود. واحدهای
\fIwidth\fP و \fIheight\fP به صورت درصد\-از\-صفحهنمایش هستند، مگر اینکه حرف
\*(Aq\fIp\fP\*(Aq به یک یا هر دو مختصات اضافه شود، که در این صورت مکان بر حسب
پیکسل مشخص میشود. با پسوند \*(Aq\fIc\fP\*(Aq واحد تعریفشده توسط برنامه کلاینت
(از این رو c برگرفته از client) استفاده میشود. با پسوند \*(Aq\fIwa\fP\*(Aq مقدار، درصدی از عرض یا ارتفاع
ناحیه کاری EWMH است، و با پسوند \*(Aq\fIda\fP\*(Aq درصدی از عرض یا ارتفاع
ناحیه کاری پویای EWMH است. بنابراین میتوانید بنویسید:
.sp
.if n .RS 4
.nf
.fam C
Resize 80c 24c
.fam
.fi
.if n .RE
.sp
تا یک پنجره ترمینال دقیقاً به اندازه 80x24 نویسه تنظیم شود.
.sp
اگر پیشوند حرف \*(Aq\fIw\fP\*(Aq به \fIwidth\fP یا \fIheight\fP اضافه شود، اندازه
به عنوان یک مقدار مطلق در نظر گرفته نمیشود بلکه به اندازه فعلی
پنجره افزوده میشود. مثال:
.sp
.if n .RS 4
.nf
.fam C
# بزرگ کردن پنجره به اندازه یک خط
Resize keep w+1c
.fam
.fi
.if n .RE
.sp
هر دو مقدار \fIwidth\fP و \fIheight\fP میتوانند منفی باشند. در این حالت اندازه جدید برابر
با اندازه صفحهنمایش منهای مقدار دادهشده خواهد بود. اگر هر یک از مقادیر "\fIkeep\fP" باشد،
بُعد متناظر آن در پنجره دستنخورده باقی میماند. اندازه جدید برابر با اندازه پنجره کلاینت است، بنابراین
.sp
.if n .RS 4
.nf
.fam C
Resize 100 100
.fam
.fi
.if n .RE
.sp
ممکن است پنجره را بزرگتر از صفحهنمایش کند. برای مبنا قرار دادن اندازه جدید بر اساس
اندازه کل پنجره fvwm، گزینه \fIframe\fP را بعد از دستور اضافه کنید. گزینههای \fIfixeddirection\fP،
\fIdirection\fP و \fIwarptoborder\fP فقط در عملیات جابهجایی تعاملی استفاده میشوند. با \fIfixeddirection\fP
حتی اگر اشارهگر از حاشیه مقابل عبور کند، همان حاشیه جابهجا میشود. گزینه \fIdirection\fP
باید با یک نام جهت مانند "NorthWest"، "South" یا "East" دنبال شود (موضوع مشخص است). تغییر اندازه
بلافاصله شروع میشود، حتی اگر اشارهگر روی یک حاشیه قرار نداشته باشد. اگر گزینه خاص
\fIautomatic\fP به عنوان آرگومان جهت داده شود، جهت تغییر اندازه بر اساس موقعیت اشارهگر
در پنجره محاسبه میشود. اگر اشارهگر در وسط پنجره باشد، هیچ جهتی محاسبه نمیشود.
گزینه \fIwarptoborder\fP میتواند برای انتقال سریع اشارهگر (warp) به جهت مشخصشده استفاده شود. همانند
گزینه \fIautomatic\fP برای \fIdirection\fP، حاشیهای که اشارهگر باید به آن منتقل شود بر اساس
فاصله اشارهگر به یک حاشیه مشخص محاسبه میشود. همچنین، اگر تغییر اندازه با
کلیک روی حاشیه پنجره آغاز شود، اشارهگر به لبه بیرونی حاشیه منتقل میشود..sp
.if n .RS 4
.nf
.fam C
AddToFunc ResizeSE I Resize Direction SE
Mouse 3 A M ResizeSE
.fam
.fi
.if n .RE
.RE
.sp
\fBResize\fP [bottomright | br \fIx\fP \fIy\fP]
.RS 4
در صورتی که کلیدواژهٔ \fIbottomright\fP یا به طور خلاصه \fIbr\fP پس از نام دستور بیاید، یک نحو (syntax) جایگزین به کار میرود. در این حالت، آرگومانهای \fIx\fP و \fIy\fP موقعیت مورد نظر گوشهٔ پایین سمت راست پنجره را مشخص میکنند. این آرگومانها دقیقاً مانند آرگومانهای \fIx\fP و \fIy\fP در دستور \fBMove\fP تفسیر میشوند. در واقع، هر یک از گزینههای پذیرفتهشده توسط دستور \fBMove\fP میتوانند در اینجا نیز استفاده شوند.
.RE
.sp
\fBResizeMaximize\fP [\fIresize\-arguments\fP]
.RS 4
تأثیرات \fBResize\fP و \fBMaximize\fP را در قالب یک دستور واحد ترکیب میکند. هنگامی که روی یک پنجرهٔ بیشینهشده استفاده شود، پنجره تغییر اندازه مییابد و پس از آن همچنان در وضعیت بیشینه باقی میماند. هنگامی که روی یک پنجرهٔ غیربیشینه استفاده شود، پنجره تغییر اندازه یافته و پس از آن در وضعیت بیشینه قرار میگیرد. این ویژگی زمانی مفید است که کاربر بخواهد موقتاً اندازهٔ پنجره را تغییر دهد و سپس به ابعاد هندسی (geometry) اولیه بازگردد. آرگومانهای \fIresize\-arguments\fP همانند آرگومانهای دستور \fBResize\fP هستند.
.RE
.sp
\fBResizeMove\fP \fIresize\-arguments\fP \fImove\-arguments\fP
.RS 4
این دستور همان کار دستورهای \fBResize\fP و \fBMove\fP را انجام میدهد، اما در قالب یک فراخوانی واحد که از نظر بصری پرش و ناهماهنگی کمتری ایجاد میکند. آرگومانهای \fIresize\-arguments\fP دقیقاً همان آرگومانهای دستور \fBResize\fP هستند و \fImove\-arguments\fP دقیقاً همان آرگومانهای دستور \fBMove\fP میباشند، به جز گزینهٔ \fIpointer\fP که توسط دستور \fBResizeMove\fP پشتیبانی نمیشود.
.sp
مثالها:
.sp
.if n .RS 4
.nf
.fam C
# 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
.fam
.fi
.if n .RE
.sp
نکته: اگر از گزینهٔ \fIbottomright\fP دستور \fBResize\fP استفاده شود، ممکن است Fvwm نتواند دستور را به درستی تجزیه کند.
.RE
.sp
\fBResizeMoveMaximize\fP \fIresize\-arguments\fP \fImove\-arguments\fP
.RS 4
تأثیرات دو دستور \fBResizeMove\fP و \fBMaximize\fP را در یک دستور واحد ترکیب میکند. هنگامی که روی یک پنجرهٔ بیشینهشده استفاده شود، پنجره تغییر اندازه داده و جابهجا میشود و پس از آن همچنان در وضعیت بیشینه باقی میماند. هنگامی که روی یک پنجرهٔ غیربیشینه استفاده شود، پنجره تغییر اندازه یافته و در وضعیت بیشینه قرار میگیرد. این ویژگی زمانی سودمند است که کاربر بخواهد موقتاً اندازهٔ پنجره را تغییر دهد و سپس به ابعاد هندسی اولیه بازگردد. آرگومانهای \fIresize\-arguments\fP و \fImove\-arguments\fP مشابه دستور \fBResizeMove\fP هستند.
.RE
.sp
\fBRestackTransients\fP
.RS 4
این دستور پنجرههای گذرا (transients) متعلق به یک پنجره را در ترتیب پشتهسازی (stacking order) نزدیک به آن بازگروهبندی میکند، گویی پنجره تازه به پایین فرستاده شده و سپس بالا آورده شده است. موقعیت خود پنجره تغییری نمیکند. تنها پنجرههایی تحت تأثیر قرار میگیرند که از سبک \fIRaiseTransient\fP یا \fILowerTransient\fP استفاده میکنند. هنگامی که \fBRestackTransients\fP روی یک پنجرهٔ گذرا با سبک تنظیمشدهٔ \fIStackTransientParent\fP استفاده شود، به پنجرهٔ والد هدایت میشود.
.RE
.sp
\fBSetAnimation\fP \fImilliseconds\-delay\fP [\fIfractions\-to\-move\-list\fP]
.RS 4
زمان بین فریمها و فهرست آفستهای کسری را جهت سفارشیسازی حرکتهای پویانماییشدهٔ دستور \fBAnimatedMove\fP و پویانمایی منوها (در صورتی که سبک منو روی animated تنظیم شده باشد؛ دستور \fBMenuStyle\fP را ببینید) تنظیم میکند. اگر \fIfractions\-to\-move\-list\fP حذف شود، تنها زمان بین فریمها تغییر مییابد. آرگومان \fIfractions\-to\-move\-list\fP مشخص میکند که پنجره در هر فریم متوالی چه مقدار باید جابهجا شود، که به صورت کسری از فاصلهٔ بین نقطهٔ شروع و نقطهٔ پایان بیان میشود. برای نمونه:
.sp
.if n .RS 4
.nf
.fam C
SetAnimation 10 \-.01 0 .01 .03 .08 .18 .3 \(rs
\&.45 .6 .75 .85 .90 .94 .97 .99 1.0
.fam
.fi
.if n .RE
.sp
تاخیر میان فریمها را روی ۱۰ میلیثانیه تنظیم میکند و موقعیتهای ۱۶ فریم حرکت پویانمایی را تعیین مینماید. مقادیر منفی نیز مجاز هستند و بهویژه میتوان از آنها برای بخشیدن جلوهٔ کارتونیتر به حرکت استفاده کرد، به این شکل که پنجره برای لحظهای کوتاه کمی در خلاف جهت حرکت اصلی جابهجا میشود. تنظیمات فوق مقادیر پیشفرض هستند.
.RE
.sp
\fBXorPixmap\fP [\fIpixmap\fP]
.RS 4
نگاشتپیکسلی (pixmap) را انتخاب میکند که بیتها در هنگام جابهجایی یا تغییر اندازهٔ کشسانی پنجره (rubber\-band) با آن XOR میشوند. در صورتی که \fBXorValue\fP نتایج مطلوبی ندهد، این گزینه شانس بیشتری برای قابل مشاهده ساختن کادر کشسانی ایجاد میکند. یک pixmap نمونه به نام \fIresize.rainbow.xpm\fP همراه با بستهٔ آیکونها توزیع شده است. برای خاموش کردن دوبارهٔ \fIXorPixmap\fP، از دستور \fBXorValue\fP استفاده کنید یا آرگومان \fIpixmap\fP را حذف نمایید.
.RE
.sp
\fBXorValue\fP [\fInumber\fP]
.RS 4
مقداری را که بیتها هنگام جابهجایی یا تغییر اندازهٔ کشسانی پنجره با آن XOR میشوند، تغییر میدهد. مقادیر معتبر از صفر تا بیشینه مقدار یک عدد صحیح بدون علامت (unsigned long integer) روی سیستم شما متغیر است. تنظیم این مقدار یک فرآیند آزمون و خطا است. مقدار پیشفرض 0 تلاش میکند مقداری را بیابد که کنتراست خوبی با سیاه و سفید ایجاد کند. در صورتی که \fInumber\fP مشخصشده نادیده گرفته شود یا نامعتبر باشد، از مقدار پیشفرض استفاده میشود.
.RE.SS "تمرکز و حرکت موشواره (Focus & Mouse Movement)"
.sp
\fBCursorBarrier\fP [destroy] [options] [\fIleft\fP \fItop\fP \fIright\fP \fIbottom\fP]
.RS 4
یک سد مکاننما (cursor barrier) کادری است که مکاننما نمیتواند به خارج از آن جابهجا شود (مگر اینکه با \fICursorMove\fP یا \fIWarpToWindow\fP پرش داده شود). مقادیر \fIleft\fP، \fItop\fP، \fIright\fP و \fIbottom\fP درصد فاصله کادر از هر یک از لبههای متناظر میزکار را مشخص میکنند. اگر مقادیر با یک \fIp\fP خاتمه یابند، به عنوان مقدار پیکسلی تفسیر میشوند. اگر گزینه \fIcoords\fP داده شود، مقادیر به عنوان مختصات چپ/بالا و راست/پایین گوشههای کادر در نظر گرفته میشوند. اگر گزینه \fIscreen RandRname\fP داده شود، موقعیتها نسبت به نمایشگر مشخصشده محاسبه میشوند. از \fIscreen c\fP برای قرار دادن سد روی نمایشگر فعلی استفاده کنید.
.sp
با چندین بار فراخوانی \fICursorBarrier\fP میتوان چندین سد ایجاد کرد. این کار امکان ایجاد چندین ناحیه برای محدود کردن مکاننما را فراهم میکند (مانند هر نمایشگر در یک پیکربندی چندنمایشگره)، و سپس میتوان از \fICursorMove\fP یا \fIWarpToWindow\fP برای جابهجایی مکاننما میان سدها استفاده کرد. اگر دستور \fIdestroy\fP داده شود، تمام سدها نابود شده و دوباره حرکت آزادانه موشواره ممکن میشود. اگر به دنبال \fIdestroy\fP یک عدد صحیح \fIN\fP بیاید، تنها همان سد نابود میشود (سدها به ترتیب ایجاد از ۰ شمارهگذاری میشوند). اگر عدد صحیح منفی باشد، شمارش به صورت معکوس انجام میشود؛ مانند «\-1» برای جدیدترین سد ایجادشده، «\-2» برای دومین سد جدید، و به همین ترتیب. هنگامی که یک سد نابود میشود، تمام سدهای پس از آن مجدداً شمارهگذاری میشوند. در عمل بهتر است از \fIdestroy \-1\fP استفاده شود تا جدیدترین سد بدون تأثیر بر سدهای قبلی نابود گردد.
.sp
به صورت پیشفرض، کلید میانبر ctrl+shift+D با فراخوانی \fICursorBarrier destroy\fP تمام سدهای مکاننما را نابود میکند.
.sp
در اینجا چند مثال آورده شده است:
.sp
.if n .RS 4
.nf
.fam C
# یک سد با فاصله ۱۵٪ از چپ/راست و ۱۰٪ از بالا/پایین.
CursorBarrier 15 10 15 10
# سدی برای محدود کردن موشواره به نمایشگر جاری.
CursorBarrier screen c
# سدی برای محدود کردن موشواره به یک پنجره انتخابشده
Pick CursorBarrier coords $[w.x]p $[w.y]p \(rs
$[math.+.$[w.x],$[w.width]]p $[math.+.$[w.y],$[w.height]]p
# نابود کردن تمام سدها
CursorBarrier destroy
.fam
.fi
.if n .RE
.sp
توجه داشته باشید که اگر محدودیت CURSOR_BARRIER پر شود، \fIتمام\fP CursorBarrierهای تعریفشده لغو میشوند. با این حال در عمل رخ دادن این اتفاق بعید است. اگر چنین شود، پیامی در گزارشهای اشکالزدایی fvwm3 چاپ خواهد شد.
.sp
دستور \fICursorBarrier\fP تنها زمانی کار میکند که fvwm با افزونه XFixes کامپایل شده باشد.
.RE
.sp
\fBCursorMove\fP [screen \fIRANDRNAME\fP] \fIhorizontal\fP[p] \fIvertical\fP[p]
.RS 4
بدون گزینه \fIscreen\fP، دستور \fICusorMove\fP مکاننمای موشواره را به اندازه یک فاصله افقی (\fIhorizontal\fP) و فاصله عمودی (\fIvertical\fP) از موقعیت جاریاش جابهجا میکند. مقادیر یا به صورت درصدی از اندازه میزکار مجازی بیان میشوند، یا با افزودن یک \*(Aq\fIp\fP\*(Aq به مقدار، به عنوان فاصله پیکسلی تفسیر میگردند. یک یا هر دو ورودی میتوانند منفی باشند. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
# یک صفحه کامل به پایین و راست جابهجا شو.
CursorMove 100 100
# دو صفحه کامل به پایین جابهجا شو.
CursorMove 0 200
# نیم صفحه به راست و یکچهارم صفحه به بالا جابهجا شو.
CursorMove 50 \-25
# ۱۰۰ پیکسل به چپ و ۵۰ پیکسل به پایین جابهجا شو.
CursorMove \-100p 50p
.fam
.fi
.if n .RE
.sp
اگر گزینه \fIscreen\fP به همراه نام معتبر یک نمایشگر RandR ذکر شود، \fICursorMove\fP مکاننما را به موقعیت مطلق (با شروع از گوشه بالا سمت چپ) تعیینشده توسط آرگومانها منتقل میکند؛ این مقادیر میتوانند به صورت درصد اندازه نمایشگر، یا یک موقعیت مطلق با پسوند \*(Aq\fIp\fP\*(Aq باشند. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
# انتقال مکاننما به مرکز نمایشگر DP\-1
CursorMove screen DP\-1 50 50
# انتقال مکاننما به موقعیت دقیق (400, 200) در نمایشگر DP\-2
CursorMove screen DP\-2 400p 200p
.fam
.fi
.if n .RE
.sp
هنگام جابهجایی به یک \fIscreen\fP مشخصشده، مقادیر \fIhorizontal\fP و \fIvertical\fP همواره به گونهای جابهجا میشوند که درون صفحه فعلی نمایشگر مشخصشده قرار گیرند. به عنوان مثال، مقادیر \*(Aq50\*(Aq، \*(Aq150\*(Aq و \*(Aq\-150\*(Aq همگی در مرکز نمایشگر قرار خواهند گرفت و صفحه نمایشگر را تغییر نمیدهند. برای تغییر صفحه یک نمایشگر مشخص از \fBGotoPage\fP استفاده کنید. مقادیر منفی میتوانند برای تعیین فاصله از گوشه راست/پایین نمایشگر استفاده شوند.
.sp
دستور \fICusorMove\fP تنها میتواند مکاننما را نسبت به موقعیت جاریاش یا به یک موقعیت مطلق در یک نمایشگر مشخص جابهجا کند. برای جابهجایی مکاننما نسبت به یک پنجره، از \fBWarpToWindow\fP استفاده کنید.
.RE
.sp
\fBFlipFocus\fP [NoWarp]
.RS 4
دستور \fBFocus\fP را اجرا میکند، به گونهای که گویی کاربر از اشارهگر برای انتخاب پنجره استفاده کرده است. این دستور ترتیب WindowList را به همان صورت کلیک روی پنجره برای تمرکز تغییر میدهد؛ یعنی پنجره هدف از \fBWindowList\fP برداشته شده و در ابتدا قرار میگیرد. استفاده از این دستور به همراه دستور \fBDirection\fP و در تابعی که از \fBWindowList\fP فراخوانی میشود، توصیه میگردد.
.RE
.sp
\fBFocus\fP [NoWarp]
.RS 4
تمرکز صفحهکلید را روی پنجره انتخابشده تنظیم میکند. اگر آرگومان \fINoWarp\fP داده شود، تمام کاری که انجام میدهد همین است. در غیر این صورت، درگاه دید (viewport) یا پنجره را بر حسب نیاز جابهجا میکند تا پنجره انتخابشده نمایان شود. این دستور پنجره را به صورت خودکار بالا نمیآورد (raise نمیکند). اشارهگر را به داخل پنجره انتخابشده پرش نمیدهد (به تابع \fBWarpToWindow\fP مراجعه کنید). پنجره را از حالت آیکون خارج نمیکند (de\-iconify نمیکند). این دستور ترتیب \fBWindowList\fP را تغییر نمیدهد، بلکه \fBWindowList\fP را میچرخاند تا پنجره هدف در ابتدای آن قرار گیرد.
.sp
هنگامی که آرگومان \fINoWarp\fP داده شده باشد، Focus نمیتواند تمرکز صفحهکلید را به پنجرههای موجود در دیگر میزکارها (desks) منتقل کند.
.sp
برای بالا آوردن و/یا پرش دادن اشارهگر به یک پنجره به همراه \fBFocus\fP یا \fBFlipFocus\fP، از تابعی مانند زیر استفاده کنید:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc SelectWindow
+ I Focus
+ I Iconify false
+ I Raise
+ I WarpToWindow 50 8p
.fam
.fi
.if n .RE
.RE
.sp
\fBWarpToWindow\fP [!raise | raise] \fIx\fP[p] \fIy\fP[p]
.RS 4
مکاننما را به پنجره مربوطه پرش داده و آن را بالا میآورد (مگر اینکه گزینه \fI!raise\fP مشخص شده باشد). پارامترهای \fIx\fP و \fIy\fP به صورت پیشفرض درصدی از اندازه پنجره به سمت پایین و داخل از گوشه بالا سمت چپ هستند (یا در صورت اضافه شدن \*(Aq\fIp\fP\*(Aq به اعداد، تعداد پیکسل به سمت پایین و داخل). اگر عددی منفی باشد، از لبه مقابل استفاده شده و جهت معکوس میگردد. این دستور همچنین برای پنجرههایی که توسط fvwm مدیریت نمیشوند نیز کار میکند. در این حالت اگر پنجره نمایان نباشد، fvwm آن را به صفحه نمایش نمیآورد. به عنوان مثال، امکان پرش دادن اشارهگر به مرکز پنجره root وجود دارد:
.sp
.if n .RS 4
.nf
.fam C
WindowId root WarpToWindow 50 50
.fam
.fi
.if n .RE
.RE.SS "وضعیت پنجره (Window State)"
.sp
\fBClose\fP
.RS 4
اگر پنجره پروتکل delete window را بپذیرد، پیامی به پنجره فرستاده میشود که از آن میخواهد با روال عادی خود را حذف کند. اگر پنجره پروتکل delete window را متوجه نشود، پنجره مانند دستور \fBDestroy\fP نابود میشود. نکته: اگر پنجره پروتکل delete window را بپذیرد اما در پاسخ خود را نبندد، پنجره حذف نخواهد شد.
.RE
.sp
\fBDelete\fP
.RS 4
پیامی به پنجره میفرستد و از آن میخواهد خود را حذف کند، که اغلب باعث خروج برنامه میشود.
.RE
.sp
\fBDestroy\fP
.RS 4
پنجرهٔ یک برنامه را نابود میکند که معمولاً باعث کرش کردن و متوقف شدن ناگهانی برنامه میشود.
.RE
.sp
\fBIconify\fP [\fIbool\fP]
.RS 4
اگر پنجره از قبل آیکون نشده باشد، آن را آیکون (کمینه) میکند یا اگر قبلاً آیکون شده باشد، آن را از حالت آیکون خارج میسازد. آرگومان اختیاری \fIbool\fP یک آرگومان بولی است. "\fITrue\fP" به این معنی است که تنها آیکون کردن مجاز است، در حالی که "\fIFalse\fP" خروج از حالت آیکون را اجباری میکند. استفاده از "\fItoggle\fP" وضعیت را بین آیکونشده و خارج از آیکون تغییر میدهد.
.sp
تعدادی گزینهٔ \fBStyle\fP وجود دارد که بر ظاهر و رفتار آیکونها تأثیر میگذارند (مانند \fIStickyIcon\fP و \fINoIcon\fP).
.sp
برای سازگاری با نسخههای پیشین، آرگومان اختیاری میتواند بهجای "True" یک عدد مثبت، یا بهجای "False" یک عدد منفی باشد. توجه داشته باشید که این نحو منسوخ شده است و در آینده حذف خواهد شد.
.RE
.sp
\fBMaximize\fP [\fIflags\fP] [\fIbool | forget\fP] [\fIhorizontal\fP[p]] [\fIvertical\fP[p]]
.RS 4
بدون آرگومانهای اختیاری (یا اگر بیت \fIbool\fP مقدار "\fItoggle\fP" داشته باشد)، دستور \fBMaximize\fP باعث میشود پنجره بهطور متناوب بین اندازهٔ تمامصفحه و اندازهٔ عادی خود تغییر وضعیت دهد. برای وادار کردن پنجره به رفتن به حالت بیشینه (عادی)، میتوانید از مقدار "\fITrue\fP" یا "\fIFalse\fP" برای آرگومان \fIbool\fP استفاده کنید.
.sp
تنها با پارامتر "forget"، یک پنجرهٔ بیشینهشده به حالت عادی بازمیگردد اما اندازهٔ بیشینهشدهٔ فعلی خود را حفظ میکند. این ویژگی میتواند در ترکیب با دستورهای \fBResizeMaximize\fP و \fBResizeMoveMaximize\fP مفید باشد. اگر پنجره بیشینه نباشد، هیچ اتفاقی رخ نمیدهد.
.sp
با آرگومانهای اختیاری \fIhorizontal\fP و \fIvertical\fP که بهصورت درصدی از یک صفحهٔ کامل بیان میشوند، کاربر میتواند اندازهٔ جدید پنجره را کنترل کند. پسوند اختیاری \*(Aq\fIp\fP\*(Aq میتواند برای مشخص کردن پیکسل بهجای درصد اندازهٔ صفحه استفاده شود. اگر horizontal بزرگتر از 0 باشد، بعد افقی پنجره روی \fIhorizontal\fP*screen_width/100 تنظیم میشود. اگر مقدار کوچکتر از 0 باشد، اندازه از عرض صفحه کم میشود، یعنی \-25 همانند 75 است. اگر \fIhorizontal\fP برابر با "\fIgrow\fP" باشد، پنجره تا زمان رسیدن به هر مانعی تا اندازهٔ فضای موجود فعلی بیشینه (بزرگ) میشود. تغییر اندازهٔ عمودی نیز به همین صورت است. اگر هر دو مقدار افقی و عمودی "grow" باشند، پنجره ابتدا بهصورت عمودی و سپس بهصورت افقی برای یافتن فضا گسترش پیدا میکند. بهجای آرگومان افقی "grow"، میتوان از "\fIgrowleft\fP" یا "\fIgrowright\fP" و به همین ترتیب بهجای عمودی از "\fIgrowup\fP" و "\fIgrowdown\fP" استفاده کرد.
.sp
آرگومان اختیاری \fIflags\fP فهرستی جداشده با فاصله شامل کلمات کلیدی زیر است: \fIfullscreen\fP، \fIewmhiwa\fP، \fIgrowonwindowlayer\fP، \fIgrowonlayers\fP، \fIkeepgrowing\fP، \fIall_windows\fP، \fIboth_sides\fP و \fIscreen\fP.
گزینهٔ \fIfullscreen\fP در صورتی که هینت مناسب EWMH تنظیم شده باشد، باعث تمامصفحه شدن پنجره میشود. \fIewmhiwa\fP باعث میشود fvwm ناحیهٔ کاری EWMH را نادیده بگیرد. \fIgrowonwindowlayer\fP باعث میشود روشهای مختلف grow، پنجرههای مربوط به لایهای غیر از لایهٔ فعلی پنجرهای که در حال بیشینهسازی است را نادیده بگیرند. گزینهٔ \fIgrowonlayers\fP باید دو آرگومان عدد صحیح داشته باشد. اولی کمینهٔ لایه و دومی بیشینهٔ لایه برای استفاده است. پنجرههایی که خارج از این محدودهٔ لایهها باشند توسط روشهای grow نادیده گرفته میشوند. یک مقدار منفی برای آرگومان اول یا دوم به معنی در نظر نگرفتن هیچ کمینه یا بیشینهای برای لایه است. گزینهٔ \fIall_windows\fP تمام پنجرههای موجود در همان نمایشگر را در جهتی که پنجره در حال گسترش است در نظر میگیرد. از این گزینه میتوان برای گسترش پنجره تا لبهٔ پنجرهای که در کنار آن قرار دارد استفاده کرد. گزینهٔ \fIboth_sides\fP هنگام گسترش، هر دو طرف پنجرههای دیگر را در نظر میگیرد (بهطور پیشفرض تنها طرف نزدیک در نظر گرفته میشود). این گزینه میتواند برای گسترش پنجره تا مرزهای پنجرهای که اکنون درون آن قرار دارد به کار رود. گزینهٔ \fIkeepgrowing\fP به پنجره اجازه میدهد تا فراتر از هر مرز پنجرهای که در حال حاضر با آن در تماس است به گسترش خود ادامه دهد تا زمانی که به مرز نزدیکترین پنجرهٔ بعدی برسد. \fIscreen\fP باید آرگومانی داشته باشد که صفحهای را که عملیات باید روی آن انجام شود تعیین کند.
.sp
در اینجا چند مثال آورده شده است. مورد زیر دکمهای به نوار عنوان میافزاید تا پنجره را به اندازهٔ عمودی کامل صفحه تغییر دهد:
.sp
.if n .RS 4
.nf
.fam C
Mouse 0 4 A Maximize 0 100
.fam
.fi
.if n .RE
.sp
مورد زیر باعث کشیده شدن پنجرهها تا تمام عرض صفحه میشود:
.sp
.if n .RS 4
.nf
.fam C
Mouse 0 4 A Maximize 100 0
.fam
.fi
.if n .RE
.sp
این مورد پنجرهای با نصف اندازهٔ صفحه در هر جهت میسازد:
.sp
.if n .RS 4
.nf
.fam C
Mouse 0 4 A Maximize 50 50
.fam
.fi
.if n .RE
.sp
برای گسترش افقی یک پنجره تا زمانی که پنجرهٔ دیگری پیدا شود:
.sp
.if n .RS 4
.nf
.fam C
Mouse 0 4 A Maximize 0 grow
.fam
.fi
.if n .RE
.sp
برای گسترش یک پنجره تا زمانی که به پنجرهٔ دیگری در همان لایه یا لایهای بالاتر برخورد کند:
.sp
.if n .RS 4
.nf
.fam C
Mouse 0 4 A Maximize growonlayers $[w.layer] \-1 grow grow
.fam
.fi
.if n .RE
.sp
برای گسترش یک پنجره اما خالی گذاشتن ۶۰ پیکسل پایینی صفحه:
.sp
.if n .RS 4
.nf
.fam C
Mouse 0 4 A Maximize 100 \-60p
.fam
.fi
.if n .RE
.sp
از مقادیر بزرگتر از 100 میتوان با احتیاط استفاده کرد.
.RE
.sp
\fBRefresh\fP
.RS 4
باعث میشود تمام پنجرههای روی صفحه دوباره خود را ترسیم کنند. تمام بهروزرسانیهای معلق سبکها و ظاهر همهٔ پنجرهها بلافاصله اعمال میشوند؛ برای مثال اگر دستورهای \fBStyle\fP یا \fBTitleStyle\fP درون یک تابع fvwm صادر شده باشند.
.RE
.sp
\fBRefreshWindow\fP
.RS 4
باعث میشود پنجرهٔ انتخابشده دوباره خود را ترسیم کند. تمام بهروزرسانیهای معلق سبک و ظاهر پنجره بلافاصله اعمال میشوند؛ برای مثال اگر دستورهای \fBStyle\fP یا \fBTitleStyle\fP درون یک تابع fvwm صادر شده باشند.
.RE
.sp
\fBStick\fP [\fIbool\fP]
.RS 4
اگر آرگومان \fIbool\fP خالی یا "\fItoggle\fP" باشد، دستور \fBStick\fP پنجره را در صورت چسبان نبودن، چسبان (sticky) میکند یا در صورت چسبان بودن، آن را غیرچسبان میسازد. برای چسبان کردن پنجره صرفنظر از وضعیت فعلی آن، آرگومان \fIbool\fP باید "True" باشد. برای غیرچسبان کردن آن از "False" استفاده کنید.
.RE
.sp
\fBStickAcrossPages\fP [\fIbool\fP]
.RS 4
مانند \fBStick\fP عمل میکند اما پنجره را تنها در سراسر صفحهها (pages) چسبان میکند، نه در سراسر میزکارها (desks).
.RE.sp
\fBStickAcrossDesks\fP [\fIbool\fP]
.RS 4
مانند \fBStick\fP عمل میکند اما پنجره را فقط در سراسر میزکارها سنجاق میکند، نه در سراسر صفحهها.
.RE
.sp
\fBWindowShade\fP [bool] | [[ShadeAgain] \fIdirection\fP]
.RS 4
ویژگی جمعشدن پنجره (window shade) را برای پنجرههای دارای عنوان تغییر وضعیت میدهد. پنجرهها در وضعیت جمعشده تنها یک نوار عنوان (title\-bar) را نمایش میدهند. اگر \fIbool\fP داده نشود یا برابر با "\fItoggle\fP" باشد، وضعیت جمعشدگی پنجره تغییر میکند. اگر \fIbool\fP برابر "True" باشد، پنجره به وضعیت جمعشده مجبور میشود. اگر \fIbool\fP برابر "False" باشد، پنجره به وضعیت باز (جمعنشده) مجبور میشود. برای اجبار به جمعشدن در جهتی مشخص، میتوان از آرگومان \fIdirection\fP استفاده کرد. هر یک از رشتههای "\fINorth\fP"، "\fISouth\fP"، "\fIWest\fP"، "\fIEast\fP"، "\fINorthWest\fP"، "\fINorthEast\fP"، "\fISouthWest\fP"، "\fISouthEast\fP" یا "\fILast\fP" میتوانند مشخص شوند.
جهت میتواند با یک یا دو حرف معمول "\fIN\fP"، "\fINW\fP" و غیره خلاصه شود. استفاده از یک جهت روی پنجرهای که از پیش جمع شده است، پنجره را باز میکند. برای جمعکردن آن در جهتی دیگر، از گزینهٔ \fIShadeAgain\fP استفاده کنید. جهت \fILast\fP پنجره را در جهتی که آخرین بار جمع شده بود جمع میکند. اگر پنجره تا به حال جمع نشده باشد، بهگونهای جمع میشود که گویی هیچ جهتی مشخص نشده است. پنجرههای بدون عنوان نیز میتوانند جمع شوند. لطفاً به گزینههای \fIWindowShadeSteps\fP، \fIWindowShadeShrinks\fP، \fIWindowShadeScrolls\fP، \fIWindowShadeLazy\fP، \fIWindowShadeAlwaysLazy\fP و \fIWindowShadeBusy\fP از دستور \fBStyle\fP نیز مراجعه کنید. مثالها:
.sp
.if n .RS 4
.nf
.fam C
Style * WindowShadeShrinks, WindowShadeSteps 20, \(rs
WindowShadeLazy
Mouse 1 \- S WindowShade North
Mouse 1 [ S WindowShade West
Mouse 1 ] S WindowShade E
Mouse 1 _ S WindowShade S
.fam
.fi
.if n .RE
.sp
نکته: هنگامی که پنجرهای با یک آرگومان \fIdirection\fP جمع شده باشد و جهت عنوان پنجره تغییر کند (گزینهٔ \fBStyle\fP با نام \fITitleAtTop\fP را ببینید)، جهت جمعشدن تغییر نمیکند. این ممکن است بسیار عجیب به نظر برسد. پنجرههایی که بدون آرگومان \fIdirection\fP جمع شدهاند در جهت نوار عنوان جمعشده باقی میمانند.
.sp
برای سازگاری با نسخههای پیشین، آرگومان اختیاری همچنین میتواند ۱ برای مشخص کردن «on» و ۲ برای مشخص کردن «off» باشد. توجه داشته باشید که این نحو منسوخ شده است و در آینده حذف خواهد شد.
.RE
.SS "پیوندهای موش و کلید (Mouse & Key Bindings)"
.sp
\fBIgnoreModifiers\fP [\fIModifiers\fP]
.RS 4
به fvwm میگوید که هنگام تطبیق پیوندهای Mouse یا Key کدام کلیدهای تبدیل را نادیده بگیرد. \fBIgnoreModifiers\fP بر سبک \fIClickToFocus\fP نیز تأثیر میگذارد. این دستور متعلق به \fIconfig\fP شماست. اگر هنگامی که نشست fvwm شما از قبل راهاندازی شده و در حال اجرا است آن را صادر کنید، نتایج غیرقابلپیشبینی خواهند بود. این دستور باید پیش از شروع هر برنامه یا پودمانی در فایل \fIconfig\fP شما قرار گیرد (برای نمونه با دستور \fBExec\fP).
.sp
آرگومان \fIModifiers\fP نحوی مشابه پیوندهای \fBMouse\fP یا \fBKey\fP دارد، به همراه افزودن \*(AqL\*(Aq به معنای کلید caps lock. مقدار پیشفرض "L" است. \fIModifiers\fP میتواند حذف شود، به این معنی که هیچ کلید تبدیلی نادیده گرفته نمیشود. این دستور زمانی کاربرد دارد که کلیدهای num\-lock و scroll\-lock با میانبرهای شما تداخل داشته باشند. در XFree86 کلید تبدیل \*(Aq2\*(Aq معمولاً num\-lock است و \*(Aq5\*(Aq به کلید scroll\-lock اشاره دارد. برای غیرفعال کردن همه این کلیدهای تبدیل مزاحم میتوانید از این دستور استفاده کنید:
.sp
.if n .RS 4
.nf
.fam C
IgnoreModifiers L25
.fam
.fi
.if n .RE
.sp
اگر آرگومان \fIModifiers\fP رشتهٔ "\fIdefault\fP" باشد، fvwm به مقدار پیشفرض "L" بازمیگردد.
.sp
\fBمهم\fP این دستور ترافیک شبکه اضافی زیادی ایجاد میکند، که به پردازنده، اتصال شبکه، تعداد دستورهای \fBKey\fP یا \fBMouse\fP در فایل پیکربندی شما و تعداد کلیدهای تبدیلی که میخواهید نادیده بگیرید بستگی دارد. اگر سیستمی فوقالعاده سریع ندارید یا پیوندهای بسیار کمی دارید، نباید بیش از دو کلید تبدیل را نادیده بگیرید. یعنی نادیده نگیرید
.sp
اگر مشکلی با آن ندارید. در \fIFAQ\fP میتوانید راهحل بهتری برای این مشکل بیابید.
.RE
.sp
\fBEdgeCommand\fP [screen \fIRANDRNAME\fP] [\fIdirection\fP [\fIFunction\fP]]
.RS 4
یک دستور مشخص fvwm به نام \fIFunction\fP را به یک لبه از صفحه نمایش پیوند میدهد. جهت ممکن است یکی از "\fINorth\fP"، "\fITop\fP"، "\fIWest\fP"، "\fILeft\fP"، "\fISouth\fP"، "\fIBottom\fP"، "\fIRight\fP" و "\fIEast\fP" باشد. اگر \fIFunction\fP حذف شود، پیوند مربوط به این لبه حذف میشود. اگر EdgeCommand بدون هیچ آرگومانی فراخوانی شود، تمام پیوندهای لبهها حذف میشوند. اگر گزینهٔ لفظی \fIscreen\fP همراه با نام صفحه RandR به صورت \fIRANDRNAME\fP داده شود، دستور تنها برای نمایشگر دادهشده تنظیم میشود.
.sp
هنگامی که نشانگر موش وارد چارچوبهای ناوبری نامرئی احاطهکننده صفحه نمایش مرئی شود، \fIFunction\fP اجرا میشود. این پیوند تنها زمانی کار میکند که \fBEdgeThickness\fP روی مقداری بزرگتر از ۰ تنظیم شده باشد. اگر تابعی به یک لبه پیوند داده شود، پیمایش مشخصشده توسط \fBEdgeScroll\fP برای این لبه غیرفعال میشود. امکان پیوند دادن تابع تنها به برخی از لبهها و استفاده از سایر لبهها برای پیمایش وجود دارد. این دستور برای بالا بردن یا پایین بردن پنجرههای خاص در هنگام ورود نشانگر موش به یک لبه در نظر گرفته شده است. برای ایجاد تأخیر هنگام بالا بردن یا پایین بردن پنجرهها میتوان از \fBFvwmAuto\fP استفاده کرد. مثال زیر \fBFvwmButtons\fP را در صورتی که نشانگر موش وارد لبهٔ بالایی صفحه شود بالا میآورد.
.sp
.if n .RS 4
.nf
.fam C
# 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" \(rs
"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
.fam
.fi
.if n .RE
.sp
به طور معمول، چارچوبهای ناوبری نامرئی تنها روی لبههایی از صفحه نمایش قرار دارند که با صفحههای مجازی هممرز هستند. اگر لبهای از صفحه دستوری متصل به خود داشته باشد، چارچوب ناوبری همیشه روی آن لبه ایجاد میشود.
.RE
.sp
\fBEdgeLeaveCommand\fP [screen \fIRANDRNAME\fP] [\fIdirection\fP [\fIFunction\fP]]
.RS 4
یک دستور مشخص fvwm به نام \fIFunction\fP را به یک لبه از صفحه نمایش پیوند میدهد. جهت ممکن است یکی از "\fINorth\fP"، "\fITop\fP"، "\fIWest\fP"، "\fILeft\fP"، "\fISouth\fP"، "\fIBottom\fP"، "\fIRight\fP" و "\fIEast\fP" باشد. اگر \fIFunction\fP حذف شود، پیوند مربوط به این لبه حذف میشود. اگر EdgeLeaveCommand بدون هیچ آرگومانی فراخوانی شود، تمام پیوندهای لبهها حذف میشوند. اگر گزینهٔ لفظی \fIscreen\fP همراه با نام صفحه RandR به صورت \fIRANDRNAME\fP داده شود، دستور تنها برای نمایشگر دادهشده تنظیم میشود.
.sp
هنگامی که نشانگر موش چارچوبهای ناوبری نامرئی احاطهکننده صفحه نمایش مرئی را ترک کند، \fIFunction\fP اجرا میشود. این پیوند تنها زمانی کار میکند که \fBEdgeThickness\fP روی مقداری بزرگتر از ۰ تنظیم شده باشد. اگر تابعی به یک لبه پیوند داده شود، پیمایش مشخصشده توسط \fBEdgeScroll\fP برای این لبه غیرفعال میشود. امکان پیوند دادن تابع تنها به برخی از لبهها و استفاده از سایر لبهها برای پیمایش وجود دارد. این دستور برای بالا بردن یا پایین بردن پنجرههای خاص در هنگام خروج نشانگر موش از یک لبه در نظر گرفته شده است. برای ایجاد تأخیر هنگام بالا بردن یا پایین بردن پنجرهها میتوان از \fBFvwmAuto\fP استفاده کرد. مثال مربوط به \fBEdgeCommand\fP را ببینید.
.sp
به طور معمول، چارچوبهای ناوبری نامرئی تنها روی لبههایی از صفحه نمایش قرار دارند که با صفحههای مجازی هممرز هستند. اگر لبهای از صفحه دستوری متصل به خود داشته باشد، چارچوب ناوبری همیشه روی آن لبه ایجاد میشود.
.RE
.sp
\fBKey\fP [(\fIwindow\fP)] \fIKeyname\fP \fIContext\fP \fIModifiers\fP \fIFunction\fP
.RS 4
یک کلید صفحهکلید را به یک دستور مشخص fvwm پیوند میدهد، یا اگر \fIFunction\fP برابر \*(Aq\-\*(Aq باشد پیوند را حذف میکند. نحو آن مشابه پیوند \fBMouse\fP است، با این تفاوت که شماره دکمه موش با یک \fIKeyname\fP جایگزین میشود. به طور معمول، پیوند کلید هنگامی فعال میشود که کلید فشرده شود. \fIKeyname\fP یک نام کلید استاندارد X11 است همانطور که در \fI/usr/include/X11/keysymdef.h\fP (بدون پیشوند \fIXK_\fP) یا پایگاهداده keysym در \fI/usr/X11R6/lib/X11/XKeysymDB\fP تعریف شده است. تنها نامهای کلیدی که بدون کلیدهای تبدیل یا تنها با.sp
کلید نگهداشتهشده تضمین میشود که کار کند. فیلدهای \fIContext\fP و \fIModifiers\fP
همانند نگاشت \fBMouse\fP تعریف میشوند. با این حال، هنگامی که کلیدی را
فشار میدهید، پنجره بافت (context window) پنجرهای است که تمرکز صفحهکلید
(keyboard focus) را در اختیار دارد. این پنجره لزوماً همان پنجرهای نیست که
نشانگر ماوس روی آن قرار دارد (در حالتهای \fISloppyFocus\fP یا \fIClickToFocus\fP).
توجه داشته باشید که نگاشتهای کلید با بافت \*(Aq\fIR\fP\*(Aq (پنجره ریشه) در
\fISloppyFocus\fP و \fIClickToFocus\fP بهدرستی کار نمیکنند. اگر با مشکلی مواجه
شدید، به جای آن از دستور \fBPointerKey\fP استفاده کنید. اگر میخواهید کلیدها را
به پنجرهای با \fISloppyFocus\fP یا \fIClickToFocus\fP نگاشت کنید که قرار است
هنگامی که نشانگر روی پنجره نیست نیز کار کنند، fvwm فرض میکند نشانگر روی
پنجرهٔ کلاینت قرار دارد (یعنی باید از بافت \*(AqW\*(Aq استفاده کنید).
.sp
بافت ویژهٔ \*(Aq\fIM\fP\*(Aq برای منوها میتواند برای تعریف (یا بازتعریف)
کنترلهای منو استفاده شود. این بافت میتواند بهتنهایی یا همراه با \*(AqT\*(Aq،
\*(AqS\*(Aq، \*(AqI\*(Aq، \*(Aq[\*(Aq، \*(Aq]\*(Aq، \*(Aq\-\*(Aq و \*(Aq_\*(Aq
به کار رود. برای جزئیات به بخش \fBMenu Bindings\fP مراجعه کنید.
.sp
مثال زیر فهرست توکار پنجرهها را طوری نگاشت میکند تا هنگام
.sp
فشرده شدن، بدون در نظر گرفتن مکان نشانگر ماوس، باز شود:
.sp
.if n .RS 4
.nf
.fam C
Key F11 A SCM WindowList
.fam
.fi
.if n .RE
.sp
نگاشت یک کلید به دکمهٔ نوار عنوان باعث نمایان شدن آن دکمه میشود.
لطفاً برای جزئیات به دستور \fBMouse\fP مراجعه کنید.
.RE
.sp
\fBMouse\fP [(\fIwindow\fP)] \fIButton\fP \fIContext\fP \fIModifiers\fP \fIFunction\fP
.RS 4
یک نگاشت ماوس تعریف میکند، یا در صورتی که \fIFunction\fP برابر \*(Aq\-\*(Aq
باشد آن نگاشت را حذف میکند. \fIButton\fP شماره دکمه ماوس است. اگر \fIButton\fP
صفر باشد، هر دکمهای تابع تعیینشده را اجرا میکند. توجه داشته باشید که تنها
دکمههای ۱ تا ۵ ماوس بهطور کامل توسط X11 پشتیبانی میشوند. هر شمارهای بالاتر
از این تنها بهصورت جزئی کار میکند. توابع پیچیده را نمیتوان با این دکمهها
استفاده کرد و همچنین هیچ عملیاتی که نیازمند کشیدن نشانگر همزمان با فشرده
نگهداشتن دکمه باشد قابل انجام نیست. این امر به دلیل محدودیتهای X11 است.
بهطور پیشفرض، بالاترین شماره مجاز برای دکمه ۹ است.
.sp
پارامتر \fIContext\fP مشخص میکند که نگاشت در کجا اعمال میشود. بافتهای
معتبر عبارتند از: \*(Aq\fIR\fP\*(Aq برای پنجره ریشه، \*(Aq\fIW\fP\*(Aq برای پنجره
برنامه، \*(Aq\fID\fP\*(Aq برای برنامه میزکار (مانند kdesktop یا Nautilus desktop)،
\*(Aq\fIT\fP\*(Aq برای نوار عنوان پنجره، \*(Aq\fIS\fP\*(Aq برای نوار کناری، بالایی
یا پایینی پنجره، \*(Aq\fI[\fP\*(Aq، \*(Aq\fI]\fP\*(Aq، \*(Aq\fI\-\fP\*(Aq و
\*(Aq\fI_\fP\*(Aq تنها برای لبههای چپ، راست، بالا یا پایین، \*(Aq\fIF\fP\*(Aq برای
قاب پنجره (گوشهها)، \*(Aq<\*(Aq، \*(Aq^\*(Aq، \*(Aq>\*(Aq و \*(Aq\fIv\fP\*(Aq
برای گوشهٔ بالا-چپ، بالا-راست، پایین-راست یا پایین-چپ، \*(Aq\fII\fP\*(Aq برای
پنجره آیکون، یا \*(Aq\fI0\fP\*(Aq تا \*(Aq\fI9\fP\*(Aq برای دکمههای نوار عنوان،
یا هر ترکیبی از این حروف. بافت \*(Aq\fIA\fP\*(Aq برای هر بافتی اعمال میشود.
برای نمونه، بافت "FST" زمانی اعمال میشود که ماوس در هر کجای کادر پنجره به جز
دکمههای نوار عنوان قرار داشته باشد. برای یک پنجره بدون تزیینات، تنها \*(AqS\*(Aq
و \*(AqW\*(Aq معتبر هستند.
.sp
بافت ویژهٔ \*(Aq\fIM\fP\*(Aq برای منوها میتواند برای تعریف (یا بازتعریف)
کنترلهای منو استفاده شود. این بافت میتواند بهتنهایی یا همراه با \*(AqT\*(Aq،
\*(AqS\*(Aq، \*(AqI\*(Aq، \*(Aq[\*(Aq، \*(Aq]\*(Aq، \*(Aq\-\*(Aq و \*(Aq_\*(Aq
به کار رود. برای جزئیات به بخش \fBMenu Bindings\fP مراجعه کنید.
.sp
بافت ویژهٔ \*(Aq\fIP\fP\*(Aq کنترل میکند چه دکمههایی میتوانند برای جایگذاری
پنجره استفاده شوند. هنگام استفاده از این بافت هیچ تبدیلکنندهای (modifier)
مجاز نیست (\fIModifiers\fP باید N باشد)، هیچ \fIwindow\fP مجاز نیست، و \fIFunction\fP
باید یکی از مقادیر \fIPlaceWindow\fP، \fIPlaceWindowDrag\fP،
\fIPlaceWindowInteractive\fP، \fICancelPlacement\fP، \fICancelPlacementDrag\fP،
\fICancelPlacementInteractive\fP یا \fI\-\fP باشد.
.sp
دستور \fIPlaceWindow\fP دکمهٔ \fIButton\fP را برای جایگذاری پنجره، هم در
حالت تعاملی و هم جابهجایی با کشیدن (drag move)، قابل استفاده میکند.
دستور \fICancelPlacement\fP عکس این عمل را انجام میدهد؛ یعنی باعث میشود
\fIButton\fP جابهجایی را چه تعاملی و چه با کشیدن لغو کند. با این حال ممکن
است نحوه تغییر اندازه پنجرههای جدید پس از قرارگیری را بازنویسی نکند. این
مورد توسط دستور \fBEmulate\fP کنترل میشود. همچنین پنجرهای که در حال کشیده
شدن است را میتوان همواره با رها کردن دکمهٔ نگهداشتهشده هنگام کشیدن جایگذاری
کرد، بدون در نظر گرفتن اینکه روی \fIPlaceWindow\fP تنظیم شده باشد یا خیر.
.sp
توابع \fIPlaceWindowDrag\fP و \fIPlaceWindowInteractive\fP/\fICancelPlacementDrag\fP
و \fICancelPlacementInteractive\fP همانند \fIPlaceWindow\fP/\fICancelPlacement\fP
عمل میکنند، با این استثنا که فقط روی پنجرههایی اثر میگذارند که به ترتیب
کشیده شدهاند یا بهصورت تعاملی جایگذاری شدهاند.
.sp
مقدار \fI\-\fP معادل \fICancelPlacement\fP است.
.sp
مثال زیر همه دکمهها به جز دکمه ۳ را برای جایگذاری تعاملی قابل استفاده میکند
و جابهجاییهای با کشیدن را که با دکمههایی غیر از ۱ شروع شدهاند، در صورتی که
دکمه ۱ پیش از اتمام جابهجایی فشرده شود، لغو میکند:
.sp
.if n .RS 4
.nf
.fam C
Mouse 0 P N PlaceWindow
Mouse 3 P N CancelPlacement
Mouse 1 P N CancelPlacementDrag
.fam
.fi
.if n .RE
.sp
بهطور پیشفرض، نگاشت روی همه پنجرهها اعمال میشود. میتوانید با مشخص کردن
نام پنجره در کروشه تعیین کنید که نگاشت فقط به پنجرههای خاصی اعمال شود.
نام پنجره یک الگوی نویسه عمومی (wildcard) است که کلاس، منبع (resource) یا نام
پنجرهای را که میخواهید نگاشت روی آن اعمال شود مشخص میکند.
.sp
مثال زیر نشان میدهد چگونه میتوان از یک نگاشت کلید یکسان برای انجام توابع
مختلف بسته به پنجرهای که تمرکز دارد استفاده کرد:
.sp
.if n .RS 4
.nf
.fam C
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
.fam
.fi
.if n .RE
.sp
یک کنش \*(Aq\fI\-\-\fP\*(Aq مشخص میکند که رویداد باید برای رسیدگی به پنجرهٔ
تعیینشده ارسال شود. این تنها برای نگاشتهای مختص پنجره یک کنش معتبر است.
.sp
این مثال نحوه نمایش WindowList را هنگامی که دکمه ۳ روی یک پنجره rxvt فشرده
میشود نشان میدهد:
.sp
.if n .RS 4
.nf
.fam C
Mouse (rxvt) 3 A A WindowList
.fam
.fi
.if n .RE
.sp
توجه داشته باشید که Fvwm در واقع تمام رویدادها را برای یک نگاشت ویژهٔ پنجره
شنود میکند و (در صورتی که پنجره دارای تمرکز با هیچیک از نگاشتها تطابق
نداشته باشد) یک نسخهٔ ساختگی (synthetic) از رویداد را به پنجره ارسال میکند.
این رفتار باید برای بیشتر برنامهها شفاف باشد، اما (به دلایل امنیتی) برخی
برنامهها بهطور پیشفرض این رویدادهای ساختگی را نادیده میگیرند \- xterm یکی
از آنها است. برای فعال کردن رسیدگی به این رویدادها، خط زیر را به فایل
\fI~/.Xdefaults\fP خود بیفزایید:
.sp
.if n .RS 4
.nf
.fam C
XTerm*allowSendEvents:\& true
.fam
.fi
.if n .RE
.sp
پارامتر \fIModifiers\fP هر ترکیبی است از: \*(Aq\fIN\fP\*(Aq برای بدون تبدیلکننده،
\*(Aq\fIC\fP\*(Aq برای Control، \*(Aq\fIS\fP\*(Aq برای Shift، \*(Aq\fIM\fP\*(Aq
برای Meta، \*(Aq\fIL\fP\*(Aq برای Caps\-Lock یا \*(Aq\fIA\fP\*(Aq برای هر
تبدیلکنندهای. برای مثال، تبدیلکنندهٔ "SM" زمانی اعمال میشود که هر دوی کلیدهای
.sp
و
.sp
پایین نگه داشته شده باشند. تبدیلکنندههای mod1 تا mod5 در X11 با ارقام
\*(Aq1\*(Aq تا \*(Aq5\*(Aq نشان داده میشوند. تبدیلکنندهٔ \*(AqL\*(Aq بهطور پیشفرض
نادیده گرفته میشود. برای فعال کردن آن، از دستور \fBIgnoreModifiers\fP استفاده کنید.
.sp
پارامتر \fIFunction\fP یکی از دستورات fvwm است.
.sp
دکمههای نوار عنوان شمارهگذاری شدهاند، بهطوری که دکمههای با شماره فرد در
سمت چپ نوار عنوان و شمارههای زوج در سمت راست قرار دارند. دکمههای با شماره
کوچکتر به سمت بیرون پنجره و دکمههای با شماره بزرگتر به سمت وسط پنجره نمایش
داده میشوند (0 مخفف 10 است). بهطور خلاصه، دکمهها بدین صورت شمارهگذاری شدهاند:
.sp
.if n .RS 4
.nf
.fam C
1 3 5 7 9\& 0 8 6 4 2
.fam
.fi
.if n .RE
.sp
بالاترین شماره فرد دکمهای که کنشی به آن نگاشت شده است، تعداد دکمههای رسمشده
در سمت چپ نوار عنوان را مشخص میکند. بالاترین شماره زوج نیز تعداد دکمههای
رسمشده در سمت راست را تعیین میکند. کنشها را میتوان هم به دکمههای ماوس
و هم به کلیدهای صفحهکلید نگاشت کرد.
.RE.sp
\fBPointerKey\fP [(\fIwindow\fP)] \fIKeyname\fP \fIContext\fP \fIModifiers\fP \fIFunction\fP
.RS 4
این دستور دقیقاً مانند دستور \fBKey\fP عمل میکند. تنها تفاوت این است که این مقیدسازی روی پنجره زیر اشارهگر اعمال میشود. در مقابل، مقیدسازیهای عادی کلید روی پنجره دارای فوکوس کار میکنند. دستور \fBPointerKey\fP میتواند برای نمونه برای مقید کردن کلیدها به پنجره ریشه (root window) در صورتی که از \fISloppyFocus\fP یا \fIClickToFocus\fP استفاده میکنید، به کار رود. با این حال، برخی از برنامهها (برای نمونه xterm) دیگر قادر به پردازش این کلید نیستند، حتی اگر اشارهگر روی پنجره xterm باشد. توصیه میشود از دستور \fBPointerKey\fP تنها برای ترکیب کلیدهایی استفاده کنید که در هیچ پنجره برنامهای مورد نیاز نیستند.
.sp
مثال:
.sp
.if n .RS 4
.nf
.fam C
Style * SloppyFocus
PointerKey f1 a m Menu MainMenu
.fam
.fi
.if n .RE
.RE
.SS "کنترل سبکهای پنجره (Controlling Window Styles)"
.sp
برای خوانایی، دستورات این بخش به ترتیب الفبایی مرتب نشدهاند. توضیحات دستور \fBStyle\fP را میتوان در انتهای این بخش یافت.
.sp
دستورهای: \fBFocusStyle\fP، \fBStyle\fP و \fBWindowStyle\fP میتوانند مؤلفههای شرطی اختیاری را برای تطبیق با برخی ویژگیهای یک پنجره بپذیرند.
.sp
برای نمونه:
.sp
.if n .RS 4
.nf
.fam C
Style (Name mc) Sticky
.fam
.fi
.if n .RE
.sp
پنجرهای را که نام آن با \*(Aqmc\*(Aq تطابق داشته باشد، \fISticky\fP میکند.
.sp
.if n .RS 4
.nf
.fam C
Style (Name mc, Class XTerm) StartIconic
.fam
.fi
.if n .RE
.sp
این مثال پنجرهای از xterm(1) را که WM_CLASS آن با \*(AqXTerm\*(Aq تطابق داشته و نامش \*(Aqmc\*(Aq باشد، آغاز میکند.
.sp
فهرست معتبری از ویژگیها برای آزمودن عبارتند از:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
Resource
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
Class
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
Name
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
Icon
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
WindowID
.RE
.sp
تطبیق ویژگیهای مشخصشده برای هر خط \fBStyle\fP با یکدیگر عطف منطقی (AND) میشوند و برای اعمال شدن سبکها، باید \fBهمه\fP ویژگیها مطابقت داشته باشند.
.sp
\fBنکته\fP: برای از بین بردن یک خط سبک حاوی ویژگیهای پنجره، باید از \fBDestroyStyle\fP استفاده شود. برای نمونه:
.sp
.if n .RS 4
.nf
.fam C
DestroyStyle (Name mc, Class XTerm)
.fam
.fi
.if n .RE
.sp
هنگام از بین بردن یک سبک، نیازی به مشخص کردن آرگومانهای سبک نیست و تنها مؤلفههای ویژگی لازم هستند.
.sp
خطوط موجود \fBStyle\fP به شکل:
.sp
.if n .RS 4
.nf
.fam C
Style Application* Sticky, StartIconic
.fam
.fi
.if n .RE
.sp
همچنان پشتیبانی میشوند و رفتار آنها بدون تغییر باقی میماند.
.sp
.ce
\l'\n(.lu*25u/100u\(ap'
.sp
\fBFocusStyle\fP \fIstylename\fP \fIoptions\fP
.RS 4
دقیقاً مانند دستور \fBStyle\fP عمل میکند، اما تنها سبکهای مرتبط با خطمشی فوکوس را که با "FP" آغاز میشوند میپذیرد. پیشوند را میتوان حذف کرد، اما به بهای صرف اندکی زمان. \fBFocusStyle\fP با هدف خواناتر کردن فایل پیکربندی در نظر گرفته شده است. مثال:
.sp
.if n .RS 4
.nf
.fam C
FocusStyle * EnterToFocus, !LeaveToUnfocus
.fam
.fi
.if n .RE
.sp
معادل است با
.sp
.if n .RS 4
.nf
.fam C
Style * FPEnterToFocus, !FPLeaveToUnfocus
.fam
.fi
.if n .RE
.RE
.sp
\fBDestroyStyle\fP \fIstyle\fP
.RS 4
سبکی با نام \fIstyle\fP را حذف میکند. تغییرات فوراً اعمال میشوند. توجه داشته باشید که \fIstyle\fP یک رشته جستجوی حاوی نویسه عمومی (wildcard) نیست، بلکه یک رشته حساس به حروف بزرگ و کوچک است که باید دقیقاً با دستور اصلی \fBStyle\fP مطابقت داشته باشد.
.sp
از بین بردن سبک "*" امکانپذیر است، اما در واقع توصیه نمیشود. برای نمونه:.sp
.if n .RS 4
.nf
.fam C
DestroyStyle Application*
.fam
.fi
.if n .RE
.sp
این دستور تمام تنظیمات مربوط به سبک با نام «Application*» را حذف میکند، و نه تمام
سبکهایی که با «Application» شروع میشوند.
.RE
.sp
\fBDestroyWindowStyle\fP
.RS 4
سبکهای تنظیمشده توسط دستور \fBWindowStyle\fP را روی پنجرهٔ
انتخابشده حذف میکند. تغییرات بلافاصله اعمال میشوند.
.RE
.sp
\fBUpdateStyles\fP
.RS 4
تمام بهروزرسانیهای معوق سبکها و ظاهر همهٔ پنجرهها فوراً
اعمال میشوند؛ برای نمونه اگر دستورهای \fBStyle\fP، \fIWindowStyle\fP یا \fITitleStyle\fP
درون یک تابع fvwm صادر شده باشند.
.RE
.sp
\fBStyle\fP \fIstylename\fP \fIoptions\fP .\|.\|.
.RS 4
دستور \fBStyle\fP برای تنظیم ویژگیهای یک پنجره روی مقادیری غیر از
پیشفرض، یا برای تعیین سبکهای پیشفرض مدیر پنجره به کار میرود.
.sp
\fIstylename\fP میتواند نام پنجره، کلاس، نام نمایان یا رشتهٔ منبع (resource)
آن باشد. این عبارت میتواند شامل نویسههای عام \*(Aq*\*(Aq و \*(Aq?\*(Aq باشد که به
شیوهٔ معمول نامگذاری فایلها در یونیکس مطابقت داده میشوند. گزینههای چندگانهٔ سبک در یک
دستور \fBStyle\fP واحد، از چپ به راست خوانده میشوند؛ درست مانند آنکه یکی پس از
دیگری در دستورهایی جداگانه صادر شده باشند. یک سبک معین همواره بر تمامی
سبکهای متعارضی که پیشتر (یا در همان خط سبک، در سمت چپتر) تعیین شدهاند،
اولویت داشته و آنها را بازنویسی میکند.
.sp
نکته: به پنجرههایی که نامی ندارند (WM_NAME)، نام
«Untitled» داده میشود؛ به پنجرههایی که فاقد کلاس هستند (WM_CLASS, res_class)،
کلاس «NoClass» و به آنهایی که منبع ندارند
(WM_CLASS, res_name)، منبع «NoResource» اختصاص مییابد.
.sp
اگر برای پنجرهای منبع «fvwmstyle» تنظیم شده باشد، مقدار آن منبع علاوه بر
هر نام پنجرهای هنگام انتخاب سبک مورد استفاده قرار میگیرد.
.sp
\fIoptions\fP فهرستی جداشده با ویرگول شامل یک یا چند کلیدواژه از موارد
زیر است. هر گروه از نامهای سبک با خط مایل
(\*(Aq/\*(Aq) از هم جدا شده است. آخرین سبک در این گروهها، پیشفرض است. \fIBorderWidth\fP،
\fIHandleWidth\fP، \fICornerLength\fP، \fI!Icon\fP / \fIIcon\fP، \fIMiniIcon\fP،
\fIIconBox\fP، \fIIconGrid\fP، \fIIconFill\fP، \fIIconSize\fP، \fI!Title\fP / \fITitle\fP،
\fITitleAtBottom\fP / \fITitleAtLeft\fP / \fITitleAtRight\fP /
\fITitleAtTop\fP، \fILeftTitleRotatedCW\fP / \fILeftTitleRotatedCCW\fP،
\fIRightTitleRotatedCCW\fP / \fIRightTitleRotatedCW\fP،
\fITopTitleRotated\fP / \fITopTitleNotRotated\fP، \fIBottomTitleRotated\fP /
\fIBottomTitleNotRotated\fP، \fI!UseTitleDecorRotation\fP /
\fIUseTitleDecorRotation\fP، \fIStippledTitle\fP / \fI!StippledTitle\fP،
\fIStippledIconTitle\fP / \fI!StippledIconTitle\fP، \fIIndexedWindowName\fP /
\fIExactWindowName\fP، \fIIndexedIconName\fP / \fIExactIconName\fP، \fITitleFormat\fP
/ \fIIconTitleFormat\fP / \fI!Borders\fP / \fIBorders\fP، \fI!Handles\fP / \fIHandles\fP،
\fIWindowListSkip\fP / \fIWindowListHit\fP، \fICirculateSkip\fP / \fICirculateHit\fP،
\fICirculateSkipShaded\fP / \fICirculateHitShaded\fP، \fICirculateSkipIcon\fP /
\fICirculateHitIcon\fP، \fILayer\fP، \fIStaysOnTop\fP / \fIStaysOnBottom\fP /
\fIStaysPut\fP، \fISticky\fP / \fISlippery\fP، \fIStickyAcrossPages\fP /
\fI!StickyAcrossPages\fP، \fIStickyAcrossDesks\fP / \fI!StickyAcrossDesks\fP،
\fI!StickyStippledTitle\fP / \fIStickyStippledTitle\fP،
\fI!StickyStippledIconTitle\fP / \fIStickyStippledIconTitle\fP، \fIStartIconic\fP
/ \fIStartNormal\fP، \fIColorset\fP، \fIHilightColorset\fP، \fIBorderColorset\fP،
\fIHilightBorderColorset\fP، \fIIconTitleColorset\fP،
\fIHilightIconTitleColorset\fP، \fIIconBackgroundColorset\fP،
\fIIconTitleRelief\fP، \fIIconBackgroundRelief\fP، \fIIconBackgroundPadding\fP،
\fIFont\fP، \fIIconFont\fP، \fIStartsOnDesk\fP / \fIStartsOnPage\fP /
\fIStartsAnyWhere\fP، \fIStartsOnScreen\fP، \fIStartShaded\fP / \fI!StartShaded\fP،
\fIManualPlacementHonorsStartsOnPage\fP /
\fIManualPlacementIgnoresStartsOnPage\fP، \fICaptureHonorsStartsOnPage\fP /
\fICaptureIgnoresStartsOnPage\fP، \fIRecaptureHonorsStartsOnPage\fP /
\fIRecaptureIgnoresStartsOnPage\fP، \fIStartsOnPageIncludesTransients\fP /
\fIStartsOnPageIgnoresTransients\fP، \fIIconTitle\fP / \fI!IconTitle\fP،
\fIMwmButtons\fP / \fIFvwmButtons\fP، \fIMwmBorder\fP / \fIFvwmBorder\fP، \fIMwmDecor\fP /
\fI!MwmDecor\fP، \fIMwmFunctions\fP / \fI!MwmFunctions\fP، \fIHintOverride\fP /
\fI!HintOverride\fP، \fI!Button\fP / \fIButton\fP، \fIResizeHintOverride\fP /
\fI!ResizeHintOverride\fP، \fIOLDecor\fP / \fI!OLDecor\fP، \fIStickyIcon\fP / \fISlipperyIcon\fP،
\fIStickyAcrossPagesIcon\fP / \fI!StickyAcrossPagesIcon\fP،
\fIStickyAcrossDesksIcon\fP / \fI!StickyAcrossDesksIcon\fP، \fIManualPlacement\fP
/ \fICascadePlacement\fP / \fIMinOverlapPlacement\fP /
\fIMinOverlapPercentPlacement\fP / \fITileManualPlacement\fP /
\fITileCascadePlacement\fP / \fIPositionPlacement\fP،
\fIMinOverlapPlacementPenalties\fP، \fIMinOverlapPercentPlacementPenalties\fP،
\fIDecorateTransient\fP / \fINakedTransient\fP، \fIDontRaiseTransient\fP /
\fIRaiseTransient\fP، \fIDontLowerTransient\fP / \fILowerTransient\fP،
\fIDontStackTransientParent\fP / \fIStackTransientParent\fP، \fISkipMapping\fP /
\fIShowMapping\fP، \fIScatterWindowGroups\fP / \fIKeepWindowGroupsOnDesk\fP،
\fIUseDecor\fP، \fIUseStyle\fP، \fI!UsePPosition\fP / \fINoPPosition\fP /
\fIUsePPosition\fP، \fI!UseUSPosition\fP، \fINoUSPosition\fP / \fIUseUSPosition\fP،
\fI!UseTransientPPosition\fP، \fINoTransientPPosition\fP /
\fIUseTransientPPosition\fP، \fI!UseTransientUSPosition\fP /
\fINoTransientUSPosition\fP / \fIUseTransientUSPosition\fP، \fI!UseIconPosition\fP
/ \fINoIconPosition\fP / \fIUseIconPosition\fP، \fILenience\fP / \fI!Lenience\fP،
\fIClickToFocus\fP / \fISloppyFocus\fP / \fIMouseFocus\fP|\fIFocusFollowsMouse\fP /
\fINeverFocus\fP، \fIClickToFocusPassesClickOff\fP /
\fIClickToFocusPassesClick\fP، \fIClickToFocusRaisesOff\fP /
\fIClickToFocusRaises\fP، \fIMouseFocusClickRaises\fP /
\fIMouseFocusClickRaisesOff\fP، \fIGrabFocus\fP / \fIGrabFocusOff\fP،
\fIGrabFocusTransientOff\fP / \fIGrabFocusTransient\fP، \fIFPFocusClickButtons\fP،
\fIFPFocusClickModifiers\fP، \fI!FPSortWindowlistByFocus\fP /
\fIFPSortWindowlistByFocus\fP، \fIFPClickRaisesFocused\fP /
\fI!FPClickRaisesFocused\fP، \fIFPClickDecorRaisesFocused\fP /
\fI!FPClickDecorRaisesFocused\fP، \fIFPClickIconRaisesFocused\fP /
\fI!FPClickIconRaisesFocused\fP، \fI!FPClickRaisesUnfocused\fP /
\fIFPClickRaisesUnfocused\fP، \fIFPClickDecorRaisesUnfocused\fP /
\fI!FPClickDecorRaisesUnfocused\fP، \fIFPClickIconRaisesUnfocused\fP /
\fI!FPClickIconRaisesUnfocused\fP، \fIFPClickToFocus\fP / \fI!FPClickToFocus\fP،
\fIFPClickDecorToFocus\fP / \fI!FPClickDecorToFocus\fP، \fIFPClickIconToFocus\fP /
\fI!FPClickIconToFocus\fP، \fI!FPEnterToFocus\fP / \fIFPEnterToFocus\fP،
\fI!FPLeaveToUnfocus\fP / \fIFPLeaveToUnfocus\fP، \fI!FPFocusByProgram\fP /
\fIFPFocusByProgram\fP، \fI!FPFocusByFunction\fP / \fIFPFocusByFunction\fP،
\fIFPFocusByFunctionWarpPointer\fP / \fI!FPFocusByFunctionWarpPointer\fP،
\fIFPLenient\fP / \fI!FPLenient\fP، \fI!FPPassFocusClick\fP / \fIFPPassFocusClick\fP،
\fI!FPPassRaiseClick\fP / \fIFPPassRaiseClick\fP، \fIFPIgnoreFocusClickMotion\fP /
\fI!FPIgnoreFocusClickMotion\fP، \fIFPIgnoreRaiseClickMotion\fP /
\fI!FPIgnoreRaiseClickMotion\fP، \fI!FPAllowFocusClickFunction\fP /
\fIFPAllowFocusClickFunction\fP، \fI!FPAllowRaiseClickFunction\fP /
\fIFPAllowRaiseClickFunction\fP، \fIFPGrabFocus\fP / \fI!FPGrabFocus\fP،
\fI!FPGrabFocusTransient\fP / \fIFPGrabFocusTransient\fP،
\fIFPOverrideGrabFocus\fP / \fI!FPOverrideGrabFocus\fP، \fIFPReleaseFocus\fP /
\fI!FPReleaseFocus\fP، \fI!FPReleaseFocusTransient\fP /
\fIFPReleaseFocusTransient\fP، \fIFPOverrideReleaseFocus\fP /
\fI!FPOverrideReleaseFocus\fP، \fIStartsLowered\fP / \fIStartsRaised\fP،
\fIIgnoreRestack\fP / \fIAllowRestack\fP، \fIFixedPosition\fP /
\fIVariablePosition\fP، \fIFixedUSPosition\fP / \fIVariableUSPosition\fP،
\fIFixedPPosition\fP / \fIVariablePPosition\fP، \fIFixedSize\fP / \fIVariableSize\fP،
\fIFixedUSSize\fP / \fIVariableUSSize\fP، \fIFixedPSize\fP / \fIVariablePSize\fP،
\fI!Closable\fP / \fIClosable\fP، \fI!Iconifiable\fP / \fIIconifiable\fP،
\fI!Maximizable\fP / \fIMaximizable\fP، \fI!AllowMaximizeFixedSize\fP /
\fIAllowMaximizeFixedSize\fP، \fIIconOverride\fP / \fINoIconOverride\fP /
\fINoActiveIconOverride\fP، \fIDepressableBorder\fP / \fIFirmBorder\fP،
\fIMinWindowSize\fP، \fIMaxWindowSize\fP، \fIIconifyWindowGroups\fP /
\fIIconifyWindowGroupsOff\fP، \fIResizeOpaque\fP / \fIResizeOutline\fP،
\fIBackingStore\fP / \fIBackingStoreOff\fP / \fIBackingStoreWindowDefault\fP،
\fIOpacity\fP / \fIParentalRelativity\fP، \fISaveUnder\fP / \fISaveUnderOff\fP،
\fIWindowShadeShrinks\fP / \fIWindowShadeScrolls\fP، \fIWindowShadeSteps\fP،
\fIWindowShadeAlwaysLazy\fP / \fIWindowShadeBusy\fP / \fIWindowShadeLazy,\fP
\fIEWMHDonateIcon\fP / \fIEWMHDontDonateIcon\fP، \fIEWMHDonateMiniIcon\fP /
\fIEWMHDontDonateMiniIcon\fP، \fIEWMHMiniIconOverride\fP /
\fIEWMHNoMiniIconOverride\fP، \fIEWMHUseStackingOrderHints\fP /
\fIEWMHIgnoreStackingOrderHints\fP، \fIEWMHIgnoreStateHints\fP /
\fIEWMHUseStateHints\fP، \fIEWMHIgnoreStrutHints\fP / \fIEWMHUseStrutHints\fP،
\fIEWMHIgnoreWindowType\fP / \fI!EWMHIgnoreWindowType\fP،
\fIEWMHMaximizeIgnoreWorkingArea\fP / \fIEWMHMaximizeUseWorkingArea\fP /
\fIEWMHMaximizeUseDynamicWorkingArea\fP، \fIEWMHPlacementIgnoreWorkingArea\fP
/ \fIEWMHPlacementUseWorkingArea\fP /
\fIEWMHPlacementUseDynamicWorkingArea\fP، \fIMoveByProgramMethod\fP،
\fIUnmanaged\fP، \fIState\fP، \fISnapGrid\fP، \fISnapAttraction\fP، \fIEdgeMoveDelay\fP،
\fIEdgeResizeDelay\fP. \fIEdgeMoveResistance\fP، \fIInitialMapCommand\fP
.sp
در فهرست بالا برخی گزینهها به صورت
style\-option/opposite\-style\-option آورده شدهاند. برای
ورودیهایی که دارای آن هستند، opposite\-style\-option رفتار پیشفرض fvwm را
توصیف میکند و چنانچه بخواهید رفتار پیشفرض fvwm را تغییر دهید، میتوانید
از آن استفاده کنید.
.sp
\fBخطمشی تمرکز (Focus policy)\fP
.RS 4
\fIClickToFocus\fP به fvwm تعیین میکند زمانی که درون یک پنجره کلیک میشود،
تمرکز را به آن بدهد. گزینهٔ پیشفرض \fIMouseFocus\fP (یا نام مستعار آن
\fIFocusFollowsMouse\fP) به fvwm میگوید به محض ورود نشانگر موش به
پنجره، تمرکز را به آن بدهد و به محض خروج نشانگر از پنجره، تمرکز را پس
بگیرد. \fISloppyFocus\fP مشابه است، اما اگر نشانگر پنجره را برای عبور از
روی پنجرهٔ ریشه (root window) یا یک پنجرهٔ ClickToFocus ترک کند، تمرکز را
از دست نمیدهد (مگر اینکه روی آن کلیک کنید)؛ این امر امکان دور کردن موش
را بدون از دست دادن تمرکز فراهم میسازد. پنجرهای با سبک \fINeverFocus\fP
هرگز تمرکز دریافت نمیکند. برای نمونه، این ویژگی برای پودمانهایی مانند
\fBFvwmButtons\fP مفید است.
نکته: به محض اینکه هر یک از سبکهای «FP.\|.\|.» استفاده شود، مقادیر پیشفرضی
که همراه خطمشیهای تمرکز پایه میآیند، با استفادهٔ دوباره از این خطمشیها بازیابی
نخواهند شد. برای مثال، زمانی که !FPGrabFocus استفاده شده باشد، استفاده از
ClickToFocus مقدار FPGrabFocus را بازیابی نمیکند.
.sp
مدل تمرکز را میتوان با چندین گزینهٔ اضافی بهبود بخشید. در
fvwm\-2.5.3 و نگارشهای جدیدتر، تعداد زیادی گزینهٔ پیشرفته وجود دارد که
با «FP» یا «!FP» آغاز میشوند. این گزینهها روزی جایگزین گزینههای قدیمیتر
خواهند شد و در ابتدا توضیح داده شدهاند. استفاده از هر یک از این گزینههای
جدید ممکن است سازگاری با نگارشهای قدیمیتر را محدود کند. بهطور کلی،
گزینههایی که با «FP» آغاز میشوند یک قابلیت را فعال و گزینههایی که با
«!FP» آغاز میشوند آن را غیرفعال میکنند.
.RE.sp
\fBفوکوس کردن روی پنجره\fP
.RS 4
با \fIFPEnterToFocus\fP، هنگامی که نشانگر وارد یک پنجره میشود، آن پنجره فوکوس را دریافت میکند.
.sp
با \fIFPLeaveToUnfocus\fP، پنجره زمانی که نشانگر از آن خارج میشود فوکوس را از دست میدهد.
.sp
با \fIFPClickToFocus\fP، \fIFPClickDecorToFocus\fP یا
\fIFPClickIconToFocus\fP، با کلیک روی فضای داخلی پنجره، تزئینات آن یا آیکون مربوطهاش، پنجره فوکوس را دریافت میکند.
.sp
سبک \fIFPFocusByProgram\fP به پنجرهها اجازه میدهد که خودشان فوکوس را در دست بگیرند.
.sp
سبک !\fIFPFocusByFunction\fP مانع از آن میشود که یک پنجره فوکوس را از طریق دستورات \fBFocus\fP و \fBFlipFocus\fP دریافت کند.
.sp
سبک \fIFPFocusByFunctionWarpPointer\fP کنترل میکند که آیا هنگام استفاده از دستور \fBFocus\fP، نشانگر به پنجرهٔ انتخابشده پرش میکند یا خیر.
.sp
سبک \fIFPLenient\fP اجازه میدهد پنجرههایی که خواهان فوکوس نیستند، مانند \fBFvwmPager\fP یا xclock، فوکوس را دریافت کنند.
.sp
سبک \fIFPFocusClickButtons\fP فهرستی از کلیدهای موشواره را دریافت میکند که در صورت استفاده از سبک مناسب، با کلیک روی آنها میتوان پنجره را فوکوس کرد یا بالا آورد. حالت پیشفرض استفاده از سه کلید اول ("123") است.
.sp
سبک \fIFPFocusClickModifiers\fP درست مانند دستور \fBKey\fP فهرستی از کلیدهای تغییردهنده را میگیرد. برای عملکرد کلیک جهت فوکوس یا بالا آوردن پنجره، باید دقیقاً همان ترکیب کلیدهای تغییردهنده فشرده شود. حالت پیشفرض عدم استفاده از کلیدهای تغییردهنده ("N") است.
.sp
با سبک \fIFPPassFocusClick\fP، کلیکی که برای فوکوس کردن روی پنجره استفاده شده است به برنامه منتقل میشود.
.sp
با سبک \fIFPAllowFocusClickFunction\fP، کلیکی که برای فوکوس کردن روی پنجره به کار رفته میتواند یک کنش عادی را که با دستور \fBMouse\fP به پنجره متصل شده است نیز اجرا کند.
.sp
اگر از سبک \fIFPIgnoreFocusClickMotion\fP استفاده شود، کلیک در یک پنجره و سپس کشیدن نشانگر با کلید فشردهشده، بهعنوان کلیک جهت فوکوس روی پنجره به حساب نمیآید. در عوض، برنامه این رویدادها را بهصورت عادی پردازش میکند. این قابلیت برای انتخاب متن در پنجرهٔ پایانه با موشواره بدون بالا آوردن پنجره سودمند است. با این حال، دیگر تضمینی وجود ندارد که نگاشتهای موشواره روی پنجرهٔ کلاینت کار کنند (به دستور \fBMouse\fP مراجعه کنید). این سبک کلیک اولیه را مجبور به ارسال به برنامه میکند. فاصلهای که نشانگر برای تحریک این رویداد باید حرکت داده شود توسط دستور \fBMoveThreshold\fP کنترل میشود.
.sp
سبکهای \fIFPSortWindowlistByFocus\fP و !\fIFPSortWindowlistByFocus\fP
کنترل میکنند که آیا فهرست پنجرههای داخلی بر اساس ترتیب فوکوس شدن پنجرهها مرتب شود یا بر اساس ترتیب ایجاد شدن آنها. مورد دوم حالت پیشفرض برای \fIClickToFocus\fP و \fISloppyFocus\fP است.
.sp
\fBکلیک روی پنجره برای بالا آوردن آن\fP
.sp
سبکهای \fIFPClickRaisesFocused\fP، \fIFPClickDecorRaisesFocused\fP و
\fIFPClickIconRaisesFocused\fP به کاربر امکان میدهند با کلیک روی فضای داخلی، تزئینات یا آیکون پنجره در حالی که از قبل فوکوس دارد، آن را بالا بیاورند.
.sp
سبکهای \fIFPClickRaisesUnfocused\fP، \fIFPClickDecorRaisesUnfocused\fP
و \fIFPClickIconRaisesUnfocused\fP این امکان را فراهم میکنند که با کلیک روی فضای داخلی، تزئینات یا آیکون پنجره در حالی که هنوز فوکوس ندارد، آن را بالا بیاورند.
.sp
با سبک \fIFPPassRaiseClick\fP، کلیکی که برای بالا آوردن پنجره استفاده شده است به برنامه ارسال میشود.
.sp
با سبک \fIFPAllowRaiseClickFunction\fP، کلیکی که برای بالا آوردن پنجره به کار رفته میتواند یک کنش عادی متصلشده به پنجره با دستور \fBMouse\fP را نیز اجرا کند.
.sp
اگر از سبک \fIFPIgnoreRaiseClickMotion\fP استفاده شود، کلیک در پنجره و سپس کشیدن نشانگر در حالی که کلید فشرده نگه داشته شده است، بهعنوان کلیک برای بالا آوردن پنجره در نظر گرفته نمیشود. در عوض، برنامه این رویدادها را بهطور عادی پردازش میکند. این قابلیت برای انتخاب متن در پنجرهٔ پایانه با موشواره، بدون بالا آوردن پنجره مفید است. با این وجود، دیگر تضمینی برای کارکرد نگاشتهای موشواره روی پنجرهٔ کلاینت وجود ندارد (به دستور \fBMouse\fP مراجعه کنید). توجه داشته باشید که این سبک کلیک اولیه را مجبور به ارسال به برنامه میکند. فاصلهای که نشانگر برای فعالسازی این مورد باید حرکت کند توسط دستور \fBMoveThreshold\fP کنترل میشود.
.sp
\fBدر دست گرفتن فوکوس هنگام ایجاد پنجرهٔ جدید\fP
.sp
پنجرههای جدید عادی یا گذرا (transient) دارای سبک \fIFPGrabFocus\fP یا
\fIFPGrabFocusTransient\fP هنگام ایجاد شدن، بهطور خودکار فوکوس را دریافت میکنند. سبک \fIFPGrabFocus\fP حالت پیشفرض برای پنجرههایی با سبک \fIClickToFocus\fP است. توجه داشته باشید که حتی در صورت غیرفعال بودن این سبکها، ممکن است برنامه خودش فوکوس را در دست بگیرد؛ Fvwm نمیتواند مانع از این کار شود.
.sp
سبک \fIOverrideGrabFocus\fP به fvwm دستور میدهد که هرگز فوکوس را از چنین پنجرهای از طریق سبکهای \fIGrabFocus\fP یا \fIGrabFocusTransient\fP نگیرد. این ویژگی زمانی مفید است که مایلید پنجرههای گذرا، برای نمونه در یک مرورگر وب، بلافاصله فوکوس را دریافت کنند، اما در حین کار در پنجرهٔ پایانه یا یک واژهپرداز چنین اتفاقی نیفتد.
.sp
سه سبک فوق همراه با \fIFPReleaseFocus\fP،
\fIFPReleaseFocusTransient\fP و \fIFPOverrideReleaseFocus\fP ارائه میشوند. این سبکها کنترل میکنند که آیا هنگام بسته شدن پنجره، فوکوس به پنجرهٔ دیگری بازگردانده شود یا خیر. در غیر این صورت هیچ پنجرهای یا پنجرهٔ زیر نشانگر فوکوس را دریافت میکند.
.sp
گزینههای \fIClickToFocusPassesClickOff\fP و \fIClickToFocusPassesClick\fP تعیین
میکنند که آیا کلیک موشواره برای فوکوس کردن روی پنجره به برنامه ارسال شود یا خیر. به همین ترتیب،
\fIClickToFocusRaisesOff\fP/\fIMouseFocusClickRaisesOff\fP و
\fIClickToFocusRaises\fP/\fIMouseFocusClickRaises\fP کنترل میکنند که آیا پنجره بالا آورده شود یا خیر (البته بسته به الگوی فوکوس).
.sp
نکته: در نگارشهای fvwm پیش از 2.5.3، گزینههای "Click.\|.\|." فقط برای پنجرههای دارای \fIClickToFocus\fP اعمال میشدند در حالی که گزینههای "Mouse.\|.\|." برای پنجرههایی با خطمشی فوکوس متفاوت اعمال میشدند. این حالت دیگر برقرار نیست.
.sp
سبک قدیمی \fIGrabFocus\fP معادل استفاده از \fIFPGrabFocus\fP
.br
\fIFPReleaseFocus\fP است.
.sp
سبک قدیمی \fIGrabFocusTransient\fP معادل استفاده از
\fIFPGrabFocusTransient\fP + \fIFPReleaseFocusTransient\fP است.
.sp
سبک \fILenience\fP معادل سبک جدید \fIFPLenient\fP است.
.RE
.RE
.sp
\fBعنوان پنجره\fP
.RS 4
گزینههای \fITitle\fP و !Title تعیین میکنند که آیا پنجره با نوار عنوان (title\-bar) تزئین شود یا خیر. بهطور پیشفرض همهٔ پنجرهها دارای نوار عنوان هستند.
\fINoTitle\fP معادل \fI!Title\fP است ولی منسوخ شده است.
.sp
پنجرههایی با سبکهای \fITitleAtBottom\fP، \fITitleAtLeft\fP یا \fITitleAtRight\fP
به جای قرارگیری مرسوم در بالای پنجره، نوار عنوانی در پایین، سمت چپ یا سمت راست پنجره دارند. سبک \fITitleAtTop\fP جایگذاری پیشفرض را بازمیگرداند. حتی اگر سبک \fI!Title\fP برای پنجره تنظیم شده باشد، این مورد بر دستور \fBWindowShade\fP تأثیر میگذارد. لطفاً برای برهمکنشهای میان آن دستور و این سبکها، دستور \fBWindowShade\fP را بررسی کنید. عنوانها در سمت چپ یا راست پنجرهها با سبکهای زیر تکمیل میشوند:
.sp
بهطور معمول، متن عنوانها در سمت چپ پنجره ۹۰ درجه در خلاف جهت عقربههای ساعت نسبت به حالت عمودی معمول چرخانده میشود، و برای عنوانهای سمت راست ۹۰ درجه در جهت عقربههای ساعت میچرخد. همچنین اگر \fITitleAtLeft\fP به کار رود میتوان آن را در جهت مخالف با \fILeftTitleRotatedCW\fP چرخاند، و اگر \fITitleAtRight\fP استفاده شود با \fIRightTitleRotatedCCW\fP این کار امکانپذیر است. حالتهای پیشفرض را میتوان با \fILeftTitleRotatedCCW\fP و \fIRightTitleRotatedCW\fP بازیابی کرد. همچنین متن افقی معمول را میتوان در صورت استفاده از \fITitleAtTop\fP با \fITopTitleRotated\fP، و در صورت استفاده از \fITitleAtBottom\fP با \fIBottomTitleRotated\fP چرخاند. مقادیر پیشفرض را میتوان با \fITopTitleNotRotated\fP و \fIBottomTitleNotRotated\fP بازیابی نمود.
.sp
بهطور پیشفرض، تزئینات نوار عنوان که با دستور \fBTitleStyle\fP تعریف شدهاند، به پیروی از چرخش متن عنوان میچرخند (پاراگراف قبلی را ببینید). این رفتار را میتوان با استفاده از سبک !\fIUseTitleDecorRotation\fP غیرفعال کرد. سبک \fIUseTitleDecorRotation\fP مجدداً به حالت پیشفرض بازمیگردد.
.sp
با سبک \fIStippledTitle\fP، عنوانها با همان جلوهای ترسیم میشوند که معمولاً برای پنجرههای دارای سبک \fISticky\fP،
\fIStickyAcrossPages\fP یا \fIStickyAcrossDesks\fP اختصاص یافته است. سبک \fI!StippledTitle\fP
به حالت عنوانهای معمولی بازمیگردد. \fIStippledTitleOff\fP معادل
\fI!StippledTitle\fP است اما منسوخ شده است.
.sp
دستور \fBColorset\fP شمارهٔ colorset را بهعنوان تنها آرگومان خود دریافت میکند و
رنگهای تنظیمشده توسط \fIColor\fP را لغو و جایگزین میکند. در عوض، رنگهای متناظر از colorset مشخصشده استفاده میشوند. توجه داشته باشید که سایر قابلیتهای یک colorset استفاده نمیشوند. برای این منظور، از سبک تزئینی \fBColorset\fP در دستورهای \fBTitleStyle\fP و \fIButtonStyle\fP استفاده کنید. برای توقف استفاده از colorset، از قید شمارهٔ colorset صرفنظر میشود.
.sp
سبک \fIBorderColorset\fP هشت عدد صحیح مثبت را بهعنوان آرگومانهای خود میگیرد و
colorsetهای دادهشده را روی هشت جزء جداگانهٔ حاشیهٔ پنجره اعمال خواهد کرد..sp
برای سازگاری با نسخههای پیشین، اگر یک عدد صحیح داده شود، بر تمامی بخشهای لبهٔ پنجره اعمال میشود.
.sp
لبه به تعاریف زیر تقسیم میشود و ترتیبی مشابه با مجموعهرنگهایی (colorsets) دارد که روی لبه اعمال خواهند شد.
.sp
.if n .RS 4
.nf
.fam C
BorderColorset North, North East, East, South East, South, South West, West, North West
.fam
.fi
.if n .RE
.sp
\fINorth\fP، \fIEast\fP، \fISouth\fP، و \fIWest\fP به بخشهای بالا، چپ، پایین، و راست لبهٔ پنجره اشاره دارند.
.sp
\fINE\fP، \fISE\fP، \fISW\fP، و \fINW\fP به دستگیرههای پنجره اشاره میکنند.
.sp
\fBنکته\fP: به دلیل نحوهٔ رندر شدن دستگیرههای پنجره، هیچ راهی وجود ندارد که یک لبهٔ کامل پنجره همرنگ با مقدار تعریفشده توسط \fINorth\fP، \fISouth\fP، \fIEast\fP، یا \fIWest\fP شود.
.sp
گزینهٔ سبکِ \fIHilightBorderColorset\fP همانند \fIBorderColorset\fP عمل میکند اما زمانی به کار میرود که پنجره دارای فوکوس باشد.
.sp
سبک !\fIIconTitle\fP نمایش برچسبهای آیکون را غیرفعال میکند، در حالی که سبک معکوس آن یعنی \fIIconTitle\fP برچسبهای آیکون را فعال میسازد (رفتار پیشفرض). \fINoIconTitle\fP معادل \fI!IconTitle\fP است اما منسوخ شده است.
.sp
گزینهٔ \fIIconTitleColorset\fP شمارهٔ colorset را به عنوان تنها آرگومان خود دریافت کرده و رنگهای تعیینشده توسط \fIColor\fP یا \fIColorset\fP را بازنویسی میکند. برای توقف استفاده از این colorset، آرگومان حذف میشود.
.sp
گزینهٔ \fIHilightIconTitleColorset\fP شمارهٔ colorset را به عنوان تنها آرگومان خود دریافت کرده و رنگهای تعیینشده توسط \fIHilightColorset\fP را بازنویسی میکند. برای توقف استفاده از این colorset، آرگومان حذف میشود.
.sp
گزینهٔ \fIIconBackgroundColorset\fP شمارهٔ colorset را به عنوان تنها آرگومان خود میگیرد و از آن برای تنظیم پسزمینه برای تصویر آیکون استفاده میکند. بهطور پیشفرض، تصویر آیکون روی یک تصویر پسزمینه کشیده نمیشود. برای بازگرداندن پیشفرض، آرگومان حذف میشود.
.sp
گزینهٔ \fIIconTitleRelief\fP یک آرگومان عددی بین \-50 تا +50 پیکسل دریافت میکند و ضخامت برجستگی سهبعدیِ کشیدهشده در اطراف عنوان آیکون را تعیین میکند. با مقادیر منفی، عنوان آیکون ظاهری فرورفته به خود میگیرد. مقدار پیشفرض 2 است و در صورت حذف آرگومان، بازگردانده میشود.
.sp
گزینهٔ \fIIconBackgroundRelief\fP یک آرگومان عددی بین \-50 تا +50 پیکسل میپذیرد و ضخامت برجستگی سهبعدی کشیدهشده در اطراف پسزمینهٔ تصویر آیکون (در صورت وجود) را تعیین میکند. با مقادیر منفی، پسزمینهٔ آیکون ظاهری فرورفته پیدا میکند. مقدار پیشفرض 2 است و در صورت حذف آرگومان، بازیابی میشود.
.sp
گزینهٔ \fIIconBackgroundPadding\fP یک آرگومان عددی بین 0 تا 50 پیکسل دریافت میکند و میزان فضای خالی بین برجستگی تصویر پسزمینهٔ آیکون (در صورت وجود) و تصویر آیکون را تعیین میکند. مقدار پیشفرض 2 است و در صورت حذف آرگومان، به حالت پیشفرض بازمیگردد.
.sp
گزینههای \fIFont\fP و \fIIconFont\fP نام یک قلم را به عنوان تنها آرگومان خود میگیرند. این قلم در عنوان پنجره یا آیکون استفاده میشود. بهطور پیشفرض، قلم ارائهشده در دستور \fBDefaultFont\fP به کار میرود. برای بازگشت به حالت پیشفرض، از این سبک بدون آرگومان نام استفاده کنید.
.sp
سبک منسوخشدهٔ \fIIndexedWindowName\fP باعث میشود fvwm از عناوین پنجره به این شکل استفاده کند:
.sp
.if n .RS 4
.nf
.fam C
name (i)
.fam
.fi
.if n .RE
.sp
که در آن \fIname\fP نام دقیق پنجره و \fIi\fP یک عدد صحیح است که نشاندهندهٔ \fIi-اُمین\fP پنجره با نام \fIname\fP میباشد. این سبک با مورد زیر جایگزین شده است:
.sp
.if n .RS 4
.nf
.fam C
TitleFormat %n (%t)
.fam
.fi
.if n .RE
.sp
گزینهٔ \fIExactWindowName\fP حالت پیشفرض را که استفاده از نام دقیق پنجره است بازمیگرداند. این سبک به نفع گزینهٔ زیر منسوخ شده است:
.sp
.if n .RS 4
.nf
.fam C
TitleFormat %n
.fam
.fi
.if n .RE
.sp
سبکهای \fIIndexedIconName\fP و \fIExactIconName\fP همانند سبکهای \fIIndexedWindowName\fP و \fIExactWindowName\fP اما برای عناوین آیکونها عمل میکنند. هر دوی آنها به نفع موارد زیر منسوخ شدهاند:
.sp
.if n .RS 4
.nf
.fam C
IconTitleFormat %n (%t)
IconTitleFormat %n
.fam
.fi
.if n .RE
.sp
قالب \fITitleFormat\fP توصیف میکند که نام مرئی پنجره چگونه باید باشد، و جاینماهای زیر در آن معتبر هستند:
.sp
\fB%n\fP
.RS 4
نام پنجره را درج میکند.
.RE
.sp
\fB%i\fP
.RS 4
نام آیکون پنجره را درج میکند.
.RE
.sp
\fB%c\fP
.RS 4
نام کلاس پنجره را درج میکند.
.RE
.sp
\fB%r\fP
.RS 4
نام منبع پنجره را درج میکند.
.RE
.sp
\fB%t\fP
.RS 4
شمارش پنجره را درج میکند.
.RE
.sp
\fB%I\fP
.RS 4
شناسهٔ پنجره را درج میکند.
.RE
.sp
\fB%%\fP
.RS 4
نویسهٔ تحتاللفظی \*(Aq%\*(Aq را درج میکند.
.sp
میتوان از هر مقداری از فاصلههای خالی به همراه نویسههای دیگر برای ساختن رشته استفاده کرد \(em اما یک رشتهٔ معتبر \fITitleFormat\fP باید حداقل شامل یکی از جاینماهای یادشده باشد. هیچگونه حذف نقلقولی روی این رشته انجام نمیشود، بنابراین برای مثال عبارت زیر عیناً نمایش داده میشود:
.sp
.if n .RS 4
.nf
.fam C
TitleFormat " %n " \-> [%t] \->\& [%c]
.fam
.fi
.if n .RE
.sp
نکته: کاملاً امکانپذیر است که از یک \fITitleFormat\fP استفاده شود که منجر به پاک شدن کامل عنوان مرئی گردد. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
TitleFormat %z
.fam
.fi
.if n .RE
.sp
صرفاً به این دلیل که جاینمای \*(Aq%z\*(Aq پشتیبانی نمیشود. این یک باگ نیست، بلکه جنبهای از نحوهٔ عملکرد تجزیهکنندهٔ قالببندی است.
.RE
.sp
گزینهٔ \fIIconTitleFormat\fP توصیف میکند که نام مرئی آیکون یک پنجره چگونه باید باشد، و گزینههای آن همانند \fITitleFormat\fP است.
.RE.sp
\fBدکمههای نوار عنوان (Title buttons)\fP
.RS 4
دستورهای \fIButton\fP و !\fIButton\fP یک آرگومان عددی میگیرند که شماره دکمه نوار عنوانی است که باید نمایش داده شود یا حذف گردد. \fINoButton\fP معادل \fI!Button\fP است اما منسوخ شده است.
.sp
\fIMwmButtons\fP باعث میشود دکمه \fBMaximize\fP هنگامی که پنجره بیشینه شده است، فشرده به نظر برسد. برای اطلاعات بیشتر، پرچم \fIMwmDecorMax\fP را در \fBButtonStyle\fP ببینید. برای غیرفعال کردن دوباره این سبک، از سبک \fBFvwmButtons\fP استفاده کنید.
.RE
.sp
\fBحاشیهها (Borders)\fP
.RS 4
دستور !\fIBorders\fP حاشیه پنجره را (اما نه عنوان را) بهطور کامل حذف میکند. سبک \fIBorders\fP آنها را دوباره فعال میسازد. بدون حاشیهها، تمام سبکهای دیگری که بر حاشیه پنجره اثر میگذارند بیمعنی خواهند بود.
.sp
\fIMwmBorder\fP باعث میشود لبه سهبعدی به لبه Mwm بیشتر شبیه شود. \fIFvwmBorder\fP گزینه قبلی را خاموش میکند.
.sp
با سبک !\fIHandles\fP، پنجره دستگیرههای گوشهای را که معمولاً برای تغییر اندازه استفاده میشوند، نخواهد داشت. با \fI!Handles\fP، عرض مشخصشده در سبک \fIBorderWidth\fP استفاده میشود. بهطور پیشفرض، یا در صورتی که \fIHandles\fP تعیین شده باشد، عرض مشخصشده در سبک \fIHandleWidth\fP به کار میرود. \fINoHandles\fP معادل \fI!Handles\fP است اما منسوخ شده است.
.sp
\fIHandleWidth\fP یک آرگومان عددی میگیرد که عرض حاشیه پنجره را در صورت داشتن دستگیرههای تغییر اندازه مشخص میکند. استفاده از \fIHandleWidth\fP بدون آرگومان، مقدار پیشفرض را بازمیگرداند.
.sp
\fICornerLength\fP یک آرگومان عددی واحد میگیرد که طول دستگیرههای گوشه بر حسب پیکسل است. مقدار پیشفرض، ارتفاع عنوان است. استفاده از \fICornerLength\fP بدون آرگومان، مقدار پیشفرض را بازمیگرداند.
.sp
\fIBorderWidth\fP یک آرگومان عددی میگیرد که عرض حاشیه پنجره را در صورت نداشتن دستگیرههای تغییر اندازه مشخص میکند. این سبک تنها در صورتی استفاده میشود که سبک \fI!Handles\fP نیز مشخص شده باشد. استفاده از \fIBorderWidth\fP بدون آرگومان، مقدار پیشفرض را بازمیگرداند.
.sp
\fIDepressableBorder\fP باعث میشود بخشهای حاشیه در تزئینات پنجره هنگام فشرده شدن یک کلید ماوس روی آنها، فرورفته به نظر برسند. این قابلیت را میتوان مجدداً با سبک \fIFirmBorder\fP غیرفعال کرد.
.RE
.sp
\fBآیکونها، لولهکردن، بیشینهسازی، جابهجایی و تغییر اندازه (Icons, shading, maximizing, movement, resizing)\fP
.RS 4
دستور \fIIcon\fP یک آرگومان رشتهای (اختیاری) بدون علامت نقلقول دریافت میکند که بیتمپ یا پیکسمپ آیکون مورد استفاده را مشخص میسازد. آیکونهایی که به این شیوه مشخص میشوند، اولویت بیشتری نسبت به آیکونهای پیکسمپ ارائهشده توسط کلاینت در برنامه (از طریق ویژگی WM_HINTS یا ویژگی ewmh به نام _NET_WM_ICON) دارند، اما جایگزین پنجرههای آیکون یا آیکون ewmh نمیشوند. سبک \fIIconOverride\fP این رفتار را تغییر میدهد تا تمام آیکونهای ارائهشده توسط کلاینت بازنویسی شوند؛ سبک \fINoIconOverride\fP رفتار را بهگونهای تغییر میدهد که هیچیک از آیکونهای ارائهشده توسط کلاینت بازنویسی نشوند؛ رفتار جایگزینی پیشفرض را میتوان با سبک \fINoActiveIconOverride\fP فعال کرد. با این سبک، fvwm در صورت تغییر آیکون از آیکون ارائهشده توسط برنامه استفاده میکند، اما تا پیش از آن از آیکون مشخصشده در فایل پیکربندی بهره میگیرد.
.sp
یک استثنا برای این قواعد وجود دارد، به این ترتیب که
.sp
.if n .RS 4
.nf
.fam C
Style * Icon unknown.xpm
.fam
.fi
.if n .RE
.sp
آیکون unknown.xpm را به تمام پنجرهها تحمیل نمیکند، بلکه صرفاً مانند دستور DefaultIcon آیکون پیشفرض را تعیین مینماید. اگر واقعاً میخواهید تمام پنجرهها آیکون یکسانی داشته باشند، میتوانید از دستور زیر استفاده کنید:
.sp
.if n .RS 4
.nf
.fam C
Style ** Icon unknown.xpm
.fam
.fi
.if n .RE
.sp
اگر ویژگی \fINoIcon\fP تنظیم شود، پنجره مشخصشده هنگام تبدیل به آیکون، بهسادگی ناپدید میشود. پنجره را میتوان از طریق window\-list بازیابی کرد. اگر \fIIcon\fP بدون آرگومان تنظیم شود، ویژگی \fINoIcon\fP پاک میشود اما هیچ آیکونی تعیین نمیگردد. مثالی که تنها اجازه میدهد آیکون ماژول \fBFvwmPager\fP وجود داشته باشد:
.sp
.if n .RS 4
.nf
.fam C
Style * NoIcon
Style FvwmPager Icon
.fam
.fi
.if n .RE
.sp
دستور \fIIconBox\fP میتواند بدون آرگومان، با چهار آرگومان عددی (به همراه مشخصات اختیاری صفحه نمایش)، با یک رشته هندسه X11 یا با رشته "none" به کار رود:
.sp
.if n .RS 4
.nf
.fam C
IconBox [screen scr\-spec] l t r b
.fam
.fi
.if n .RE
.sp
یا
.sp
.if n .RS 4
.nf
.fam C
IconBox geometry
.fam
.fi
.if n .RE
.sp
که در آن \fIl\fP مختصات چپ، \fIt\fP بالا، \fIr\fP راست و \fIb\fP پایین است. مختصات منفی نشاندهنده فاصله از سمت راست یا پایین صفحه نمایش هستند. اگر آرگومان نخست کلمه \fIscreen\fP باشد، آرگومان \fIscr\-spec\fP صفحه نمایش RandR را مشخص میکند که IconBox روی آن تعریف میشود، یا شناسه اضافی \*(Aqw\*(Aq برای صفحه نمایشی که مرکز پنجره در آن واقع است. این قابلیت تنها در حالت چندصفحهنمایشی کاربرد دارد. مشخصات "l t r b" انعطافپذیرتر از هندسه X11 است. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
IconBox \-80 240 \-1 \-1
.fam
.fi
.if n .RE
.sp
جعبهای به عرض ۸۰ پیکسل از لبه راست و ۲۴۰ پیکسل پایینتر از بالای صفحه تعریف میکند که تا پایین صفحه نمایش ادامه مییابد.
.sp
با این حال شاید استفاده از یک رشته هندسه X11 سادهتر باشد:
.sp
.if n .RS 4
.nf
.fam C
IconBox 1000x70\-1\-1
.fam
.fi
.if n .RE
.sp
یک جعبه آیکون به ابعاد ۱۰۰۰ در ۷۰ پیکسل را در پایین صفحه نمایش قرار میدهد که از گوشه پایین سمت راست آغاز میشود. یک راه برای پیدا کردن چنین هندسهای استفاده از پنجرهای است که با گامهای پیکسلی تغییر اندازه میدهد؛ مانند xv. سپس اندازه پنجره xv را تغییر دهید و آن را در جایی قرار دهید که جعبه آیکون را میخواهید. سپس از FvwmIdent برای خواندن هندسه پنجره استفاده کنید. جعبه آیکون ناحیهای از صفحه نمایش است که fvwm در آن تلاش میکند آیکونهای مربوط به هر پنجره منطبق را تا زمانی که با آیکونهای دیگر همپوشانی نداشته باشند، قرار دهد. چندین جعبه آیکون را میتوان به عنوان نواحی سرریز تعریف کرد. هنگامی که نخستین جعبه آیکون پر شود، دومی پر میشود. تمام جعبههای آیکون مربوط به یک سبک باید در یک دستور \fBStyle\fP تعریف شوند. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
Style * IconBox \-80 240 \-1 \-1, \(rs
IconBox 1000x70\-1\-1
.fam
.fi
.if n .RE
.sp
دستور Style همراه با گزینه IconBox هر جعبه آیکونی را که پیشتر توسط دستور Style دیگری برای همان سبک تعریف شده باشد، جایگزین میکند. به همین دلیل استفاده از بکاسلش در مثال قبلی ضروری است.
.sp
نکته: در صورت استفاده از RandR، هندسه برای دستور icon box مشخصکننده صفحه نمایش اضافی "@w" را میپذیرد. این گزینه صفحه نمایشی را مشخص میکند که مرکز پنجره در آن قرار دارد. این مشخصکننده صفحه نمایش اضافی در هیچ کجای دیگر مجاز نیست.
.sp
اگر هرگز جعبه آیکونی تعریف نکنید، یا تمام جعبههای آیکون را پر کنید، fvwm دارای یک جعبه آیکون پیشفرض است که کل صفحه را میپوشاند؛ از بالا به پایین و سپس از چپ به راست پر میشود و شبکهای ۸۰x۸۰ پیکسلی دارد. برای غیرفعال کردن همه جعبهها به جز جعبه آیکون پیشفرض، میتوانید از IconBox بدون آرگومان در یک دستور \fBStyle\fP مجزا استفاده کنید. برای غیرفعال کردن تمامی جعبههای آیکون از جمله جعبه پیشفرض، میتوان آرگومان "none" را مشخص کرد.
.RE.sp
نکته: میتوانید با یک تابع سادهٔ fvwm، آیکونهای خود را بهطور خودکار در جعبهٔ آیکون (icon box) مرتب کنید. تابع «DeiconifyAndRearrange» زیر را در فایل پیکربندی خود قرار دهید:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc DeiconifyAndRearrange
+ C Iconify off
+ C All (CurrentPage, Iconic) PlaceAgain Icon
.fam
.fi
.if n .RE
.sp
سپس در تمام بخشهایی که دستور \fBIconify\fP را برای بازگرداندن یک آیکون از حالت آیکون (de\-iconify) فراخوانی کردهاید، آن را با فراخوانی این تابع جدید جایگزین کنید. برای مثال، عبارت:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc IconFunc
+ C Iconify off
+ M Raise
+ M Move
+ D Iconify off
Mouse 1 I A Iconify off
.fam
.fi
.if n .RE
.sp
را با این عبارت جایگزین کنید:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc IconFunc
+ C DeiconifyAndRearrange
+ M Raise
+ M Move
+ D DeiconifyAndRearrange
Mouse 1 I A DeiconifyAndRearrange
.fam
.fi
.if n .RE
.sp
دستور \fIIconGrid\fP ۲ آرگومان عددی بزرگتر از صفر میگیرد.
.sp
.if n .RS 4
.nf
.fam C
IconGrid x y
.fam
.fi
.if n .RE
.sp
آیکونها با گام برداشتن درون جعبهٔ آیکون با استفاده از مقادیر \fIx\fP و \fIy\fP برای شبکهٔ آیکون و جستجو برای فضای خالی در جعبهٔ آیکون چیده میشوند. شبکهٔ پیشفرض ۳ در ۳ پیکسل است که ظاهری فشرده و متراکم ایجاد میکند. برای داشتن ظاهری منظمتر، از شبکهای بزرگتر از بزرگترین آیکون خود استفاده کنید. از آرگومان \fIIconSize\fP برای برش دادن (clip) یا کشیدن (stretch) یک آیکون به بیشینه اندازه استفاده کنید. تعریف \fIIconGrid\fP باید پس از تعریف \fBIconBox\fP مربوطهای که روی آن اعمال میشود، قرار گیرد:
.sp
.if n .RS 4
.nf
.fam C
Style * IconBox \-80x240\-1\-1, IconGrid 90 90
.fam
.fi
.if n .RE
.sp
دستور \fIIconFill\fP ۲ آرگومان میپذیرد.
.sp
.if n .RS 4
.nf
.fam C
IconFill Bottom Right
.fam
.fi
.if n .RE
.sp
آیکونها با گام برداشتن در جعبهٔ آیکون و با استفاده از این آرگومانها برای کنترل جهت پر شدن جعبه، در جعبهٔ آیکون قرار میگیرند. بهطور پیشفرض، جهت از چپ به راست و سپس از بالا به پایین است. این حالت بهصورت زیر بیان میشود:
.sp
.if n .RS 4
.nf
.fam C
IconFill left top
.fam
.fi
.if n .RE
.sp
برای پر کردن یک جعبهٔ آیکون بهصورت ستونی بهجای سطری، ابتدا جهت عمودی (top یا bottom) را مشخص کنید. جهتها را میتوان بهصورت کوتاه یا کامل به شکلهای زیر نوشت: "t"، "top"، "b"، "bot"، "bottom"، "l"، "lft"، "left"، "r"، "rgt"، "right". تعریف \fBIconFill\fP باید پس از تعریف \fBIconBox\fP مربوطهای که روی آن اعمال میشود، قرار گیرد:
.sp
.if n .RS 4
.nf
.fam C
Style * IconBox \-80x240\-1\-1, IconFill b r
.fam
.fi
.if n .RE
.sp
دستور \fIIconSize\fP محدودیتهایی را برای اندازهٔ تصویر آیکون تعیین میکند. هم تصاویر آیکون ارائهشده توسط کاربر و هم تصاویر ارائهشده توسط برنامهها تحت تأثیر این دستور قرار میگیرند.
.sp
.if n .RS 4
.nf
.fam C
IconSize [ width height [ maxwidth maxheight ] ]
.fam
.fi
.if n .RE
.sp
تمام آرگومانها بر حسب پیکسل اندازهگیری میشوند. هنگامی که هر چهار آرگومان به \fIIconSize\fP داده شوند، \fIwidth\fP و \fIheight\fP نشاندهندهٔ کمینه اندازهٔ یک آیکون، و \fImaxwidth\fP و \fImaxheight\fP نشاندهندهٔ بیشینه اندازهٔ آن خواهند بود. تصاویر آیکونی که کوچکتر از اندازهٔ کمینه باشند، پدگذاری (padded) میشوند. تصاویر آیکونی که بزرگتر از بیشینه اندازه باشند، برش داده میشوند (clipped).
.sp
اگر فقط دو آرگومان به \fIIconSize\fP داده شود، \fIwidth\fP و \fIheight\fP اندازهٔ مطلق یک آیکون را نشان میدهند. آیکونهای تحت پوشش این سبک برای رسیدن به اندازهٔ دادهشده، پدگذاری یا برش داده میشوند.
.sp
اگر هیچ آرگومانی مشخص نشود، مقادیر پیشفرض برای هر بُعد استفاده خواهند شد. این کار عملاً هیچ محدودیتی بر روی اندازهٔ یک آیکون اعمال نمیکند.
.sp
مقدار «\-1» میتواند بهجای هر یک از آرگومانها برای مشخص کردن مقدار پیشفرض آن بُعد به کار رود.
.sp
علاوه بر آرگومانهای عددی، ۱ آرگومان اضافی میتواند یکی از مقادیر "Stretched"، "Adjusted" یا "Shrunk" باشد.
.sp
توجه داشته باشید که مدیرهای آیکون ارائهشده توسط ماژولها تحت تأثیر این سبک قرار نمیگیرند.
.sp
دستور \fIMiniIcon\fP یک نگاشتپیکسلی (pixmap) را برای استفاده بهعنوان آیکون بندانگشتی پنجره تعیین میکند. این آیکون بندانگشتی میتواند در یکی از دکمههای نوار عنوان کشیده شود (به \fBButtonStyle\fP مراجعه کنید)، و میتواند توسط ماژولهای مختلف fvwm (مانند \fBFvwmIconMan\fP و \fBFvwmPager\fP) مورد استفاده قرار گیرد. این دستور نام یک pixmap را بهعنوان آرگومان میگیرد.
.sp
دستورات \fIWindowShadeShrinks\fP و \fIWindowShadeScrolls\fP کنترل میکنند که آیا محتویات پنجرهای که با دستور \fBWindowShade\fP جمع (کرکره) میشود پیمایش شوند (پیشفرض) یا در جای خود باقی بمانند. حالت منقبض شدن (shrinking) کمی سریعتر است.
.sp
گزینهٔ \fIWindowShadeSteps\fP تعداد گامها را برای پویانمایی هنگام کرکره کردن یک پنجره با \fBWindowShade\fP تعیین میکند. این گزینه یک عدد را بهعنوان آرگومان میگیرد. اگر در انتهای عدد یک \*(Aq\fIp\fP\*(Aq وجود داشته باشد، تعداد پیکسلها را بهعنوان اندازهٔ گام بهجای تعداد ثابتی از گامها تعیین میکند. مقدار 0 پویانمایی را غیرفعال میکند. همچنین در صورتی که آرگومان حذف شده یا نامعتبر باشد، همین اتفاق میافتد.
.sp
دستور \fBWindowShade\fP دارای دو حالت عملیاتی است: کرکرهکردن مشغول (busy) و تنبل (lazy). حالت busy میتواند ۵۰٪ کُندتر از حالت lazy باشد، اما حالت lazy ممکن است در برخی شرایط عجیب به نظر برسد؛ برای مثال، اگر حاشیههای پنجره، دکمهها یا عنوان با یک pixmap کاشیکاریشده (tiled) پر شده باشند. همچنین، دستگیرههای پنجره در حالت lazy کشیده نمیشوند و برجستگی حاشیه ممکن است فقط تا حدی، درست پیش از رسیدن پنجره به حالت جمعشده یا بلافاصله پس از خروج از آن، کشیده شود. بهطور پیشفرض، اگر جلوههای بصری نامطلوبی وجود نداشته باشد (بدون احتساب دستگیرههای پنجره)، fvwm از حالت lazy استفاده میکند و در غیر این صورت از حالت busy بهره میبرد. از \fIWindowShadeAlwaysLazy\fP یا \fIWindowShadeBusy\fP برای اجبار در استفاده از حالت lazy یا busy استفاده کنید. تنظیمات پیشفرض با \fIWindowShadeLazy\fP بازگردانده میشود.
.sp
دستور \fIResizeOpaque\fP به fvwm فرمان میدهد تا اندازهٔ پنجرههای مربوطه را با محتویات نمایان، بهجای استفاده از یک طرح پیرامونی (outline)، تغییر دهد. از آنجا که این کار باعث بازترسیم مکرر برنامه میشود، بسته به میزان گرافیکی که برنامه بازترسیم میکند، میتواند بسیار کُند باشد و باعث پرش یا چشمک زدن شدید پنجره شود. سبک \fIResizeOutline\fP (پیشفرض) سبک \fIResizeOpaque\fP را خنثی میکند. بسیاری از برنامهها تغییر اندازهٔ مات پنجرههای خود را نمیپذیرند؛ بهعنوان مثال XEmacs، Netscape یا ترمینالهایی با پسزمینهٔ pixmap. اگر نتیجه را مناسب نمیدانید، از سبک \fIResizeOpaque\fP برای این پنجرهها استفاده نکنید. برای مستثنی کردن برخی پنجرههای خاص از تغییر اندازهٔ مات، میتوانید از این خطوط در فایل پیکربندی خود استفاده کنید:.sp
.if n .RS 4
.nf
.fam C
Style * ResizeOpaque
Style rxvt ResizeOutline
Style emacs ResizeOutline
.fam
.fi
.if n .RE
.sp
\fISticky\fP پنجره را چسبان میکند، بدین معنا که همیشه در هر صفحه و هر میزکار نمایان است. سبک مخالف آن، \fISlippery\fP، وضعیت را به مقدار پیشفرض بازمیگرداند.
.sp
\fIStickyIcon\fP پنجره را در هنگامی که آیکون شده است چسبان میکند. پنجره پس از خروج از حالت آیکون، روی میزکار فعال باز میشود. \fISlipperyIcon\fP وضعیت را به حالت پیشفرض بازمیگرداند.
.sp
\fIStickyAcrossPages\fP و \fIStickyAcrossPagesIcon\fP مانند \fISticky\fP و
\fIStickyIcon\fP عمل میکنند، اما پنجره را تنها در سراسر صفحهها میچسبانند، نه میزکارها؛ در حالی که
\fIStickyAcrossDesks and StickyAcrossDesksIcon\fP برعکس عمل میکنند.
.sp
پنجرههایی که به عنوان \fISticky\fP یا \fIStickyAcrossDesks\fP یا
\fIStickyAcrossPages\fP علامتگذاری شدهاند، نقطهچینهایی روی نوار عنوان خواهند داشت. این ویژگی میتواند با سبک
!\fIStickyStippledTitle\fP نفی شود. سبک
\fIStickyStippledTitle\fP نقطهچینها را دوباره در جایی که پنجره به عنوان
\fISticky\fP نیز علامتگذاری شده، قرار میدهد. توجه داشته باشید که این سبکِ پیشفرض برای
پنجرههای \fISticky\fP است. آیکونهای چسبان نیز نقطهچینهایی روی عنوان آیکون
خواهند داشت. این ویژگی را میتوان به همان روش با سبک
!\fIStickyStippledIconTitle\fP غیرفعال کرد.
.sp
پنجرههای دارای سبک \fIStartIconic\fP در ابتدا به صورت آیکون نمایش داده میشوند.
توجه داشته باشید که برخی برنامهها با خارج کردن خودکار خود از حالت آیکون، این رفتار را
خنثی میکنند. حالت پیشفرض، آیکون نکردن پنجرهها است و میتواند با
سبک \fIStartNormal\fP تنظیم شود.
.sp
\fIStickyIcon\fP پنجره را در هنگامی که آیکون شده است چسبان میکند. پنجره
پس از خروج از حالت آیکون، روی میزکار فعال باز میشود. \fISlipperyIcon\fP وضعیت را به
حالت پیشفرض بازمیگرداند.
.sp
\fIStickyIconPage\fP مانند \fIStickyIcon\fP عمل میکند، اما آیکون را فقط
در سراسر صفحهها میچسباند، نه میزکارها؛ در حالی که \fIStickyIconDesk\fP برعکس عمل
میکند.
.sp
\fIStippledIconTitle\fP مانند \fIStippledTitle\fP عمل میکند، به این صورت که
روی عنوان آیکونها نقطهچین رسم میکند اما آیکون را چسبان نمیکند.
.sp
\fIIgnoreRestack\fP باعث میشود fvwm تلاشهای کلاینتها برای بالا بردن یا
پایین بردن پنجرههای خودشان را نادیده بگیرد. به طور پیشفرض، سبک مخالف آن،
\fIAllowRestack\fP، فعال است.
.sp
\fIFixedPosition\fP و \fIFixedUSPosition\fP باعث میشوند fvwm تلاشهای کاربر برای
جابجایی پنجره را نادیده بگیرد. با تغییر اندازه پنجره همچنان جابجایی آن امکانپذیر است.
برای اجازه دادن به کاربر جهت جابجایی پنجرهها، از سبک
\fIVariablePosition\fP یا \fIVariableUSPosition\fP استفاده کنید.
.sp
\fIFixedSize\fP و \fIFixedUSSize\fP باعث میشوند fvwm تلاشهای کاربر برای
تغییر اندازه پنجره را نادیده بگیرد. برای اجازه دادن به کاربر جهت تغییر اندازه پنجرهها، از
سبک \fIVariableSize\fP یا \fIVariableUSSize\fP استفاده کنید.
.sp
\fIFixedPPosition\fP و \fIFixedPSize\fP باعث میشوند fvwm تلاشهای برنامه
برای جابجایی یا تغییر اندازه پنجرههایش را نادیده بگیرد. برای مجاز کردن این گونه اقدامات،
از سبک \fIVariablePPosition\fP یا \fIVariablePSize\fP استفاده کنید. این سبکها ممکن است
گاهی (بسته به برنامه) بر مکانگیری و ابعاد اولیه پنجرههای جدید
تأثیر بگذارند. اگر پنجرهها در مکانهای عجیبی ایجاد میشوند، یکی از سبکهای
\fIVariablePPosition\fP یا \fI!UsePPosition\fP را امتحان کنید.
سبک \fIFixedPSize\fP ممکن است ابعاد پنجره را برای برخی برنامهها به هم بریزد.
در این صورت از این سبک استفاده نکنید.
.sp
\fIMoveByProgramMethod\fP بر نحوه واکنش fvwm به درخواستهای برنامه برای
جابجایی پنجرههایش تأثیر میگذارد. به طور پیشفرض، fvwm سعی میکند روش مناسب را
تشخیص دهد، اما گاهی اوقات روش اشتباه را تشخیص میدهد. ممکن است با پنجرهای مواجه
شوید که هنگام تغییر اندازه توسط برنامه چند پیکسل در صفحه جابجا میشود، به لبه صفحه
میرود در حالی که تزئینات کادر آن خارج از صفحه قرار میگیرد، موقعیت خود را برای اجرای
بعدی به خاطر میسپارد اما در موقعیتی کمی جابهجاشده ظاهر میشود، یا تلاش میکند تمامصفحه
شود اما با نقص مواجه میگردد. هر دو گزینه \fIUseGravity\fP و \fIIgnoreGravity\fP را روی
آن پنجره (و فقط همان پنجره) امتحان کنید و ببینید آیا کمک میکند یا خیر. به طور پیشفرض،
fvwm از روش \fIAutoDetect\fP استفاده میکند. هنگامی که روش تشخیص داده شد، دیگر هرگز
تغییر نخواهد کرد. تا زمانی که fvwm نتواند روش مناسب را تشخیص دهد، از \fIIgnoreGravity\fP
استفاده میکند. برای وادار کردن fvwm به تلاش مجدد جهت تشخیص، ابتدا از یکی از دو گزینه دیگر
استفاده کرده و سپس دوباره \fIAutoDetect\fP را به کار ببرید.
.sp
نکته: این گزینه برای کاهش مشکلی در مشخصات ICCCM معرفی شده است.
مشخصات ICCCM به وضوح بیان میکند که باید از گزینه \fIUseGravity\fP استفاده شود، اما به طور سنتی برنامهها این قاعده را نادیده میگرفتند.
.sp
\fIClosable\fP امکان اجرای توابع \fBClose\fP، \fBDelete\fP و \fBDestroy\fP را
روی پنجرهها فعال میکند. این قابلیت به طور پیشفرض روشن است. برعکس آن،
\fI!Closable\fP، از بسته شدن پنجره جلوگیری میکند.
.sp
\fIIconifiable\fP امکان اجرای تابع \fBIconify\fP را روی پنجرهها فعال میکند.
این قابلیت به طور پیشفرض روشن است. برعکس آن، \fI!Iconifiable\fP،
از آیکون شدن پنجره جلوگیری میکند.
.sp
\fIMaximizable\fP امکان اجرای تابع \fBMaximize\fP را روی پنجرهها فعال میکند.
این قابلیت به طور پیشفرض روشن است. برعکس آن، \fI!Maximizable\fP،
از بیشینهسازی پنجره جلوگیری میکند.
.sp
\fIAllowMaximizeFixedSize\fP امکان اجرای تابع \fBMaximize\fP را روی پنجرههایی
که تغییر اندازه نمیپذیرند فعال میکند، مگر اینکه بیشینهسازی با استفاده از
سبک \fI!Maximizable\fP یا از طریق نشانههای مدیر پنجره (WM hints) غیرفعال شده باشد.
این قابلیت به طور پیشفرض روشن است. برعکس آن، \fI!AllowMaximizeFixedSize\fP،
از بیشینهسازی تمامی پنجرههایی که اندازه ثابت دارند جلوگیری میکند.
.sp
\fIResizeHintOverride\fP به fvwm دستور میدهد که حداقل و حداکثر اندازه ارائهشده
توسط برنامه و همچنین گام تغییر اندازه (اندازه نویسه در بسیاری از برنامهها) را
نادیده بگیرد. این گزینه میتواند برای برنامههای معیوبی که از تغییر اندازه سر باز میزنند
مفید باشد. اگر به آن نیازی ندارید از آن استفاده نکنید. سبک پیشفرض (مخالف)
\fINoResizeOverride\fP است.
.sp
\fIMinWindowSize [ width [ p | c ] height [ p | c ] ]\fP حداقل عرض و
ارتفاع یک پنجره را به fvwm اعلام میکند. مقادیر بر حسب درصد از مساحت کل صفحه هستند.
اگر حرف \*(Aq\fIp\fP\*(Aq به هر یک از مقادیر الحاق شود، اعداد به عنوان پیکسل تفسیر میشوند.
اگر حرف \*(Aq\fIc\fP\*(Aq به هر یک از مقادیر الحاق شود، اعداد بر اساس نشانههای اندازه
پنجره کلاینت در نظر گرفته میشوند که میتواند برای پنجرههایی نظیر ترمینالها جهت تعیین
تعداد سطرها یا ستونها مفید باشد. این دستور برای مدیریت پنجرههایی کاربرد دارد که اگر
بیش از حد کوچک شوند دچار رفتار نامتعارف میشوند. اگر پارامترها را حذف کنید یا مقادیر آنها
نامعتبر باشند، هر دو حد روی 0 پیکسل تنظیم میشوند (که مقدار پیشفرض است).
.sp
\fIMaxWindowSize [ width [ p | c ] height [ p | c ] ]\fP حداکثر عرض و
ارتفاع یک پنجره را به fvwm اعلام میکند. مقادیر بر حسب درصد از مساحت کل صفحه هستند.
اگر حرف \*(Aq\fIp\fP\*(Aq به هر یک از مقادیر الحاق شود، اعداد به عنوان پیکسل تفسیر میشوند.
اگر حرف \*(Aq\fIc\fP\*(Aq به هر یک از مقادیر الحاق شود، اعداد بر اساس نشانههای اندازه
پنجره کلاینت در نظر گرفته میشوند که میتواند برای پنجرههایی نظیر ترمینالها جهت تعیین
تعداد سطرها یا ستونها مفید باشد. این دستور برای وادار کردن پنجرههای بزرگ برنامهها به
نمایش کامل مفید است. نه \fIheight\fP و نه \fIwidth\fP نباید کمتر از 100 پیکسل باشند.
اگر پارامترها را حذف کنید یا مقادیر آنها نامعتبر باشند، هر دو حد روی 32767 پیکسل
تنظیم میشوند (که مقدار پیشفرض است).
.sp
با \fIIconifyWindowGroups\fP تمام پنجرههای موجود در یک گروه پنجره، هنگامی که هر پنجرهای
در گروه آیکون یا از حالت آیکون خارج شود، همزمان آیکون و از حالت آیکون خارج میشوند.
پیشفرض \fIIconifyWindowGroupsOff\fP است که این رفتار را غیرفعال میکند. اگرچه تعدادی
از برنامهها از نشانه گروه پنجره استفاده میکنند، اما به ندرت به شیوه مناسبی از آن استفاده میشود،
بنابراین احتمالاً بهتر است از \fIIconifyWindowGroups\fP فقط برای برنامههای منتخب استفاده کنید.
.sp
گزینه \fISnapAttraction\fP بر جابجایی تعاملی پنجره تأثیر میگذارد: اگر در حین یک جابجایی
تعاملی، پنجره یا آیکون در فاصله \fIproximity\fP پیکسل از پنجره یا آیکون دیگری قرار گیرد،
برای مماس شدن لبهها جابجا میشود. مقدار پیشفرض 0 بدین معناست که هیچ چسبندگی رخ نمیدهد.
فراخوانی این دستور بدون آرگومان، کشش چسبندگی را خاموش کرده و رفتار پیشفرض را بازیابی
میکند. لطفاً به گزینه \fISnapGrid\fP نیز مراجعه کنید.
.sp
آرگومان دوم اختیاری است و میتواند روی یکی از پنج مقدار زیر تنظیم شود:
با \fIAll\fP هم آیکونها و هم پنجرهها به پنجرهها و آیکونهای دیگر میچسبند.
\fISameType\fP اجازه میدهد پنجرهها فقط به پنجرهها، و آیکونها فقط به آیکونها بچسبند.
با \fIWindows\fP پنجرهها فقط به پنجرههای دیگر میچسبند. به طور مشابه با \fIIcons\fP
آیکونها فقط به آیکونهای دیگر میچسبند. با \fINone\fP هیچ چسبندگی رخ نمیدهد.
این گزینه در صورتی که فقط میخواهید پنجرهها به لبههای صفحه بچسبند، در کنار
آرگومان سوم میتواند کاربردی باشد. رفتار پیشفرض \fIAll\fP است.
.sp
آرگومان سوم و آخر اختیاری است و میتواند روی یکی از چهار مقدار زیر تنظیم شود:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
با \fIScreen\fP، آیکونها یا پنجرههایی که قابلیت چسبندگی دارند (که توسط آرگومان دوم کنترل میشود)،
اکنون به لبههای صفحه نیز خواهند چسبید.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fIScreenWindows\fP فقط پنجرهها را به لبههای صفحه میچسباند.
.RE.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fIScreenIcons\fP فقط آیکونها را به لبههای صفحه میچسباند.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
. sp -1
. IP \(bu 2.3
.\}
\fIScreenAll\fP پنجرهها و آیکونها را به لبههای صفحه میچسباند.
.RE
.sp
گزینه \fISnapGrid\fP یک شبکه توری نامرئی را روی صفحه تعریف میکند. در حین
یک جابهجایی تعاملی، پنجره یا آیکون بهگونهای قرار میگیرد که
موقعیت آن (گوشه بالا سمت چپ) با نزدیکترین نقطه شبکه همپوشان شود.
مقادیر پیشفرض \fIx\-grid\-size\fP و \fIy\-grid\-size\fP هر دو ۱ هستند که
در عمل به معنای نبود هیچگونه شبکهای است.
.sp
یک جابهجایی تعاملی هم با \fISnapGrid\fP و هم با \fISnapAttraction\fP موجب
میشود پنجره در مجاورت نزدیکترین حاشیه پنجره دیگر (در صورت قرار داشتن در
محدوده چسبندگی) یا موقعیت شبکه قرار گیرد. پنجره کوتاهترین فاصله
ممکن را برای برآورده کردن هر دو شرط \fISnapGrid\fP و
\fISnapAttraction\fP طی میکند. توجه داشته باشید که مختصات x و y به یکدیگر
وابسته نیستند؛ برای نمونه، ممکن است پنجره در محور x به پنجره دیگری بچسبد
درحالیکه در محور y به یک نقطه از شبکه متصل میشود. استفاده از این سبک بدون
آرگومان، تنظیمات پیشفرض را بازمیگرداند.
.sp
سبکهای \fIEdgeMoveDelay\fP و \fIEdgeResizeDelay\fP تعیین میکنند که تغییر
درگاه دید (viewport) میزکار از طریق جابهجایی یا تغییر اندازه پنجره
فراتر از لبه صفحه چقدر دشوار باشد. این پارامتر مشخص میکند نشانگر ماوس
چند میلیثانیه باید روی لبه صفحه باقی بماند تا fvwm درگاه دید را جابهجا
کند. دستور \fBEdgeScroll\fP مشخص میکند که درگاه دید چه مقدار پیمایش شود.
اگر مقدار تأخیر برابر با \-1 داده شود، ورق زدن صفحه بهطور کامل
غیرفعال میشود. مقادیر پیشفرض عبارتند از بدون تأخیر برای جابهجایی (0) و
بدون ورق زدن برای تغییر اندازه (\-1). استفاده از این سبکها بدون هیچ آرگومانی
تنظیمات پیشفرض را بازیابی میکند. توجه داشته باشید که با
.sp
.if n .RS 4
.nf
.fam C
EdgeScroll 0 0
.fam
.fi
.if n .RE
.sp
همچنان امکان جابهجایی یا تغییر اندازه پنجرهها از میان لبه صفحه فعلی
وجود دارد. همچنین \fBEdgeThickness\fP را ببینید.
.sp
گزینه \fIEdgeMoveResistance\fP قرار دادن پنجره را مستقیماً در مجاورت لبه صفحه
RandR آسانتر میکند. این گزینه یک یا دو پارامتر میپذیرد.
پارامتر اول مشخص میکند که لبه پنجره پیش از آنکه عملاً قسمتی از آن از صفحه
خارج شود، باید چند پیکسل از لبه بیرونی صفحه عبور کند. پارامتر اختیاری دوم
همان کار اولی را انجام میدهد، اما برای لبههای داخلی (لبه مشترک میان دو نمایشگر
RandR). در صورت حذف آن، هیچ مقاومتی میان لبههای داخلی وجود نخواهد داشت. توجه
داشته باشید که مرکز پنجره در حال جابهجایی تعیین میکند که پنجره باید روی کدام
صفحه نگهداشته شود. هر دو مقدار بهطور پیشفرض 0 هستند (بدون مقاومت). برای
بازگردانی مقادیر پیشفرض، گزینه \fIEdgeMoveResistance\fP میتواند بدون هیچ
پارامتری استفاده شود.
.sp
گزینه \fIInitialMapCommand\fP امکان اجرای هر دستور یا تابع معتبر fvwm را
در هنگام نگاشت اولیه پنجره توسط fvwm فراهم میکند. مثال:
.sp
.if n .RS 4
.nf
.fam C
Style MyWindow StartsOnPage 0 0, InitialMapCommand Iconify
.fam
.fi
.if n .RE
.sp
بنابراین این کار پنجرهای به نام \fIMyWindow\fP را روی صفحه 0 0 از میزکار
فعلی قرار داده و بلافاصله دستور \fBIconify\fP را روی آن پنجره اجرا میکند.
.sp
توجه داشته باشید اگر \fIInitialMapCommand\fP به عنوان یک گزینه سراسری
برای همه پنجرهها استفاده شود، اما لازم باشد این دستور برای برخی پنجرهها
اعمال نشود، میتوان از عمل \fBNop\fP برای آن پنجرهها استفاده کرد، همانطور
که در مثال زیر آمده است:
.sp
.if n .RS 4
.nf
.fam C
Style * InitialMapCommand Iconify
Style XTeddy InitialMapCommand Nop
.fam
.fi
.if n .RE
.RE
.sp
\fBجایگذاری توسط مدیر پنجره (Window Manager placement)\fP
.RS 4
برنامهها میتوانند پنجرهها را در یک نقطه خاص از صفحه، چه از طریق
راهنماهای (hints) مدیر پنجره و چه از طریق تعیین موقعیت و ابعاد (geometry
specification) قرار دهند. هنگامی که هیچکدام از این کارها را انجام ندهند،
مدیر پنجره برای یافتن جایی برای پنجره وارد عمل میشود. Fvwm روشهای
متعددی را برای مواجهه با این وضعیت دارد. حالت پیشفرض \fITileCascadePlacement\fP
است.
.sp
\fIPositionPlacement\fP [\fICenter\fP|\fIUnderMouse\fP|\fImove\-arguments\fP] هنگامی
که بدون آرگومان استفاده شود، پنجرههای جدید در گوشه بالا سمت چپ
نمایشگر قرار میگیرند. با آرگومان \fICenter\fP، همه پنجرههای جدید
در مرکز صفحه ظاهر میشوند و با \fIUnderMouse\fP، پنجرهها تا جای ممکن
زیر نشانگر ماوس تراز میشوند. اگر پنجره به دلیل قرار داشتن نشانگر در لبه
صفحه نتواند روی صفحه جای بگیرد، با استفاده از این گزینه پنجره به داخل صفحه
رانده میشود. اگر هر \fImove\-arguments\fP دیگری داده شود، دقیقاً همانند
دستور \fBMove\fP تفسیر میشود (با این استثنا که ارجاعات به موقعیت فعلی
پنجره کار نمیکنند زیرا پنجره هنوز قرار نگرفته است).
.sp
\fICascadePlacement\fP پنجرههای جدید را بهطور خودکار به صورت آبشاری
قرار میدهد.
.sp
\fITileCascadePlacement\fP پنجرههای جدید را بهطور خودکار در مکانی
هوشمند قرار میدهد \- مکانی که در آن با هیچ پنجره دیگری روی صفحه
همپوشانی نداشته باشند. در صورتی که چنین مکانی پیدا نشود، از
\fICascadePlacement\fP به عنوان روش جایگزین (fall\-back) استفاده میشود.
.sp
\fITileManualPlacement\fP این حالت مانند \fITileCascadePlacement\fP است، اما
از \fIManualPlacement\fP به عنوان روش جایگزین استفاده میکند.
.sp
\fIMinOverlapPlacement\fP پنجرههای جدید را بهطور خودکار در مکانی
قرار میدهد که مساحت همپوشانی با پنجرههای دیگر (بر حسب پیکسل) به کمترین
مقدار برسد. بهطور پیشفرض این سیاست جایگذاری تلاش میکند از همپوشانی
با آیکونها و پنجرههای لایههای بالاتر اجتناب کند. این رفتار را میتوان با
سبک \fIMinOverlapPlacementPenalties\fP پیکربندی کرد.
.sp
\fIMinOverlapPercentPlacement\fP مشابه \fIMinOverlapPlacement\fP است
اما تلاش میکند به جای مساحت همپوشانی بر حسب پیکسل، درصد همپوشانی
با سایر پنجرهها را به کمترین مقدار برساند. این سیاست جایگذاری تلاش میکند
از پوشاندن کامل سایر پنجرهها جلوگیری کند و تلاش بیشتری میکند تا پنجرههای
کوچک پوشانده نشوند. این رفتار را میتوان با سبکهای
\fIMinOverlapPlacementPenalties\fP و
\fIMinOverlapPercentPlacementPenalties\fP پیکربندی کرد.
.sp
\fIMinOverlapPlacementPenalties\fP حداکثر ۶ آرگومان اعشاری مثبت یا
صفر میپذیرد:
.sp
.if n .RS 4
.nf
.fam C
normal ontop icon sticky below strut
.fam
.fi
.if n .RE
.sp
اگر آرگومانهای انتهایی مشخص نشوند، از مقادیر پیشفرض زیر استفاده میشود:
.sp
.if n .RS 4
.nf
.fam C
1 5 10 1 0.05 50
.fam
.fi
.if n .RE
.sp
برای بازنشانی این سبک به مقادیر پیشفرض، یک \*(Aq!\*(Aq پیش از آن قرار دهید.
این سبک سیاستهای جایگذاری \fIMinOverlapPlacement\fP و
\fIMinOverlapPercentPlacement\fP را پیکربندی میکند. ضریب \fInormal\fP پنجرههای
عادی را تحت تأثیر قرار میدهد، ضریب \fIontop\fP بر پنجرههایی با لایه بالاتر از
پنجره در حال جایگذاری تأثیر میگذارد، ضریب \fIicon\fP بر آیکونها تأثیر میگذارد،
ضریب \fIsticky\fP بر پنجرههای چسبنده تأثیر میگذارد، ضریب \fIbelow\fP بر پنجرههایی
با لایه پایینتر از پنجره در حال جایگذاری تأثیر میگذارد، ضریب \fIstrut\fP در صورتی که
پنجره در حال جایگذاری دارای سبک \fIEWMHPlacementUseWorkingArea\fP باشد، بر متمم
ناحیه کاری EWMH و در صورتی که دارای سبک \fIEWMHPlacementUseDynamicWorkingArea\fP
باشد، بر پنجرههای دارای راهنمای EWMH strut (یعنی راهنمای «لطفاً روی من را نپوشانید»)
تأثیر میگذارد. این ضرایب نشاندهنده مقداری از مساحت هستند که هنگام جایگذاری پنجره
جدید، برای این نوع پنجرهها (یا ناحیهها) به حساب میآید. به عنوان نمونه، بهطور پیشفرض
مساحت پنجرههای ontop ۵ برابر پنجرههای عادی شمرده میشود. بنابراین
\fIMinOverlapPlacement\fP و \fIMinOverlapPercentPlacement\fP پیش از پوشاندن یک
پنجره ontop، ۵ برابر مساحت بیشتری از یک پنجره دیگر را میپوشانند. برای اینکه با
پنجرههای ontop همانند پنجرههای دیگر رفتار شود، این مقدار را روی ۱ تنظیم کنید. برای
آنکه واقعاً از قرار دادن پنجرهها زیر پنجرههای ontop اجتناب شود، این مقدار را روی
عددی بالا، مثلاً ۱۰۰۰ قرار دهید. این سبک بر پنجرههایی که از قبل نگاشت شدهاند تأثیر
میگذارد و نه پنجرهای که هماکنون قرار داده میشود. یک استثنا برای این قاعده وجود دارد:
در صورتی که پنجره در حال جایگذاری دارای سبک \fIEWMHPlacementUseWorkingArea\fP
باشد، ضریب \fIstrut\fP بر پنجره جایگذاریشده اثر میگذارد..sp
\fIMinOverlapPercentPlacementPenalties\fP حداکثر ۴ آرگومان عدد صحیح مثبت یا صفر میپذیرد:
.sp
.if n .RS 4
.nf
.fam C
cover_100 cover_95 cover_85 cover_75
.fam
.fi
.if n .RE
.sp
اگر آرگومانهای انتهایی مشخص نشوند، از مقادیر پیشفرض استفاده میشود که عبارتند از:
.sp
.if n .RS 4
.nf
.fam C
12 6 4 1
.fam
.fi
.if n .RE
.sp
برای بازنشانی این سبک به مقادیر پیشفرض، یک \*(Aq!\*(Aq به ابتدای آن اضافه کنید. این سبک بر سیاست جایگذاری \fIMinOverlapPercentPlacement\fP تأثیر میگذارد و مشابه سبک \fIMinOverlapPlacementPenalties\fP است. ضریب \fIcover_xx\fP زمانی استفاده میشود که پنجره در حال جایگذاری، حداقل \fIxx\fP درصد از پنجره را بپوشاند. این ضریب به ضریب تعیینشده توسط سبک \fIMinOverlapPlacementPenalties\fP اضافه میشود.
.sp
\fIManualPlacement\fP (معروف به جایگذاری فعال). کاربر ملزم است هر پنجره جدید را بهصورت دستی جایگذاری کند. پنجره تا زمان انتخاب دستی مکان، تنها بهصورت یک کادر کشسان (rubber band) نمایش داده میشود. پنجره زمانی جایگذاری میشود که یکی از کلیدهای موشواره یا هر کلیدی به جز \fIEscape\fP فشرده شود. کلید Escape جایگذاری دستی را لغو کرده و پنجره را در گوشه بالا سمت چپ صفحه قرار میدهد. اگر در حین جایگذاری اولیه یک پنجره، دکمه ۲ موشواره فشرده شود (یا به ترتیب کلید \fIShift\fP و دکمه ۱ موشواره در صورتی که شبیهسازی Mwm با دستور \fBEmulate\fP فعال شده باشد)، از کاربر خواسته میشود اندازه پنجره را نیز تغییر دهد.
.sp
امکان تعریف دکمههای قابل استفاده برای جایگذاری پنجرهها با دستور \fBMove\fP و زمینه خاص \*(AqP\*(Aq برای جایگذاری وجود دارد (دستور \fBMove\fP را ببینید). با این حال، نمیتوان نحوه تغییر اندازه پنجره را به روشی غیر از آنچه که تحت تأثیر دستور \fBEmulate\fP است بازتعریف کرد. دکمه استفادهشده برای جایگذاری پنجره را میتوان با شرط \fIPlacedByButton\fP بررسی کرد (دستور \fBCurrent\fP را ببینید).
.sp
مثال:
.sp
.if n .RS 4
.nf
.fam C
Style * ManualPlacement
*FvwmEvent: PassID
*FvwmEvent: add_window GrowDownFunc
AddToFunc StartFunction
+ I FvwmEvent
AddToFunc GrowDownFunc
+ I windowid $0 (PlacedByButton 3) \(rs
Resize bottomright keep \-0p
.fam
.fi
.if n .RE
.sp
اکنون، هر زمان که پنجرهای ایجاد شود و کاربر دکمه ۳ را برای اتمام جایگذاری اولیه فشار دهد، اندازه پنجره بهطور خودکار تا جایی که به لبه پایینی صفحه برخورد کند افزایش مییابد.
.sp
\fIسبکهای جایگذاری قدیمی\fP شامل DumbPlacement / SmartPlacement / SmartPlacementOff، CleverPlacement / CleverPlacementOff، ActivePlacement / RandomPlacement، ActivePlacementsHonorsStartsOnPage / ActivePlacementsHonorsStartsOnPageOff همچنان پشتیبانی میشوند اما در آینده حذف خواهند شد. سبکهای قدیمی و جدید را میتوان مطابق جدول زیر تطبیق داد:
.sp
.if n .RS 4
.nf
.fam C
Style * DumbPlacement, RandomPlacement
\-\->
Style * CascadePlacement
Style * DumbPlacement, ActivePlacement
\-\->
Style * ManualPlacement
Style * SmartPlacement, \(rs
RandomPlacement, CleverPlacementOff
\-\->
Style * TileCascadePlacement
Style * SmartPlacement, \(rs
ActivePlacement, CleverPlacementOff
\-\->
Style * TileManualPlacement
Style * SmartPlacement, CleverPlacement
\-\->
Style * MinOverlapPlacement
Style * SmartPlacement, \(rs
ActivePlacement, CleverPlacement
\-\->
Style * MinOverlapPercentPlacement
Style * ActivePlacementsHonorsStartsOnPage
\-\->
Style * ManualPlacementsHonorsStartsOnPage
Style * ActivePlacementsHonorsStartsOnPageOff
\-\->
Style * ManualPlacementsHonorsStartsOnPageOff
.fam
.fi
.if n .RE
.RE
.sp
\fBگزینههای سیاست جایگذاری و پشتهبندی پنجرهها\fP
.RS 4
\fI!UsePPosition\fP به fvwm دستور میدهد هنگام افزودن پنجرههای جدید، موقعیت مشخصشده توسط برنامه (PPosition hint) را نادیده بگیرد. استفاده از PPosition برای برخی برنامهها ضروری است، اما در صورت عدم نیاز به آن، دردسر بزرگی ایجاد میکند. بسیاری از برنامهها PPosition را روی مقداری نامناسب مانند 0,0 (گوشه بالا سمت چپ) تنظیم میکنند. نکته: \fI!UsePPosition\fP معادل گزینه منسوخشده \fI!UsePPosition\fP است.
.sp
\fI!UseUSPosition\fP مانند \fI!UsePPosition\fP عمل میکند اما استفاده از موقعیت مشخصشده توسط کاربر که توسط برنامه تعیین شده (USPosition hint) را نادیده میگیرد. معمولاً نادیده گرفتن انتخاب کاربر کار درستی نیست، اما برخی برنامهها از نشانه USPosition سوءاستفاده میکنند تا پنجرههایشان را بدون رضایت کاربر در نقطه خاصی از صفحه مستقر کنند. نکته: \fI!UseUSPosition\fP معادل گزینه منسوخشده \fI!USPosition\fP است.
.sp
\fINoUseTransientPPosition\fP و \fIUseTransientPPosition\fP مشابه \fI!UsePPosition\fP و \fIUsePPosition\fP عمل میکنند اما تنها برای پنجرههای گذرا (transient) اعمال میشوند. نکته: \fI!UseTransientPPosition\fP معادل گزینه منسوخشده \fI!TransientPPosition\fP است.
.sp
\fINoUseIconPosition\fP به fvwm دستور میدهد هنگام آیکون کردن پنجره، موقعیت آیکون مشخصشده توسط برنامه (IconPosition hint) را نادیده بگیرد. نکته: \fI!UseIconPosition\fP معادل گزینه منسوخشده \fI!IconPosition\fP است.
.sp
\fIStartsOnDesk\fP یک آرگومان عددی میپذیرد که شماره میزکاری است که پنجره باید در ابتدا در آن قرار گیرد. توجه داشته باشید که برنامههای استاندارد Xt میتوانند این مقدار را از طریق منبع (resource) نیز مشخص کنند (مانند "\-xrm \*(Aq*Desk: 1\*(Aq").
.sp
\fIStartsOnPage\fP ۱، ۲، یا ۳ آرگومان عددی میپذیرد. اگر یک یا سه آرگومان مشخص شود، آرگومان اول (یا تنها آرگومان) شماره میزکار است. اگر سه آرگومان داده شود، آرگومانهای دوم و سوم موقعیت صفحهای x,y را در پنجره مجازی مشخص میکنند. اگر دو آرگومان مشخص شود، موقعیت صفحه را مشخص میکنند و هیچ اولویتی را برای میزکار مشخص نمیکنند. اگر تنها یک آرگومان داده شود، \fIStartsOnPage\fP دقیقاً مانند \fIStartsOnDesk\fP عمل میکند. برای آن دسته از برنامههای استاندارد Xt که این کاربرد را پشتیبانی میکنند، میزکار/صفحه آغازین میتواند از طریق منبع نیز مشخص شود (مانند "\-xrm \*(Aq*page: 1 0 2\*(Aq"). استفاده از \fIStartsOnPage\fP همراه با \fISkipMapping\fP روش کارآمدی است برای زمانی که میخواهید برنامهای را در صفحهای دیگر اجرا کرده و به کار فعلی خود ادامه دهید، به جای اینکه منتظر نمایش آن بمانید.
.sp
\fIStartsOnScreen\fP یک آرگومان میپذیرد که باید یک نام معتبر RandR باشد. پنجره جدید در صفحه نمایش مشخصشده قرار میگیرد. حالت پیشفرض، جایگذاری پنجرهها در صفحهای است که هنگام ایجاد پنجره، نشانگر موشواره در آن قرار دارد. با این حال، پنجرههایی که توسط fvwm جایگذاری نمیشوند (یعنی مواردی که دارای نشانه USPosition از ابعاد مشخصشده توسط کاربر هستند)، معمولاً در موقعیتی نسبت به تمام صفحههای شناساییشده قرار میگیرند.
.sp
\fIStartsOnPageIncludesTransients\fP باعث میشود سبک \fIStartsOnPage\fP حتی برای پنجرههای گذرا نیز اعمال شود. این گزینه معمولاً کاربردی نیست، زیرا پنجرههای گذرا عموماً کادرهای بازشویی (pop-up) هستند که مایلید در درگاه دید (viewport) فعلی شما ظاهر شوند؛ اما گهگاه برنامهای از یک پنجره گذرا برای مواردی مانند پنجره راهاندازی (startup window) استفاده میکند که نیاز است در محل خاصی تثبیت شود.
.sp
\fIManualPlacementIgnoresStartsOnPage\fP در صورتی که هنگام ایجاد یک پنجره، هر دو مورد \fIManualPlacement\fP و \fISkipMapping\fP فعال باشند، جایگذاری \fIStartsOnPage\fP یا \fIStartsOnDesk\fP را لغو میکند. این امر مانع از آن میشود که پنجرهای را بهصورت تعاملی جایگذاری کنید و سپس ندانید به کجا رفته است، چرا که در میزکار یا صفحه متفاوتی قرار گرفته است. \fIManualPlacementHonorsStartsOnPage\fP در هر صورت اجازه این اتفاق را میدهد. اگر \fISkipMapping\fP فعال نباشد، این گزینه هیچ اثری ندارد، زیرا fvwm برای انجام جایگذاری تعاملی به میزکار/صفحه مربوطه جابهجا میشود. مقدار پیشفرض \fIManualPlacementIgnoresStartsOnPage\fP است؛ عملکرد \fIManualPlacementHonorsStartsOnPage\fP مشابه نحوه مدیریت این وضعیت در سبک قدیمی \fIStartsOnDesk\fP است..sp
گزینهٔ \fICaptureHonorsStartsOnPage\fP باعث میشود که تصاحب اولیه (یک پنجرهٔ از قبل موجود) در زمان راهاندازی، پنجره را با توجه به مشخصات میزکار (desk)، صفحه (page) و صفحهنمایش (screen) در \fIStartsOnPage\fP و \fIStartsOnScreen\fP جایگذاری کند. \fICaptureIgnoresStartsOnPage\fP باعث میشود fvwm در تصاحب اولیه این تنظیمات (از جمله \fIStartsOnDesk\fP) را نادیده بگیرد. حالت پیشفرض \fICaptureIgnoresStartsOnPage\fP است.
.sp
گزینهٔ \fIRecaptureHonorsStartsOnPage\fP باعث میشود پنجره هنگام \fBRestart\fP طبق مشخصات desk، page و screen در \fIStartsOnPage\fP و \fIStartsOnScreen\fP جایگذاری شود یا به آنها بازگردد. \fIRecaptureIgnoresStartsOnPage\fP باعث میشود fvwm هنگام \fBRestart\fP موقعیت فعلی پنجره را حفظ کند. حالت پیشفرض \fIRecaptureIgnoresStartsOnPage\fP است.
.sp
گزینهٔ \fILayer\fP یک آرگومان اختیاری میپذیرد: یک عدد صحیح غیرمنفی. این لایهای است که پنجره در آن قرار میگیرد. اگر هیچ آرگومانی داده نشود، هر مقدارِ از پیش تنظیمشدهای حذف شده و لایهٔ پیشفرض اعمال میشود.
.sp
گزینهٔ \fIStaysOnTop\fP پنجره را در بالاترین لایه قرار میدهد. این لایه را میتوان با دستور \fBDefaultLayers\fP تغییر داد؛ مقدار پیشفرض 6 است.
.sp
گزینهٔ \fIStaysPut\fP پنجره را در لایهٔ قرارگیری (put layer) میگذارد. این لایه را میتوان با دستور \fBDefaultLayers\fP تغییر داد؛ مقدار پیشفرض 4 است.
.sp
گزینهٔ \fIStaysOnBottom\fP پنجره را در پایینترین لایه قرار میدهد. این لایه را میتوان با دستور \fBDefaultLayers\fP تغییر داد؛ مقدار پیشفرض 2 است.
.sp
گزینهٔ \fIStartsLowered\fP به fvwm دستور میدهد که پنجره را در ابتدا در پایین لایهٔ خود قرار دهد، برخلاف حالت پیشفرض \fIStartsRaised\fP.
.sp
گزینهٔ \fIStartShaded\fP به fvwm میگوید که پنجره را لوله (shade) کند. میتوان یک آرگومان جهت اختیاری مشخص کرد که میتواند یکی از مقادیر "\fINorth\fP"، "\fISouth\fP"، "\fIWest\fP"، "\fIEast\fP"، "\fINorthWest\fP"، "\fINorthEast\fP"، "\fISouthWest\fP" یا "\fISouthEast\fP" باشد؛ اگر جهتی تعیین نشود، پیشفرض لولهکردن به سمت شمال (north) است.
.sp
گزینهٔ \fISkipMapping\fP به fvwm میگوید هنگام نگاشت اولیه (mapping) پنجره، به میزی که پنجره روی آن قرار دارد تغییر مکان ندهد (مفید به همراه \fIStartsOnDesk\fP یا \fIStartsOnPage\fP).
.sp
گزینهٔ \fIKeepWindowGroupsOnDesk\fP باعث میشود پنجرههای جدیدی که نشانهٔ (hint) گروه پنجره برای آنها تنظیم شده است، روی همان میزی ظاهر شوند که سایر پنجرههای همان گروه قرار دارند. از آنجا که این رفتار ممکن است گیجکننده باشد، تنظیم پیشفرض \fIScatterWindowGroups\fP است. در این حالت هنگام جایگذاری پنجرهها، نشانهٔ گروه پنجره نادیده گرفته میشود.
.RE
.sp
\fBپنجرههای موقت (Transient windows)\fP
.RS 4
گزینهٔ \fIDecorateTransient\fP باعث میشود به پنجرههای موقت (transient)، که معمولاً بدون تزئین رها میشوند، تزئینات معمول fvwm (نوار عنوان، دکمهها و غیره) داده شود. توجه داشته باشید که برخی از پنجرههای بازشو (pop\-up)، مانند منوهای xterm، توسط مدیر پنجره مدیریت نمیشوند و همچنان تزئیناتی دریافت نمیکنند. گزینهٔ \fINakedTransient\fP (پیشفرض) باعث میشود پنجرههای موقت تزئینات استاندارد را دریافت نکنند. شما فقط میتوانید کلیدها یا دکمههای موشواره را به کنارهها و بخش کلاینت پنجرهٔ بدون تزئین مقید (bind) کنید (زمینههای \*(AqS\*(Aq و \*(AqW\*(Aq در مقیدسازیها؛ دستورهای \fBMouse\fP و \fIKey\fP را ببینید).
.sp
پنجرهای با سبک \fIRaiseTransient\fP که دارای پنجرههای موقت است، هنگام بالا آمدن (raise)، تمام پنجرههای موقت خود را بالا میآورد. سبک \fIDontRaiseTransient\fP این رفتار را غیرفعال میکند. در این صورت با همهٔ پنجرهها طوری رفتار میشود که گویی هیچ پنجرهٔ موقتی ندارند.
.sp
پنجرهای با سبک \fILowerTransient\fP که دارای پنجرههای موقت است، هنگام پایین رفتن (lower)، تمام پنجرههای موقت خود را پایین میبرد. سبک \fIDontLowerTransient\fP این رفتار را غیرفعال میکند. در این صورت با همهٔ پنجرهها طوری رفتار میشود که گویی هیچ پنجرهٔ موقتی ندارند.
.sp
سبک \fIStackTransientParent\fP سبکهای \fIRaiseTransient\fP و \fILowerTransient\fP را تکمیل میکند. بالا آوردن پنجرهای با سبک \fIStackTransientParent\fP، چنانچه پنجرهای که بالا آورده میشود یک پنجرهٔ موقت باشد و پنجرهٔ اصلی آن سبک \fIRaiseTransient\fP داشته باشد، عمل بالا آوردن را به پنجرهٔ اصلی منتقل میکند؛ این اثر باعث میشود بالا آوردن یک پنجرهٔ موقت دقیقاً مانند بالا آوردن پنجرهٔ اصلی عمل کند \- کل گروه بالا آورده میشود. رفتار مشابهی برای پایین بردن کل گروه پنجرههای موقت در حالتی که پنجرهٔ اصلی سبک \fILowerTransient\fP داشته باشد برقرار است. گزینهٔ \fIDontStackTransientParent\fP این رفتار را خاموش میکند. اگر \fIRaiseTransient\fP و \fILowerTransient\fP استفاده نشوند، \fI(Dont)StackTransientParent\fP هیچ اثری ندارد.
.sp
یک شبیهسازی معقول از بالا/پایین بردن (raise/lower) در Motif برای پنجرههای موقت به این شکل امکانپذیر است:
.sp
.if n .RS 4
.nf
.fam C
Style * RaiseTransient
Style * LowerTransient
Style * StackTransientParent
.fam
.fi
.if n .RE
.RE
.sp
\fBسبکهای نشانههای گستردهٔ مدیر پنجره (Extended Window Manager Hints styles)\fP
.RS 4
برای درک اصطلاحات استفادهشده در این زیربخش، لطفاً بخش \fBExtended Window Manager Hints\fP را بخوانید.
.sp
دستور \fIEWMHDonateIcon\fP به fvwm اعلام میکند که اگر برنامه نشانهٔ شمایل (icon hint) مربوط به ewmh را ارائه نداده باشد (و شمایل استفادهشده توسط fvwm یک پنجرهٔ شمایل نباشد)، آن را با شمایلی که توسط fvwm استفاده میشود تنظیم کند. \fIEWMHDonateMiniIcon\fP همین کار را برای شمایلهای کوچک (mini icons) انجام میدهد. این امر به صفحهبند (pager)، نوار وظیفه (taskbar)، جعبهٔ شمایل (iconbox) و غیره که سازگار هستند اجازه میدهد همان شمایلهای (کوچک) fvwm را نمایش دهند. توجه داشته باشید که در برخی سختافزارها (مانند نمایشگرهای 8\-بیتی) این سبکها میتوانند نگاشت پنجره را کند کنند و بهطور کلی فقط یکی از این سبکها برای یک برنامهٔ سازگار مورد نیاز است. \fIEWMHDontDonateIcon\fP و \fIEWMHDontDonateMiniIcon\fP مقادیر پیشفرض را که عدم تنظیم هرگونه نشانهٔ شمایل (کوچک) ewmh است بازمیگردانند.
.sp
بهطور پیشفرض، اگر برنامهای یک نشانهٔ شمایل ewmh با اندازهٔ کوچک ارائه دهد (یعنی ارتفاع و عرض کمتر یا مساوی ۲۲)، fvwm از این شمایل به عنوان شمایل کوچک خود استفاده میکند. گزینهٔ \fIEWMHMiniIconOverride\fP به fvwm دستور میدهد که شمایلهای ewmh را نادیده گرفته و از شمایل کوچکی که توسط سبک \fIMiniIcon\fP ارائه شده است استفاده کند. \fIEWMHNoMiniIconOverride\fP حالت پیشفرض را بازمیگرداند.
.sp
گزینهٔ \fIEWMHUseStackingOrderHints\fP باعث میشود fvwm از نشانههای EWMH استفاده کرده و نشانههای EWMH را که لایهٔ پنجره را تغییر میدهند رعایت کند. \fIEWMHIgnoreStackingOrderHints\fP باعث میشود fvwm نشانههای لایهٔ EWMH را نادیده بگیرد.
.sp
یک برنامه میتواند با یک نشانه، فضای رزروشدهای را روی میزکار درخواست کند. در اصطلاحات EWMH، چنین نشانهای پایه یا تکیهگاه (strut) نامیده میشود و برای محاسبهٔ فضای کاری (working area) به کار میرود و ممکن است برای جایگذاری پنجره و در دستور بیشینهسازی (maximize) استفاده شود. گزینهٔ \fIEWMHIgnoreStrutHints\fP باعث میشود fvwm چنین نشانههایی را نادیده بگیرد، در حالی که \fIEWMHUseStrutHints\fP باعث میشود fvwm از آن استفاده کند که حالت پیشفرض است.
.sp
گزینهٔ \fIEWMHIgnoreStateHints\fP باعث میشود هنگام نگاشت پنجرهٔ جدید، fvwm نشانههای اولیهٔ وضعیت EWMH را نادیده بگیرد. حالت پیشفرض \fIEWMHUseStateHints\fP باعث میشود fvwm چنین نشانههایی را بپذیرد.
.sp
گزینهٔ \fIEWMHIgnoreWindowType\fP باعث میشود fvwm مشخصات نوع پنجره در EWMH را نادیده بگیرد. مقدار پیشفرض \fI!EWMHIgnoreWindowType\fP باعث میشود fvwm پنجرههای انواع مشخصشده را مطابق همان سبکبندی کند.
.sp
گزینهٔ \fIEWMHMaximizeIgnoreWorkingArea\fP باعث میشود fvwm هنگام اجرای دستور \fBMaximize\fP، فضای کاری EWMH را نادیده بگیرد. با \fIEWMHMaximizeUseWorkingArea\fP فضای کاری EWMH استفاده میشود، همانطور که با \fIEWMHMaximizeUseDynamicWorkingArea\fP فضای کاری پویای EWMH استفاده میشود (پیشفرض).
.sp
گزینهٔ \fIEWMHPlacementIgnoreWorkingArea\fP باعث میشود fvwm هنگام جایگذاری (یا جایگذاری مجدد) یک پنجره، فضای کاری EWMH را نادیده بگیرد. با \fIEWMHPlacementUseWorkingArea\fP فضای کاری EWMH لحاظ میشود، همانطور که با \fIEWMHPlacementUseDynamicWorkingArea\fP فضای کاری پویای EWMH در نظر گرفته میشود (پیشفرض). توجه داشته باشید که با سیاستهای جایگذاری \fIMinOverlapPlacement\fP و \fIMinOverlapPercentPlacement\fP، نحوهٔ لحاظ کردن فضای کاری (پویای) EWMH با سبک \fIMinOverlapPlacementPenalties\fP قابل پیکربندی است.
.RE
.sp
\fBمتفرقه (Miscellaneous)\fP
.RS 4
سبکهای \fIBackingStore\fP، \fIBackingStoreOff\fP و \fIBackingStoreWindowDefault\fP مشخص میکنند که آیا کارساز X (X server) برای پنجره از پشتیبانگیری تصویر (backing store) استفاده کند یا خیر. \fIBackingStore\fP بدین معنی است که X server تلاش میکند بخشهای پوشیدهشدهٔ پنجره را در حافظه نگه دارد. اگر کلاینت روی همان دستگاه کارساز X اجرا شود، این حالت معمولاً کندتر است، اما در صورت کند بودن اتصال، میتواند بسیار سریعتر باشد (همچنین \fISaveUnder\fP در زیر را ببینید). گزینهٔ \fIBackingStoreOff\fP پشتیبانگیری تصویر را برای پنجره غیرفعال میکند. بهطور پیشفرض، fvwm خودش backing store را فعال یا غیرفعال نمیکند، بلکه آن را طبق درخواست پنجره رها میکند. برای بازگشت به انتخاب خود برنامه، از سبک \fIBackingStoreWindowDefault\fP استفاده کنید.
.sp
نکته: اگر کارساز X اجازهٔ backing store ندهد، این سبک بیفایده است.
.sp
سبک \fISaveUnder\fP مشخصهٔ متناظر پنجره را در کارساز X فعال میکند. برای پنجرهای که از این سبک استفاده میکند، کارساز X تلاش میکند تا گرافیک زیر آن را در حافظه ذخیره کند، که معمولاً اگر کلاینت روی همان دستگاه کارساز X اجرا شود کندتر خواهد بود. \fISaveUnder\fP در صورتی که اتصال به کارساز X کند باشد (مانند اتصال از طریق پیوند مودم) ممکن است fvwm را سریعتر کند. برای غیرفعال کردن save under، از سبک \fISaveUnderOff\fP استفاده کنید. این حالت پیشفرض است. همچنین \fIBackingStore\fP در بالا را ببینید.
.sp
نکته: اگر کارساز X اجازهٔ save under را ندهد، این سبک بیفایده است.
.sp
سبک \fIParentalRelativity\fP به کلاینتهایی که از نگاشتپیکسلی (pixmap) پسزمینه از نوع \fIParentRelative\fP استفاده میکنند امکان میدهد به شفافیت دست یابند. ماژولهای Fvwm که از مجموعهرنگهای (colorsets) شفاف پشتیبانی میکنند به این تنظیم نیاز دارند. گزینهٔ \fIOpacity\fP حالت پیشفرض است و برای کارایی بهتر باید برای همهٔ کلاینتهای غیرشفاف استفاده شود..sp
\fIMwmDecor\fP باعث میشود fvwm تلاش کند هینتهای تزیینات mwm را که برنامهها گاهی به کار میبرند شناسایی کرده و رعایت کند. برای خاموش کردن این سبک، از سبک \fINoDecorHint\fP استفاده کنید.
.sp
\fIMwmFunctions\fP باعث میشود fvwm تلاش کند هینتهای عملیات ممنوعهٔ mwm را که برنامهها گاهی استفاده میکنند شناسایی و رعایت کند. \fIHintOverride\fP موجب میشود fvwm عملیاتی را که mwm ممنوع میکند کمرنگ/سایهدار کند، اما در هر حال به شما اجازه میدهد آن عملیات را انجام دهید. \fINoFuncHint\fP هینتهای mwm را به طور کامل خاموش میکند.
.sp
\fIOLDecor\fP باعث میشود fvwm تلاش کند هینتهای olwm و olvwm را که بسیاری از برنامههای قدیمیتر XView و OLIT به کار میبرند شناسایی و رعایت کند. این گزینه را با \fINoOLDecor\fP خاموش کنید.
.sp
\fIUseDecor\fP این سبک منسوخ شده است و در آینده حذف خواهد شد. برنامههایی برای جایگزینی آن با یک راهحل منعطفتر در fvwm\-3.0 در دست است.
.sp
\fIUseDecor\fP یک آرگومان میپذیرد: نام تزیینی که با \fBAddToDecor\fP ایجاد شده است. اگر هیچ نام تزیینی مشخص نشود، از تزیین "Default" استفاده میشود. پنجرهها در واقع شامل تزیینات نیستند، بلکه همواره به یکی از آنها اختصاص مییابند. اگر تزیین بعداً با \fBAddToDecor\fP اصلاح شود، تغییرات برای تمام پنجرههایی که به آن اختصاص داده شدهاند قابل مشاهده خواهد بود. تزیین یک پنجره را میتوان با \fBChangeDecor\fP مجدداً اختصاص داد.
.sp
\fIUseStyle\fP این سبک منسوخ شده است و در آینده حذف خواهد شد. برنامههایی برای جایگزینی آن با یک راهحل منعطفتر در fvwm\-3.0 در دست است.
.sp
\fIUseStyle\fP یک آرگومان میگیرد که نام سبک دیگری است. به این ترتیب میتوانید نامهای پنجرهٔ نامرتبط را بهسادگی و بدون تایپ مجدد، وارث ویژگیهای مشابه کنید. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
Style rxvt UseStyle XTerm
.fam
.fi
.if n .RE
.sp
هشدار: اگر سبکی از یک یا چند سبک والد ساخته شده باشد و سبکهای والد تغییر کنند، سبک مشتقشده تغییر نمیکند. برای رسیدن به این مقصود باید خط \fIUseStyle\fP را دوباره اجرا کنید.
.sp
\fIUnmanaged\fP پنجرههای دارای گزینهٔ سبک \fIUnmanaged\fP توسط fvwm نادیده گرفته میشوند. آنها تزیین نمیشوند، قابل جابهجایی یا تغییر اندازه نیستند و غیره. احتمالاً مایل خواهید بود از \fBBugopts RaiseOverUnmanaged\fP نیز استفاده کنید. این گزینه میتواند با سبک \fI!Unmanaged\fP خاموش شود.
.sp
\fIState\fP مقدار اولیهٔ یکی از ۳۲ وضعیت تعریفشده توسط کاربر را که با هر پنجره مرتبط است، تعیین میکند. شمارهٔ وضعیت از 0 تا 31 متغیر است و باید به عنوان یک آرگومان داده شود. این وضعیتها هیچ معنایی در fvwm ندارند، اما میتوان آنها را در دستورهای شرطی مانند \fBNext\fP با شرط \fIState\fP بررسی کرده و با دستور \fBState\fP دستکاری نمود.
.sp
.if n .RS 4
.nf
.fam C
# turn on state 11 for xterms ...
Style xterm State 11
# ... but not for rxvts.
Style rxvt !State 11
.fam
.fi
.if n .RE
.sp
پنجرههای دارای سبکهای \fIWindowListSkip\fP در منویی که با دستور \fBWindowList\fP ایجاد میشود یا فهرستهای نشاندادهشده در ماژولهایی مانند \fBFvwmIconMan\fP ظاهر نمیشوند. در ماژولها، این سبک معمولاً با یک گزینه قابل نادیده گرفتن است. لطفاً برای اطلاعات بیشتر به صفحهٔ راهنمای ماژول مربوطه مراجعه کنید. برای غیرفعال کردن این ویژگی، از سبک پیشفرض \fIWindowListHit\fP استفاده کنید.
.sp
سبکهای \fICirculateSkip\fP و \fICirculateHit\fP کنترل میکنند که آیا پنجره توسط دستورهای شرطی، برای مثال \fBNext\fP، \fIPrev\fP یا \fIAll\fP در نظر گرفته شود یا خیر. پنجرههای دارای \fICirculateSkip\fP هرگز توسط دستورهای شرطی انتخاب نمیشوند. با این حال، این سبکها را میتوان صراحتاً در شرط با شروط \fICirculateHit\fP، \fICirculateHitIcon\fP یا \fICirculateHitShaded\fP بازنویسی (override) کرد، و برخی دستورهای شرطی مانند \fBCurrent\fP و \fIAll\fP به طور پیشفرض این کار را انجام میدهند. سبکهای \fICirculateSkipIcon\fP، \fICirculateHitIcon\fP، \fICirculateSkipShaded\fP و \fICirculateHitShaded\fP مانند \fICirculateSkip\fP و \fICirculateHit\fP کار میکنند اما تنها برای پنجرههای آیکونشده یا سایهدار اعمال میشوند. نکته: اگر چندین گزینهٔ .\|.\|.Skip.\|.\|. ترکیب شوند، پنجرهها تنها زمانی انتخاب میشوند که با هیچیک از شرایط مشخصشده تطابق نداشته باشند. بنابراین، با:
.sp
.if n .RS 4
.nf
.fam C
Style * CirculateSkipIcon, CirculateSkipShaded
.fam
.fi
.if n .RE
.sp
تنها پنجرههایی انتخاب میشوند که نه آیکونشده باشند و نه سایهدار. نکته: به دلایل تاریخی، دستورهای شرطی نامهای این سبکها را به عنوان نام شرط درک میکنند. مراقب باشید که آنها را اشتباه نگیرید.
.RE
.sp
\fBمثالها\fP
.RS 4
.sp
.if n .RS 4
.nf
.fam C
# Change default fvwm behavior to no title\-
# bars on windows! Also define a default icon.
Style *\& !Title,\& \(rs
Icon unknown1.xpm,\& \(rs
BorderWidth 4,\& \(rs
HandleWidth 5
# now, window specific changes:
Style Fvwm* !Handles, Sticky,\& \(rs
WindowListSkip,\& \(rs
BorderWidth 0
Style FvwmPager\& StaysOnTop, BorderWidth 0
Style *lock\& !Handles, Sticky,\& \(rs
StaysOnTop, WindowListSkip
Style xbiff\& Sticky, WindowListSkip
Style FvwmButtons !Handles, Sticky,\& \(rs
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,\& \(rs
StartsOnDesk 2
Style xman\& Icon xman.xpm
Style matlab\& Icon math4.xpm,\& \(rs
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,\& \(rs
StartsOnPage 1 1 1
.fam
.fi
.if n .RE
.sp
توجه داشته باشید که تمام مشخصههای یک پنجره با یکدیگر OR میشوند. در مثال بالا، "FvwmPager" مشخصهٔ \fIStaysOnTop\fP را از طریق تطابق دقیق نام پنجره دریافت میکند، اما همچنین با تطابق با "Fvwm*"، ویژگیهای \fI!Handles\fP، \fISticky\fP و \fIWindowListSkip\fP را نیز میگیرد. این پنجره به موجب تطابق با "*"، مشخصهٔ \fI!Title\fP را به دست میآورد. اگر سبکهای متناقضی برای یک پنجره مشخص شده باشند، آخرین سبک مشخصشده استفاده خواهد شد.
.RE
.sp
\fBWindowStyle\fP \fIoptions\fP
.RS 4
ویژگیها (سبکها) را روی پنجرهٔ انتخابشده اعمال میکند. مقادیر \fIoptions\fP دقیقاً مانند موارد دستور \fBStyle\fP هستند.
.RE.SS "سبکهای پنجره (Window Styles)"
.sp
\fBAddButtonStyle\fP button [\fIstate\fP] [\fIstyle\fP] [\-\- [!]\fIflag\fP .\|.\|.]
.RS 4
یک سبک دکمه را به \fIbutton\fP اضافه میکند. \fIbutton\fP میتواند شماره یک دکمه یا یکی از «\fIAll\fP»، «\fILeft\fP» یا «\fIRight\fP» باشد. \fIstate\fP میتواند «\fIActiveUp\fP»، «\fIActiveDown\fP»، «\fIInactiveUp\fP» یا «\fIInactiveDown\fP» باشد، یا «\fIActive\fP» (همانند هر دو «ActiveUp» و «ActiveDown») یا «\fIInactive\fP» (همانند هر دو «InactiveUp» و «InactiveDown») یا هر یک از این ۶ مورد با پیشوند «\fIToggled\fP». وضعیتهای «Active» به پنجره دارای تمرکز (focused) و وضعیتهای «Inactive» به تمامی پنجرههای دیگر اعمال میشوند. وضعیتهای «Up» برای دکمههای فشردهنشده و وضعیتهای «Down» برای دکمههای فشردهشده به کار میروند. پیشوند «Toggled» به پنجرههای بیشینهشده (maximized)، سایهدار (shaded) یا چسبان (sticky) اشاره دارد که سبک دکمه \fIMwmDecor.\|.\|.\fP متناظر برای آنها تنظیم شده باشد. علاوه بر این، میانبرهای زیر نیز ممکن است استفاده شوند: «\fIAllNormal\fP»، «\fIAllToggled\fP»، «\fIAllActive\fP»، «\fIAllInactive\fP»، «\fIAllUp\fP» و «\fIAllDown\fP». اینها در واقع ماسکهای متفاوتی برای ۴ وضعیت مجزا از ۸ وضعیت کلی هستند. این موارد نیز پشتیبانی میشوند: «\fIAllActiveUp\fP»، «\fIAllActiveDown\fP»، «\fIAllInactiveUp\fP» و «\fIAllInactiveDown\fP».
.sp
اگر \fIstate\fP حذف شود، سبک به تمام وضعیتها افزوده میشود. اگر \fIstyle\fP و \fIflags\fP در پرانتز قرار گیرند، میتوان چندین تعریف \fIstate\fP را در یک خط مشخص کرد. پرچمهای (\fIFlags\fP) مربوط به سبکهای دکمه اضافی پس از تعریف قابل تغییر نیستند.
.sp
دکمهها به ترتیب تعریف رسم میشوند؛ از جدیدترین سبک دکمه آغاز شده و به دنبال آن مواردی که با \fBAddButtonStyle\fP اضافه شدهاند رسم میگردند. برای پاککردن پشته سبک دکمه، تغییر پرچمهای سبک، یا برای شرح سبکها و پرچمهای موجود، دستور \fBButtonStyle\fP را ببینید.
.sp
مثالها:
.sp
.if n .RS 4
.nf
.fam C
**ButtonStyle** 1 Pixmap led.xpm \-\- Top Left
**ButtonStyle** 1 ActiveDown HGradient 8 grey black
**ButtonStyle All** \-\-\& UseTitleStyle
AddButtonStyle 1 \(rs
ActiveUp (Pixmap a.xpm) \(rs
ActiveDown (Pixmap b.xpm \-\- Top)
AddButtonStyle 1 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1
.fam
.fi
.if n .RE
.sp
در ابتدا در این مثال تمام وضعیتهای دکمه روی یک پیکسمپ (pixmap) تنظیم میشوند. خط دوم وضعیت «ActiveDown» را با یک گرادیان جایگزین میکند (این دستور پیکسمپ تخصیصیافته در خط قبلی را که همان سبک را به تمام وضعیتها اختصاص داده بود، بازنویسی میکند). سپس، پرچم \fIUseTitleStyle\fP برای تمام دکمهها تنظیم میشود که باعث میشود fvwm قبل از رسم دکمهها، هر سبکی را که با \fBTitleStyle\fP تنظیم شده است رسم کند. در نهایت، از \fBAddButtonStyle\fP برای قرار دادن پیکسمپهای اضافی برای هر دو وضعیت «ActiveUp» و «ActiveDown» استفاده شده و یک سبک دکمه برداری (vector) روی تمام وضعیتها رسم میشود.
.RE
.sp
\fBAddTitleStyle\fP [\fIstate\fP] [\fIstyle\fP] [\-\- [!]\fIflag\fP .\|.\|.]
.RS 4
یک سبک عنوان را به نوار عنوان اضافه میکند. \fIstate\fP میتواند «\fIActiveUp\fP»، «\fIActiveDown\fP»، «\fIInactiveUp\fP» یا «\fIInactiveDown\fP» باشد، یا «\fIActive\fP» (همانند هر دو «ActiveUp» و «ActiveDown») یا «\fIInactive\fP» (همانند هر دو «InactiveUp» و «InactiveDown») یا هر یک از این ۶ مورد با پیشوند «Toggled». اگر \fIstate\fP حذف شود، سبک به تمام وضعیتها افزوده میشود. اگر \fIstyle\fP و \fIflags\fP در پرانتز محصور شوند، میتوان تعاریف چندین \fIstate\fP را در یک خط قرار داد. این دستور بسیار شبیه به دستور \fBAddButtonStyle\fP است.
.sp
نوارهای عنوان به ترتیب تعریف رسم میشوند؛ از جدیدترین \fBTitleStyle\fP آغاز شده و به دنبال آن مواردی که با \fBAddTitleStyle\fP اضافه شدهاند رسم میگردند. برای پاککردن پشته سبک عنوان، تغییر پرچمهای سبک، یا برای شرح سبکها و پرچمهای موجود، دستورات \fBTitleStyle\fP و \fBButtonStyle\fP را ببینید.
.RE
.sp
\fBAddToDecor\fP \fIdecor\fP
.RS 4
این دستور منسوخ شده است و در آینده حذف خواهد شد. برنامههایی برای جایگزینی آن با یک راهحل انعطافپذیرتر در fvwm\-3.0 وجود دارد.
.sp
دستورات را به دکوری به نام \fIdecor\fP اضافه کرده یا تغییر مسیر میدهد. دکور نامی است که به مجموعهای از دستورات داده میشود که بر سبکهای دکمه، سبکهای نوار عنوان و سبکهای حاشیه تأثیر میگذارند. اگر \fIdecor\fP وجود نداشته باشد ایجاد میشود؛ در غیر این صورت \fIdecor\fP موجود تغییر مییابد.
.sp
دکورهای جدید دقیقاً مانند دکور «default» بدون هیچگونه تعاریف سبکی شروع میشوند. یک دکور معین را میتوان با گزینه \fIUseDecor\fP از دستور \fBStyle\fP به مجموعهای از پنجرهها اعمال کرد. اصلاح یک دکورِ موجود، بر تمامی پنجرههایی که در حال حاضر به آن اختصاص داده شدهاند تأثیر میگذارد.
.sp
دستور \fBAddToDecor\fP در نحوه استفاده شبیه به دستورات \fBAddToMenu\fP و \fBAddToFunc\fP است، با این تفاوت که منوها و توابع با دستورات \fBButtonStyle\fP، \fBAddButtonStyle\fP، \fBTitleStyle\fP، \fBAddTitleStyle\fP و \fBBorderStyle\fP جایگزین شدهاند. دکورهای ایجادشده با \fBAddToDecor\fP را میتوان با \fBChangeDecor\fP، \fBDestroyDecor\fP، \fBUpdateDecor\fP و گزینه \fBStyle\fP مدیریت و دستکاری کرد.
.sp
مثال زیر یک دکور به نام «FlatDecor» و یک سبک به نام «FlatStyle» ایجاد میکند. اینها موجودیتهای مجزایی هستند:
.sp
.if n .RS 4
.nf
.fam C
AddToDecor FlatDecor
+ ButtonStyle All Active (\-\- flat) Inactive (\-\- flat)
+ TitleStyle\& \-\- flat
+ BorderStyle \-\- HiddenHandles NoInset
Style FlatStyle \(rs
UseDecor FlatDecor, HandleWidth 4, Colorset 0
Style xterm UseStyle FlatStyle
.fam
.fi
.if n .RE
.sp
دکور یک پنجره موجود را میتوان با \fBChangeDecor\fP دوباره تخصیص داد. یک دکور را میتوان با \fBDestroyDecor\fP حذف کرد.
.sp
.if n .RS 4
.nf
.fam C
DestroyDecor FlatDecor
AddToDecor FlatDecor ...
Style FlatStyle UseDecor FlatDecor
.fam
.fi
.if n .RE
.sp
و اکنون سبک را دوباره اعمال کنید:
.sp
.if n .RS 4
.nf
.fam C
Style xterm UseStyle FlatStyle
.fam
.fi
.if n .RE
.RE
.sp
\fBBorderStyle\fP \fIstate\fP [\fIstyle\fP] [\-\- [!]\fIflag\fP .\|.\|.]
.RS 4
یک سبک حاشیه را برای پنجرهها تعریف میکند. \fIstate\fP میتواند «\fIActive\fP» یا «\fIInactive\fP» باشد. اگر \fIstate\fP حذف شود، سبک برای هر دو وضعیت تنظیم میشود. اگر \fIstyle\fP و \fIflags\fP در پرانتز محصور شوند، میتوان چندین تعریف \fIstate\fP را در هر خط مشخص کرد.
.sp
\fIstyle\fP زیرمجموعهای از سبکهای دکمه موجود است و تنها میتواند \fITiledPixmap\fP (پیکسمپهای یکنواختی که با رنگهای لبه مورب (bevel) همخوانی دارند در این حالت بهترین عملکرد را دارند) یا \fIColorset\fP باشد. اگر یک \*(Aq!\*(Aq به ابتدای هر \fIflag\fP اضافه شود، رفتار آن معکوس میشود. اگر \fIstyle\fP مشخص نشده باشد، میتوان پرچمها را بدون بازنشانی سبک تغییر داد.
.sp
پرچم \fIHiddenHandles\fP خطوط جداکننده دستگیره گوشه را در پنجرههای دارای دستگیره پنهان میکند (این گزینه برای پنجرههای !\fIHandles\fP بیتأثیر است). بهطور پیشفرض، \fIHiddenHandles\fP غیرفعال است.
.sp
پرچم \fINoInset\fP مکمل \fIHiddenHandles\fP است. در صورت تعیین، لبه مورب داخلی دور قاب پنجره رسم نمیشود. اگر \fIHiddenHandles\fP مشخص نشده باشد، قاب کمی عجیب به نظر میرسد.
.sp
گزینه \fIRaised\fP باعث رسم یک الگوی برجسته میشود (پیشفرض). \fISunk\fP باعث رسم الگوی فرورفته میشود. \fIFlat\fP از رسم الگوی برجسته جلوگیری میکند.
.sp
برای تزئین حاشیههای پنجره فعال و غیرفعال با یک پیکسمپ بافتدار، میتوان اینگونه مشخص کرد:
.sp
.if n .RS 4
.nf
.fam C
BorderStyle Active TiledPixmap marble.xpm
BorderStyle Inactive TiledPixmap granite.xpm
BorderStyle Active \-\- HiddenHandles NoInset
.fam
.fi
.if n .RE
.sp
برای پاککردن سبک برای هر دو وضعیت:
.sp
.if n .RS 4.nf
.fam C
BorderStyle Simple
.fam
.fi
.if n .RE
.sp
برای پاکسازی یک حالتِ منفرد:
.sp
.if n .RS 4
.nf
.fam C
BorderStyle Active Simple
.fam
.fi
.if n .RE
.sp
برای لغو یک پرچم برای حالتی معین:
.sp
.if n .RS 4
.nf
.fam C
BorderStyle Inactive \-\- !NoInset
.fam
.fi
.if n .RE
.sp
دکمههای نوار عنوان میتوانند سبک حاشیه را با پرچم \fIUseBorderStyle\fP به ارث ببرند (به \fBButtonStyle\fP مراجعه کنید).
.RE
.sp
\fBButtonState\fP [ActiveDown \fIbool\fP] [Inactive \fIbool\fP] [InactiveDown \fIbool\fP]
.RS 4
دستور \fBButtonState\fP تعیین میکند که کدام حالتهای عنوان پنجرهها و دکمههای نوار عنوان استفاده شوند. مقدار پیشفرض استفاده از هر چهار حالت است: «ActiveUp»، «ActiveDown»، «InactiveUp» و «InactiveDown» (دستورهای \fBButtonStyle\fP و \fBTitleStyle\fP را ببینید). آرگومان \fIbool\fP پس از کلیدواژه، استفاده از حالت تعیینشده («True») یا عدم استفاده از آن («False») را کنترل میکند. پرچم \fIbool\fP مشابه سایر دستورها است و تنها به «True» یا «False» محدود نمیشود؛ از «Yes» و «No» نیز میتوان استفاده کرد. حالت «ActiveUp» را نمیتوان غیرفعال کرد. اگر هیچ آرگومانی ارائه نشود یا آرگومانهای دادهشده نامعتبر باشند، مقدار پیشفرض بازیابی میشود.
.sp
اگر آرگومان \fIActiveDown\fP برابر «False» باشد، سبک دکمهٔ متفاوتی برای دکمههای فشردهشده استفاده نمیشود، بلکه حتی هنگام فشردهشدن دکمه نیز حالت «ActiveUp» به کار میرود.
.sp
اگر آرگومان \fIInactive\fP برابر «False» باشد، پنجرههای فوکوسشده و غیرفوکوس ظاهری مشابه خواهند داشت و همواره حالتهای «Active» متناظر استفاده میشوند.
.sp
اگر آرگومان \fIInactiveDown\fP برابر «False» باشد (تنها زمانی اعمال میشود که \fIInactive\fP برابر «True» باشد)، عنوانها و دکمههای عنوان فشردهشده در پنجرههای غیرفوکوس بسته به مقادیر سایر کلیدواژهها، با استفاده از حالتهای «InactiveUp» یا «ActiveUp» رسم میشوند.
.RE
.sp
\fBButtonStyle\fP button [\fIstate\fP] [\fIstyle\fP] [\-\- [!]\fIflag\fP .\|.\|.]
.RS 4
سبک دکمه را برای دکمهٔ نوار عنوان تنظیم میکند. آرگومان \fIbutton\fP شمارهٔ دکمهٔ نوار عنوان بین 0 تا 9، یا یکی از «\fIAll\fP»، «\fILeft\fP»، «\fIRight\fP» یا «\fIReset\fP» است. شمارهگذاری دکمهها در بخش دستور \fBMouse\fP شرح داده شده است. اگر \fIstyle\fP و \fIflags\fP درون پرانتز قرار گیرند، میتوان چندین تعریف \fIstate\fP را در هر خط مشخص کرد.
.sp
پارامتر \fIstate\fP به این اشاره دارد که کدام حالت دکمه باید تنظیم شود. حالتهای دکمه به این صورت تعریف میشوند: «\fIActiveUp\fP» و «\fIActiveDown\fP» به حالتهای فشردهنشده و فشردهشده برای دکمههای پنجرههای فعال اشاره دارند؛ در حالی که حالتهای «\fIInactiveUp\fP» و «\fIInactiveDown\fP» نمایانگر دکمهها در پنجرههای غیرفعال هستند. میانبر «\fIActive\fP» نشاندهندهٔ هر دو حالت «ActiveUp» و «ActiveDown» است. میانبر «\fIInactive\fP» هر دو حالت «InactiveUp» و «InactiveDown» را مشخص میکند. نامهای حالت مشابه آنچه شرح داده شد، اما با پیشوند «Toggled»، به جای آن برای دکمههای عنوانی استفاده میشوند که در صورت بیشینهشدن (maximized)، سایهدار شدن (shaded)، چسبان بودن (sticky) یا قرار گرفتن روی لایهای خاص، به ترتیب دارای یکی از نشانههای \fIMwmDecorMax\fP، \fIMwmDecorShade\fP، \fIMwmDecorStick\fP یا \fIMwmDecorLayer\fP باشند.
.sp
.if n .RS 4
.nf
.fam C
AddToDecor Default
+ ButtonStyle 6\& \(rs
Vector 4 50x25@1 85x75@0 15x75@0 50x25@1
+ ButtonStyle 6 ToggledActiveUp\& \(rs
Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
+ ButtonStyle 6 ToggledActiveDown \(rs
Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
+ ButtonStyle 6 ToggledInactive\& \(rs
Vector 4 50x75@0 85x25@1 15x25@0 50x75@0
+ ButtonStyle 6 \- MwmDecorShade
Mouse 0 6 N WindowShade
.fam
.fi
.if n .RE
.sp
علاوه بر این، میانبرهای زیر نیز ممکن است استفاده شوند: «\fIAllNormal\fP»، «\fIAllToggled\fP»، «\fIAllActive\fP»، «\fIAllInactive\fP»، «\fIAllUp\fP»، «\fIAllDown\fP». آنها در واقع ماسکهای متفاوتی برای ۴ حالت مستقل از مجموع ۸ حالت هستند. این موارد نیز پشتیبانی میشوند: «\fIAllActiveUp\fP»، «\fIAllActiveDown\fP»، «\fIAllInactiveUp\fP»، «\fIAllInactiveDown\fP».
.sp
اگر \fIstate\fP مشخص شود، همان حالت خاص دکمه تنظیم میشود. اگر \fIstate\fP حذف شود، همهٔ حالتها تنظیم میشوند. مشخص کردن یک سبک، سبک فعلی را از بین میبرد (برای جلوگیری از این امر از \fBAddButtonStyle\fP استفاده کنید).
.sp
اگر \fIstyle\fP مشخص نشود، پرچمهای وابسته به حالت را میتوان بدون از بین بردن سبک فعلی، برای سبک اصلی دکمه تنظیم کرد. مثالها (هر خط باید مستقل در نظر گرفته شود):
.sp
.if n .RS 4
.nf
.fam C
ButtonStyle Left \-\- flat
ButtonStyle All ActiveUp (\-\- flat) Inactive (\-\- flat)
.fam
.fi
.if n .RE
.sp
خط اول تمام حالتهای دکمههای سمت چپ را روی flat تنظیم میکند، در حالی که خط دوم تنها حالتهای «ActiveUp» و «Inactive» هر دکمه را به flat تغییر میدهد (تنها پرچمها تغییر میکنند؛ سبکهای مستقل دکمهها بدون تغییر باقی میمانند).
.sp
اگر میخواهید تمام دکمهها را به مقادیر پیشفرض آنها بازنشانی کنید:
.sp
.if n .RS 4
.nf
.fam C
ButtonStyle Reset
.fam
.fi
.if n .RE
.sp
برای بازنشانی حالت دکمهٔ «ActiveUp» برای دکمهٔ ۱ به مقدار پیشفرض:
.sp
.if n .RS 4
.nf
.fam C
ButtonStyle 1 ActiveUp Default
.fam
.fi
.if n .RE
.sp
برای بازنشانی تمام حالتهای دکمهٔ ۱ به پیشفرضِ دکمهٔ شمارهٔ ۲:
.sp
.if n .RS 4
.nf
.fam C
ButtonStyle 1 Default 2
.fam
.fi
.if n .RE
.sp
برای هر دکمه، میتوان با قرار دادن \fIstyle\fP و \fIflags\fP در پرانتز، چندین تعریف \fIstate\fP را در یک خط ارائه داد. اگر فقط یک تعریف در هر خط ارائه شود، میتوان پرانتزها را حذف کرد.
.sp
پارامتر \fIflags\fP روی \fIstate\fP مشخصشده اثر میگذارد. اگر پیشوند «\*(Aq!\*(Aq» به هر \fIflag\fP اضافه شود، رفتار آن معکوس میگردد. پرچمهای موجودِ وابسته به حالت برای همهٔ سبکها در اینجا شرح داده شدهاند (مدخل \fBButtonStyle\fP به پرچمهای مستقل از حالت میپردازد).
.sp
گزینهٔ \fIRaised\fP باعث میشود یک الگوی برجسته کشیده شود.
.sp
گزینهٔ \fISunk\fP باعث میشود یک الگوی فرورفته کشیده شود.
.sp
گزینهٔ \fIFlat\fP از کشیده شدن الگوی برجستگی/فرورفتگی جلوگیری میکند.
.sp
گزینهٔ \fIUseTitleStyle\fP باعث میشود که حالت مشخص دکمه، پیش از رندر کردن سبک اختصاصی دکمه، سبک عنوان فعلی را رندر کند. پرچمهای \fIRaised\fP، \fIFlat\fP و \fISunk\fP در \fBTitleStyle\fP نادیده گرفته میشوند چرا که در این زمینه اضافی هستند.
.sp
گزینهٔ \fIUseBorderStyle\fP باعث میشود دکمه گزینههای تزئینشدهٔ \fBBorderStyle\fP را به ارث ببرد.
.sp
گزینههای \fIRaised\fP، \fISunk\fP و \fIFlat\fP مانعةالجمع هستند و تنها برای \fBButtonStyle\fP اولیه قابل تعیین میباشند. گزینههای \fIUseTitleStyle\fP و \fIUseBorderStyle\fP نیز مانعةالجمع هستند (اگرچه هر دو میتوانند غیرفعال باشند). حالت پیشفرض \fIRaised\fP است در حالی که هر دو گزینهٔ \fIUseBorderStyle\fP و \fIUseTitleStyle\fP غیرفعال رها شدهاند..sp
\fBمهم\fP
.sp
برای وضعیتهای «ActiveDown» و «InactiveDown»: هنگامی که یک دکمه فشرده میشود، برجستگی معکوس میگردد. به همین دلیل، برای به دست آوردن ظاهر برآمده (raised) در وضعیتهای «ActiveDown» یا «InactiveDown» باید خلاف برجستگی مورد نظر را مشخص کنید (یعنی \fISunk\fP برای «ActiveDown» یا «InactiveDown»). این رفتار یکپارچه است، اما ممکن است در ابتدا گیجکننده به نظر برسد. همین امر در مورد وضعیتهای «Toggled» نیز صدق میکند.
.sp
سبکهای دکمه به غیرمخرب (non\-destructive)، تا حدی مخرب (partially destructive)، یا کاملاً مخرب (fully destructive) طبقهبندی میشوند. سبکهای غیرمخرب بر تصویر تأثیری نمیگذارند. سبکهای تا حدی مخرب میتوانند بخشی یا تمام بخشهای تصویر زیرین را بپوشانند (مانند \fIPixmap\fP). سبکهای کاملاً مخرب کل تصویر زیرین را میپوشانند (مانند \fISolid\fP یا یکی از سبکهای \fIgradient\fP). بنابراین، اگر سبکها را با \fBAddButtonStyle\fP (یا \fBAddTitleStyle\fP برای نوارهای عنوان) روی هم انباشته میکنید، در ترتیببندی سبکها دقت کنید تا بازترسیم به حداقل برسد.
.sp
سبکهای موجود عبارتند از:
.sp
\fISimple\fP، \fIDefault\fP، \fISolid\fP، \fIColorset\fP، \fIVector\fP، \fI?Gradient\fP،
\fIPixmap\fP، \fIAdjustedPixmap\fP، \fIShrunkPixmap\fP، \fIStretchedPixmap\fP،
\fITiledPixmap\fP، \fIMiniIcon\fP
.sp
توضیحات این سبکها و آرگومانهای آنها در ادامه آمده است:
.sp
سبک \fISimple\fP هیچ کاری انجام نمیدهد. این سبک هیچ آرگومانی نمیپذیرد و نمونهای از یک سبک دکمهٔ غیرمخرب است.
.sp
سبک \fIDefault\fP بهطور مشروط یک آرگومان میپذیرد: عددی که شماره دکمه پیشفرض را برای بارگذاری مشخص میکند. اگر دستور سبک دادهشده \fBButtonStyle\fP یا \fBAddButtonStyle\fP باشد، این آرگومان اختیاری است (در صورت ارائه، جایگزین دکمهٔ فعلی میشود). اگر از دستوری غیر از \fBButtonStyle\fP یا \fBAddButtonStyle\fP استفاده شود، عدد باید مشخص گردد.
.sp
سبک \fISolid\fP دکمه را با یک رنگ یکدست پر میکند. رنگ حاشیهٔ برجسته تحت تأثیر قرار نمیگیرد. رنگ به صورت یک تکآرگومان مشخص میشود. این سبک کاملاً مخرب است.
.sp
سبک \fIColorset\fP \fIcs\fP [\fIalpha\fP] دکمه را با Colorset \fIcs\fP پر میکند. آرگومان اختیاری \fIalpha\fP درصدی بین 0 تا 100 است. این آرگومان باعث میشود fvwm پسزمینه مجموعه رنگ را با استفاده از این درصد روی دکمه ادغام کند. اگر درصد 0 باشد، پسزمینه Colorset پنهان میشود و اگر 100 باشد، پسزمینه مجموعه رنگ بهطور کامل اعمال میگردد. مقدار پیشفرض 100 است. بنابراین، میزان مخرب بودن به آرگومان \fIalpha\fP بستگی دارد.
.sp
سبک \fIVector\fP \fInum\fP
\fIX\fP\fB[\fP\fIoffset\fP\fBp]x\fP\fIY\fP\fB[\fP\fIoffset\fP\fBp]@C .\|.\|.\fP
یک الگوی خطی ترسیم میکند. از آنجا که این یک سبک دکمه استاندارد است، کلیدواژهٔ \fIVector\fP اختیاری است؛ \fInum\fP تعداد مشخصات نقطه به صورت
\fIX\fP\fB[\fP\fIoffset\fP\fBp]x\fP\fIY\fP\fB[\fP\fIoffset\fP\fBp]@C .\|.\|.\fP است. \fIX\fP
و \fIY\fP مختصات نقطه درون دکمه هستند که به درصد (از 0 تا 100) داده میشوند. یک \fIoffset\fP مطلق اختیاری بر حسب پیکسل میتواند به صورت "+p" برای انحراف مثبت یا "\-p" برای انحراف منفی مشخص شود.
.sp
\fIC\fP رنگ خط را مشخص میکند (0 \- رنگ سایه، 1 \- رنگ برجسته، 2 \- رنگ پسزمینه، 3 \- رنگ پیشزمینه، 4 \- فقط انتقال نقطه، بدون رسم). رنگ نقطهٔ اول استفاده نمیشود. شما میتوانید تا 10000 نقطه را در یک الگوی خطی به کار ببرید. این سبک تا حدی مخرب است.
.sp
مشخص کردن این الگو کمی دشوار است:
.sp
.if n .RS 4
.nf
.fam C
ButtonStyle 2 Vector 4 50x30@1 70x70@0 30x70@0 50x30@1
.fam
.fi
.if n .RE
.sp
سپس تزیین دکمهٔ 2 از یک الگوی 4\-نقطهای استفاده میکند که شامل خطی از (x=50,y=30) به (70,70) با رنگ سایه (@0)، سپس به (30,70) با رنگ سایه، و در نهایت به (50,30) با رنگ برجسته (@1) است. آیا خیلی گیجکننده است؟ برای مشاهدهٔ چند مثال همراه با تصویر صفحه به صفحات وب fvwm مراجعه کنید.
.sp
مثالی پیچیدهتر از \fIVector\fP:
.sp
.if n .RS 4
.nf
.fam C
ButtonStyle 8 Vector 10 45x65@2 45x75@3 \(rs
20x75@3 20x50@3 35x50@3 35x65@1 35x25@1 \(rs
75x25@1 75x65@0 35x65@0
ButtonStyle 0 Vector 10 45x65@2 45x75@0 \(rs
20x75@0 20x50@1 45x50@1 45x65@0 75x65@3 \(rs
75x25@3 35x25@3 35x47@3
.fam
.fi
.if n .RE
.sp
سبکهای \fIGradient\fP بیانگر طیفهای رنگی هستند. علامت سؤال را با هر یک از انواع گرادیان تعریفشده پر کنید. لطفاً برای شرح نحو گرادیان به بخش \fBColor Gradients\fP مراجعه کنید. سبکهای گرادیان کاملاً مخرب هستند.
.sp
سبک \fIPixmap\fP یک پیکسمپ را نمایش میدهد. پیکسمپ باید به عنوان یک آرگومان مشخص شود. برای نمونه، دستورات زیر به دکمهٔ شماره 2 همان پیکسمپ را برای هر 4 وضعیت (2 فعال و 2 غیرفعال) اختصاص میدهند، و به دکمهٔ شماره 4 پیکسمپهایی کاملاً متفاوت اختصاص میدهند.
.sp
.if n .RS 4
.nf
.fam C
ButtonStyle 2 Pixmap my_pixmap.xpm
ButtonStyle 4 \(rs
ActiveUp (Pixmap activeup.xpm) \(rs
ActiveDown (Pixmap activedown.xpm) \(rs
Inactive (Pixmap inactiveup.xpm)
ButtonStyle 4 \(rs
InactiveDown Pixmap inactivedown.xpm
.fam
.fi
.if n .RE
.sp
مشخصهٔ پیکسمپ میتواند به صورت یک مسیر مطلق یا نسبی ارائه شود (به \fBImagePath\fP مراجعه کنید). اگر پیکسمپ پیدا نشود، سبک دکمه به \fISimple\fP بازمیگردد. پرچمهای مختص سبک \fIPixmap\fP عبارتند از \fILeft\fP، \fIRight\fP، \fITop\fP، و \fIBottom\fP. از این پرچمها میتوان برای تراز کردن پیکسمپ استفاده کرد (پیشفرض برای هر دو جهت وسطچین است). شفافیت پیکسمپ برای رنگ «None» به کار میرود. این سبک تا حدی مخرب است.
.sp
سبک \fIAdjustedPixmap\fP مشابه سبک \fIPixmap\fP است، اما اندازهٔ تصویر تغییر میکند تا دقیقاً با اندازهٔ دکمه همخوانی داشته باشد.
.sp
سبک \fIShrunkPixmap\fP مشابه سبک \fIPixmap\fP است، اما اگر تصویر بزرگتر از دکمه باشد، اندازهٔ آن کاهش مییابد تا درون دکمه جای گیرد.
.sp
سبک \fIStretchedPixmap\fP مشابه سبک \fIPixmap\fP است، اما اگر تصویر کوچکتر از دکمه باشد، اندازهٔ آن کشیده میشود تا تمام دکمه را بپوشاند.
.sp
سبک \fITiledPixmap\fP یک پیکسمپ را میپذیرد تا به صورت کاشیکاریشده (تکرارشونده) در پسزمینهٔ دکمه قرار گیرد. یک پیکسمپ به عنوان آرگومان مشخص میشود. شفافیت پیکسمپ به کار نمیرود. این سبک کاملاً مخرب است.
.sp
سبک \fIMiniIcon\fP شمایل مینیاتوری پنجره را درون دکمه ترسیم میکند که با گزینهٔ \fIMiniIcon\fP از دستور \fBStyle\fP مشخص میشود. این سبک دکمه هیچ آرگومانی نمیپذیرد. مثال:
.sp
.if n .RS 4
.nf
.fam C
Style *\& MiniIcon mini\-bx2.xpm
Style xterm MiniIcon mini\-term.xpm
Style Emacs MiniIcon mini\-doc.xpm
ButtonStyle 1 MiniIcon
.fam
.fi
.if n .RE
.RE
.sp
\fBButtonStyle\fP \fIbutton\fP \- [!]\fIflag\fP .\|.\|.
.RS 4
پرچمهای مستقل از وضعیت را برای \fIbutton\fP مشخصشده تنظیم میکند. پرچمهای مستقل از وضعیت بر رفتار دکمه اثر میگذارند. هر \fIflag\fP با یک فاصله جدا میشود. اگر یک \*(Aq!\*(Aq پیشوند پرچم قرار گیرد، رفتار آن معکوس (نفی) میشود. پرچم ویژهٔ \fIClear\fP هرگونه پرچم موجود را پاک میکند.
.sp
پرچمهای زیر معمولاً برای این به کار میروند که به fvwm بگویند کدام دکمهها باید تحت تأثیر اشارههای تابعی mwm قرار گیرند (گزینهٔ \fIMwmFunctions\fP از دستور \fBStyle\fP را ببینید). این کار بهطور خودکار انجام نمیشود، زیرا به عنوان مثال ممکن است دکمههایی مقید به توابع پیچیده داشته باشید.
.sp
\fIMwmDecorMenu\fP باید به دکمههای نوار عنوانی که یک منو را نمایش میدهند اختصاص یابد. تخصیص پیشفرض، چپترین دکمه است. هنگامی که پنجرهای با گزینهٔ \fBStyle\fP از نوع \fIMwmFunctions\fP درخواست کند که این دکمه نمایش داده نشود، پنهان میگردد.
.sp
\fIMwmDecorMin\fP باید به دکمههای نوار عنوانی که پنجره را کمینه یا آیکون میکنند اختصاص یابد. تخصیص پیشفرض، دومین دکمه از سمت راست است. هنگامی که پنجرهای با گزینهٔ \fBStyle\fP از نوع \fIMwmFunctions\fP درخواست کند که این دکمه نمایش داده نشود، پنهان میگردد..sp
\fIMwmDecorMax\fP باید به دکمههای نوار عنوان که پنجره را بیشینه میکنند اختصاص یابد. تخصیص پیشفرض، راستترین دکمه است. هنگامی که پنجرهای با گزینهٔ \fBStyle\fP مربوط به \fIMwmFunctions\fP درخواست عدم نمایش این دکمه را داشته باشد، پنهان میشود. هنگامی که پنجره بیشینه است، الگوی برداری روی دکمه فرورفته به نظر میرسد.
.sp
\fIMwmDecorShade\fP باید به دکمههای نوار عنوان که پنجره را کرکرهای میکنند (دستور \fBWindowShade\fP را ببینید) اختصاص یابد. هنگامی که پنجره کرکرهای شده است، الگوی برداری روی دکمه فرورفته به نظر میرسد.
.sp
\fIMwmDecorStick\fP باید به دکمههای نوار عنوان که پنجره را چسبان میکنند اختصاص یابد. هنگامی که پنجره چسبان است، الگوی برداری روی دکمه فرورفته به نظر میرسد.
.sp
پرچم \fIMwmDecorLayer\fP \fIlayer\fP باید به دکمههای نوار عنوان که پنجره را در لایهٔ شمارهگذاریشدهٔ \fIlayer\fP قرار میدهند اختصاص داده شود. وقتی پنجره در آن لایهٔ خاص قرار دارد، الگوی برداری روی دکمه فرورفته به نظر میرسد.
.RE
.sp
\fBChangeDecor\fP \fIdecor\fP
.RS 4
این دستور منسوخ شده است و در آینده حذف خواهد شد. برنامههایی برای جایگزینی آن با یک راهحل انعطافپذیرتر در fvwm\-3.0 وجود دارد.
.sp
تزئینات (decor) یک پنجره را به \fIdecor\fP تغییر میدهد. \fIdecor\fP یا "Default" است یا نام تزئیناتی که با \fBAddToDecor\fP تعریف شده است. اگر \fIdecor\fP نامعتبر باشد، هیچ اتفاقی رخ نمیدهد. اگر از درون یک پنجره یا حاشیهٔ آن فراخوانی شود، آن پنجره تحت تأثیر قرار میگیرد. اگر از پنجرهٔ ریشه (root window) فراخوانی شود، کاربر میتواند پنجرهٔ هدف را انتخاب کند. \fBChangeDecor\fP تنها بر ویژگیهایی تأثیر میگذارد که با استفاده از دستور \fBAddToDecor\fP قابل تنظیم باشند.
.sp
.if n .RS 4
.nf
.fam C
ChangeDecor CustomDecor1
.fam
.fi
.if n .RE
.RE
.sp
\fBDestroyDecor\fP [recreate] \fIdecor\fP
.RS 4
این دستور منسوخ شده است و در آینده حذف خواهد شد. برنامههایی برای جایگزینی آن با یک راهحل انعطافپذیرتر در fvwm\-3.0 وجود دارد.
.sp
تزئینات \fIdecor\fP تعریفشده با \fBAddToDecor\fP را حذف میکند، بهطوری که ارجاعات بعدی به آن دیگر معتبر نخواهند بود. پنجرههایی که از این \fIdecor\fP استفاده میکنند به تزئینات "Default" بازمیگردند. پارامتر اختیاری \fIrecreate\fP به fvwm اعلام میکند که تزئینات را بهطور کامل دور نیندازد بلکه فقط محتویات آن را دور بریزد. اگر تزئینات بعداً دوباره ایجاد شود، پنجرهها تا زمانی که سبک \fIUseDecor\fP دوباره اعمال نشود از آن استفاده نخواهند کرد، مگر اینکه تزئینات با گزینهٔ \fIrecreate\fP تخریب شده باشد. تزئیناتی با نام "Default" را نمیتوان تخریب کرد.
.sp
.if n .RS 4
.nf
.fam C
DestroyDecor CustomDecor1
.fam
.fi
.if n .RE
.RE
.sp
\fBTitleStyle\fP [\fIjustification\fP] [Height [\fInum\fP]] [MinHeight [\fInum\fP]]
.RS 4
ویژگیهای نوار عنوان را تنظیم میکند. ترازها میتوانند \fICentered\fP (وسطچین)، \fIRightJustified\fP (راستچین) یا \fILeftJustified\fP (چپچین) باشند. \fIHeight\fP ارتفاع نوار عنوان را برحسب پیکسل تنظیم میکند. \fIMinHeight\fP حداقل ارتفاع نوار عنوان را برحسب پیکسل مشخص میکند. مقادیر پیشفرض عبارتند از \fICentered\fP، ارتفاع قلم پنجره و بدون حداقل ارتفاع. برای بازنشانی ارتفاع قلم به مقدار پیشفرض، آرگومان \fInum\fP پس از کلیدواژهٔ \fIHeight\fP را حذف کنید. ارتفاع \fIMinHeight\fP با \fIHeight\fP یا در صورت ارائه بدون آرگومان، بازنشانی میشود.
مثال:
.sp
.if n .RS 4
.nf
.fam C
TitleStyle LeftJustified Height 24
.fam
.fi
.if n .RE
.RE
.sp
\fBTitleStyle\fP [\fIstate\fP] [\fIstyle\fP] [\-\- [!]\fIflag\fP .\|.\|.]
.RS 4
سبک نوار عنوان را تنظیم میکند. همچنین \fBAddTitleStyle\fP و \fBButtonStyle\fP را ببینید. \fIstate\fP میتواند یکی از موارد "\fIActiveUp\fP"، "\fIActiveDown\fP"، "\fIInactiveUp\fP" یا "\fIInactiveDown\fP" باشد. میانبرهایی مانند "\fIActive\fP" و "\fIInactive\fP" مجاز هستند. حالتهایی با پیشوند "Toggled" نیز مجاز میباشند؛ خود عنوان از حالتهای "Toggled" استفاده نمیکند، اما این حالتها برای دکمههایی با \fBButtonStyle\fP \fIUseTitleStyle\fP به کار میروند. اگر \fIstate\fP حذف شود، در این صورت \fIstyle\fP به تمامی حالتها اضافه میشود. اگر در دو طرف \fIstyle\fP و \fIflags\fP پرانتز قرار گیرد، میتوان چندین تعریف حالت را در هر خط ارائه داد. \fIstyle\fP میتواند حذف شود تا پرچمها بدون تخریب سبک فعلی تنظیم شوند.
.sp
اگر یک \*(Aq!\*(Aq به هر \fIflag\fP پیشوند شود، رفتار آن نقیض میشود. پرچمهای معتبر برای هر حالت شامل \fIRaised\fP، \fIFlat\fP و \fISunk\fP هستند (این پرچمها مانعةالجمع میباشند). مقدار پیشفرض \fIRaised\fP است. یادداشت موجود در \fBButtonStyle\fP را در رابطه با حالت "\fIActiveDown\fP" ببینید. مثالها:
.sp
.if n .RS 4
.nf
.fam C
TitleStyle ActiveUp HGradient 16 navy black
TitleStyle \(rs
ActiveDown (Solid red \-\- flat) \(rs
Inactive (TiledPixmap wood.xpm)
TitleStyle \(rs
ActiveUp (\-\- Flat) \(rs
ActiveDown (\-\- Raised) \(rs
InactiveUp (\-\- Flat) \(rs
InactiveDown (\-\- Sunk)
.fam
.fi
.if n .RE
.sp
این دستور، حالت "ActiveUp" را روی یک گرادیان افقی، حالت "ActiveDown" را روی قرمز یکدست، و حالتهای "Inactive" را روی یک پیکسمپ کاشیکاریشدهٔ چوب تنظیم میکند. در نهایت، "ActiveUp" و "InactiveUp" طوری تنظیم میشوند که مسطح به نظر برسند، در حالی که "ActiveDown" به صورت فرورفته تنظیم میشود (پرچم \fIRaised\fP برای حالت "ActiveDown" به دلیل معکوسسازی برجستگی باعث فرورفته به نظر رسیدن آن میشود)، و "InactiveDown" به گونهای تنظیم شده که برآمده به نظر برسد. مثالی که پرچمها را برای همهٔ حالتها تنظیم میکند:
.sp
.if n .RS 4
.nf
.fam C
TitleStyle \-\- flat
.fam
.fi
.if n .RE
.sp
برای ظاهری تخت و یکدست:
.sp
.if n .RS 4
.nf
.fam C
TitleStyle \-\- flat
ButtonStyle All Active (\-\- flat) Inactive (\-\- flat)
.fam
.fi
.if n .RE
.sp
دستور \fBTitleStyle\fP تمامی سبکها و آرگومانهای \fBButtonStyle\fP را میپذیرد:
.sp
\fISimple\fP، \fIDefault\fP، \fISolid\fP، \fIColorset\fP، \fIVector\fP، \fI?Gradient\fP،
\fIPixmap\fP، \fIAdjustedPixmap\fP، \fIShrunkPixmap\fP، \fIStretchedPixmap\fP،
\fITiledPixmap\fP، \fIMiniIcon\fP.
.sp
برای شرح تمام این سبکها و آرگومانهای آنها، به دستور \fBButtonStyle\fP مراجعه کنید.
.sp
علاوه بر این سبکها، \fBTitleStyle\fP گزینهٔ قدرتمند \fIMultiPixmap\fP را نیز میپذیرد. این گزینه به شما امکان میدهد پیکسمپها، مجموعهرنگها (colorset) یا رنگهای متفاوتی را برای بخشهای مختلف نوار عنوان مشخص کنید. برخی از آنها برای تناسب با یک فضای خاص کاشیکاری شده یا کشیده میشوند؛ برخی دیگر تصاویر گسستهٔ «گذار» (transition) هستند. بخشهای (\fIsections\fP) قابل تعریف عبارتند از:
.sp
\fIMain\fP
.RS 4
کل نوار عنوان
.RE
.sp
\fILeftMain\fP
.RS 4
سمت چپ متن عنوان
.RE
.sp
\fIRightMain\fP
.RS 4
سمت راست متن عنوان
.RE
.sp
\fIUnderText\fP
.RS 4
زیر متن عنوان
.RE.sp
\fILeftOfText\fP
.RS 4
دقیقاً در سمت چپ متن عنوان
.RE
.sp
\fIRightOfText\fP
.RS 4
دقیقاً در سمت راست متن عنوان
.RE
.sp
\fILeftEnd\fP
.RS 4
در منتهیالیه سمت چپ نوار عنوان (دقیقاً بعد از دکمههای سمت چپ در صورت وجود)
.RE
.sp
\fIRightEnd\fP
.RS 4
در منتهیالیه سمت راست نوار عنوان (دقیقاً قبل از دکمههای سمت راست در صورت وجود)
.RE
.sp
\fIButtons\fP
.RS 4
زیر دکمهها در صورت استفاده از \fIUseTitleStyle\fP
.RE
.sp
\fILeftButtons\fP
.RS 4
زیر دکمههای سمت چپ در صورت استفاده از \fIUseTitleStyle\fP
.RE
.sp
\fIRightButtons\fP
.RS 4
زیر دکمههای سمت راست در صورت استفاده از \fIUseTitleStyle\fP
.RE
.sp
هیچیک از این موارد اجباری نیستند مگر \fIMain\fP (یا اگر \fIMain\fP
را تعریف نکنید، باید هر دو مورد \fILeftMain\fP و \fIRightMain\fP را تعریف کنید). اگر هیچ
پیکسمپی برای \fIButtons\fP تعریف نشده باشد و \fIUseTitleStyle\fP برای یک یا چند دکمه
مشخص شده باشد، بر حسب مورد از \fIMain\fP، \fILeftMain\fP یا \fIRightMain\fP
استفاده میشود.
.sp
نحو این نوع سبک به این صورت است:
.sp
.if n .RS 4
.nf
.fam C
MultiPixmap section style arg, ...
.fam
.fi
.if n .RE
.sp
و به همین ترتیب برای هر آنچه که مایلید تعریف کنید ادامه مییابد. مقدار \fIstyle\fP میتواند یکی از
\fITiledPixmap\fP، \fIAdjustedPixmap\fP، \fIColorset\fP یا \fISolid\fP باشد. برای
شرح این سبکها دستور \fBButtonStyle\fP را ببینید. در صورت وجود بخش گذار (transition)،
شامل \fILeftEnd\fP، \fILeftOfText\fP، \fIRightOfText\fP یا \fIRightEnd\fP،
گزینه \fIAdjustedPixmap\fP اندازه پیکسمپ را فقط در جهت محور «y» تغییر میدهد.
برای سبکهای \fIColorset\fP و \fISolid\fP، عرضی معادل نصف ارتفاع نوار عنوان برای
بخشهای گذار در نظر گرفته میشود.
.sp
یک مثال:
.sp
.if n .RS 4
.nf
.fam C
MultiPixmap Main AdjustedPixmap foo.xpm, \(rs
UnderText TiledPixmap bar.xpm, \(rs
Buttons Colorset 2
.fam
.fi
.if n .RE
.sp
توجه داشته باشید که نحو قدیمی همچنان پشتیبانی میشود: اگر سبک حذف شود،
\fITiledPixmap\fP در نظر گرفته میشود و افزودن «(stretched)» بین بخش
و نام فایل، بیانگر \fIAdjustedPixmap\fP است.
.RE
.sp
\fBUpdateDecor\fP [\fIdecor\fP]
.RS 4
این دستور منسوخ شده است و در آینده حذف خواهد شد. برنامههایی
برای جایگزینی آن با یک راهحل انعطافپذیرتر در fvwm\-3.0 وجود دارد.
.sp
این دستور عمدتاً برای سازگاری با نسخههای پیشین حفظ شده است. از آنجا که تمام
عناصر یک decor بلافاصله پس از تغییر یافتن بهروزرسانی میشوند، این دستور
عملاً کاربردی ندارد.
.sp
تزیینات پنجره را بهروزرسانی میکند. آرگومان اختیاری \fIdecor\fP دکوراسیونی
که باید بهروزرسانی شود را مشخص میکند. در صورت ارائه، تنها پنجرههایی که به آن
\fIdecor\fP خاص اختصاص داده شدهاند بهروزرسانی میشوند. این دستور برای مثال پس از یک
\fBButtonStyle\fP، \fBTitleStyle\fP یا \fBBorderStyle\fP (احتمالاً در ترکیب با
\fBAddToDecor\fP) مفید است. مشخص کردن یک decor نامعتبر باعث بهروزرسانی تمام پنجرهها خواهد شد.
.RE.SS "کنترل میزکار مجازی (Controlling the Virtual Desktop)"
.sp
\fBDesktopName\fP \fIdesk\fP \fIname\fP
.RS 4
نام میزکار شمارهٔ \fIdesk\fP را به \fIname\fP تعیین میکند. این نام
در دستور \fBWindowList\fP و در \fBFvwmPager\fP استفاده میشود که در آنجا
بر گزینهٔ پیکربندی \fILabel\fP اولویت دارد. علاوه بر این، اگر نامهای متوالی
با شروع از میزکار ۰ تعریف شوند، این نامها میتوانند توسط هر برنامهٔ سازگار با
EWMH (مانند یک صفحهبند/پیجر) استفاده شوند.
.RE
.sp
\fBDesktopConfiguration\fP global | per\-monitor | shared
.RS 4
این دستور رفتار چگونگی مدیریت میزکارها توسط FVWM را کنترل میکند. بهطور
پیشفرض، برای تمام صفحهنمایشهای شناساییشده توسط FVWM از طریق پشتیبانی
RandR، گزینهٔ global بدین معناست که تمام پنجرههای روی یک میزکار در میان
مانیتورها به عنوان یک کل واحد در نظر گرفته میشوند \(em بنابراین، زمانی که
تغییری در میزکار/صفحه رخ میدهد، همان تغییر در تمام مانیتورها اعمال میشود.
.sp
در حالت per\-monitor، هر مانیتور RandR نسخهٔ جداگانهای از میزکارها دارد،
و بنابراین هنگام جابهجایی بین میزکارها/صفحات، مستقل از یکدیگر عمل میکنند.
.sp
هنگامی که \fIshared\fP تنظیم شود، میزکارها میان تمام مانیتورها به اشتراک گذاشته
میشوند. بنابراین برای مثال، با تعداد میزکارهای زیر که برای دو مانیتور تعریف شدهاند
(\fI[]\fP نمایانگر monitor1 و \fI<>\fP نمایانگر monitor2 است):
.sp
.if n .RS 4
.nf
.fam C
[0]\& 1\& 2\& <3>\& 4
.fam
.fi
.if n .RE
.sp
جابهجایی بین میزکارها همچنان مانیتوری را که میزکار روی آن درخواست شده رعایت
میکند. اگر \fImonitor1\fP بخواهد به میزکار ۳ برود، آنگاه آن میزکار با
\fImonitor2\fP معاوضه میشود، بهطوری که وضعیت زیر میزکار فعال را روی هر دو
مانیتور نشان میدهد:
.sp
.if n .RS 4
.nf
.fam C
<0>\& 1\& 2\& [3]\& 4
.fam
.fi
.if n .RE
.sp
این مفهوم شبیه به نحوهٔ مدیریت میزکارها در spectrwm یا xmonad است.
.sp
\fBنکته:\fP هر کدام از این حالتهای \fBDesktopConfiguration\fP را میتوان در حین اجرا (on\-the\-fly) تغییر داد.
.RE
.sp
\fBDesktopSize\fP \fIHorizontal\fPx\fIVertical\fP
.RS 4
اندازهٔ میزکار مجازی را در واحدهایی از اندازهٔ فیزیکی صفحهنمایش تعیین میکند.
.RE
.sp
\fBEdgeResistance\fP \fIdelay\fP, \fBEdgeResistance\fP \fIscrolling\fP \fImoving\fP [\fIscreen\-scrolling\fP]
.RS 4
مشخص میکند که تغییر دیدگاه (viewport) میزکار با حرکت دادن ماوس روی
لبهٔ صفحه چقدر باید سخت (دارای مقاومت) باشد. این پارامتر تعیین میکند که
نشانگر ماوس پیش از اینکه fvwm دیدگاه را جابهجا کند، چند میلیثانیه باید روی
لبهٔ صفحه بماند. این تنظیم برای افرادی در نظر گرفته شده است که از
.sp
.if n .RS 4
.nf
.fam C
EdgeScroll 100 100
.fam
.fi
.if n .RE
.sp
استفاده میکنند، اما متوجه میشوند که بهطور تصادفی صفحات را ورق میزنند در
حالی که چنین قصدی ندارند. اگر \-1 به عنوان تأخیر داده شود، پیمایش بهطور
کامل غیرفعال میشود.
.sp
شکل دوم فراخوانی با دو یا سه آرگومان منسوخ شده است و در صورت نیاز باید با
سه دستور زیر جایگزین شود:
.sp
.if n .RS 4
.nf
.fam C
EdgeResistance scrolling
Style * EdgeMoveDelay scrolling
Style * EdgeMoveResistance moving
or
Style * EdgeMoveResistance moving screen\-scrolling
.fam
.fi
.if n .RE
.sp
نرمافزار Fvwm این جایگزینی را بهطور خودکار انجام داده و یک پیام هشدار چاپ میکند.
.RE
.sp
\fBEdgeScroll\fP [\fIscreen RANDRNAME\fP] \fIhorizontal\fP[p] \fIvertical\fP[p] [wrap | wrapx | wrapy]
.RS 4
درصدی از صفحه را برای پیمایش هنگامی که مکاننما به لبهٔ صفحه برخورد میکند،
مشخص میکند.
آرگومان اختیاری \*(Aq\fIscreen RANDRNAME\fP\*(Aq مانیتور RandR مربوطهای را
مشخص میکند که این تنظیم باید روی آن اعمال شود و مانیتورهای دیگر را نادیده
میگیرد. بدون این گزینه، این مقدار بر تمام مانیتورها اعمال میشود.
یک پسوند \*(Aq\fIp\fP\*(Aq تفسیر را به پیکسل تغییر میدهد. اگر نمیخواهید هنگام
برخورد به لبهٔ صفحه هیچگونه صفحهبندی یا پیمایشی صورت گیرد، عبارت
.sp
.if n .RS 4
.nf
.fam C
EdgeScroll 0 0
.fam
.fi
.if n .RE
.sp
را در فایل \fIconfig\fP خود قرار دهید، یا شاید بهتر از آن، مقدار \fBEdgeThickness\fP را
روی صفر تنظیم کنید. به دستور \fBEdgeThickness\fP مراجعه کنید. اگر میخواهید پیمایش به
اندازهٔ کل صفحه باشد، از
.sp
.if n .RS 4
.nf
.fam C
EdgeScroll 100 100
.fam
.fi
.if n .RE
.sp
استفاده کنید. هر دو مقدار \fIhorizontal\fP و \fIvertical\fP باید اعدادی مثبت باشند.
.sp
اگر درصدهای \fIhorizontal\fP و \fIvertical\fP در ۱۰۰۰ ضرب شوند، یا یکی از کلمات
کلیدی \fIwrap\fP، \fIwrapx\fP و \fIwrapy\fP مشخص گردد، پیمایش در لبهٔ میزکار
دور میزند (wrap میشود). اگر از
.sp
.if n .RS 4
.nf
.fam C
EdgeScroll 100000 100000
.fam
.fi
.if n .RE
.sp
استفاده شود، fvwm بهصورت صفحات کامل پیمایش کرده و در لبهٔ میزکار دور میزند.
.RE
.sp
\fBEdgeThickness\fP [\fIscreen RANDRNAME\fP] 0 | 1 | 2
.RS 4
این مقدار، عرض یا ارتفاع پنجرهٔ نامرئی است که fvwm در لبههای صفحه برای قابلیت
پیمایش لبه ایجاد میکند.
.sp
گزینهٔ اختیاری \*(Aq\fIscreen RANDRNAME\fP\*(Aq مانیتور RandR مربوطهای را
مشخص میکند که این تنظیم باید روی آن اعمال شود و مانیتورهای دیگر نادیده گرفته
میشوند. بدون این گزینه، این مقدار بر تمام مانیتورها اعمال میگردد.
.sp
بهمنظور فعالسازی پیمایش صفحه با ماوس، چهار پنجره موسوم به «pan frames»
درست در لبهٔ صفحه قرار میگیرند. این روشی است که fvwm حضور ماوس در لبهٔ پنجره را
تشخیص میدهد. با توجه به شیوهٔ کارکرد این بخش، آنها باید در بالای پشته قرار گیرند
و رویدادهای ماوس را مصرف کنند؛ بنابراین، اگر با هرگونه خطایی از قبیل: «کلیکهای
ماوس در لبهٔ صفحه رفتار اشتباهی دارند» مواجه شدید، با pan frameها مشکل دارید
و (با فرض اینکه از ماوس برای ورق زدن بین صفحات استفاده نمیکنید) باید
EdgeThickness را برابر با 0 قرار دهید.
.sp
مقدار 0 پیمایش لبه با ماوس را حتی در هنگام کشیدن (drag کردن) یک پنجره بهطور
کامل غیرفعال میکند. مقدار 1 کوچکترین فریمهای pan را فراهم میآورد که به نظر
میرسد بهجز در برخی سرورها بهترین عملکرد را دارد.
.sp
مقدار 2 پیشفرض است.
.sp
فریمهای pan با اندازهٔ ۱ یا ۲ پیکسل گاهی اوقات میتوانند گیجکننده باشند؛ برای
مثال، اگر پنجرهای را روی لبهٔ صفحه بکشید بهطوریکه روی یک pan frame قرار گیرد،
کلیک روی پنجره در نزدیکی لبهٔ صفحه به عنوان کلیک روی پنجرهٔ ریشه (root window)
در نظر گرفته میشود.
.RE
.sp
\fBEwmhBaseStruts\fP \fIscreen RANDRNAME\fP \fIleft\fP \fIright\fP \fItop\fP \fIbottom\fP
.RS 4
که در آن left، right، top و bottom اعداد صحیح مثبت یا صفر هستند که نوارهایی را در
لبهٔ صفحه تعریف میکنند. اگر \fIscreen\fP داده شود و به دنبال آن RANDRNAME یک
نمایشگر مشخص بیاید، آنگاه EwmhBaseStruts تنها برای همان RANDRNAME تعریف
میشود. \fIleft\fP نواری را در سمت چپ صفحه با عرض \fIleft\fP تعریف میکند،
\fIright\fP نواری در سمت راست صفحه با عرض \fIright\fP، \fItop\fP نواری در بالای
صفحه با ارتفاع \fItop\fP و \fIbottom\fP نواری در پایین صفحه با ارتفاع \fIbottom\fP
را تعریف میکند. واحد آن پیکسل و مقدار پیشفرض 0 0 0 0 است. این نواحی، فضای
رزروشدهٔ دیگری را علاوه بر فضای رزروشده توسط برخی برنامههای سازگار با ewmh تعریف
میکنند. این فضا برای محاسبهٔ ناحیهٔ کاری (Working Area) استفاده میشود. برای
تعریف ناحیهٔ کاری به بخش \fBExtended Window Manager Hints\fP مراجعه کنید.
.RE.sp
\fBEwmhNumberOfDesktops\fP \fInum\fP [\fImax\fP]
.RS 4
این دستور فقط برای یک پیجر یا نوار وظیفه (taskbar) سازگار با ewmh (مانند kpager یا نوار وظیفه kicker) کاربرد دارد و برای ماژولهای fvwm (\fBFvwmPager\fP یا \fBFvwmIconMan\fP) نیست. این دستور باعث میشود که یک برنامه سازگار حداقل \fInum\fP میزکار را در نظر بگیرد (میزکار 0 تا میزکار \fInum\fP\-1). آرگومان اختیاری \fImax\fP باعث میشود که برنامه سازگار هرگز بیش از \fImax\fP میزکار را در نظر نگیرد. اگر \fImax\fP برابر 0 باشد (پیشفرض) هیچ محدودیتی وجود ندارد. تعداد واقعی میزکارها به صورت پویا تعیین میشود. این تعداد حداقل \fInum\fP است، اما در صورتی که پنجرهای در میزکار d\-1 وجود داشته باشد (یا اگر میزکار فعلی میزکار d\-1 باشد) و d کمتر یا مساوی \fImax\fP بوده یا \fImax\fP تهی باشد، میتواند d باشد. علاوه بر این، یک پیجر سازگار میتواند خود درخواست تغییر \fInum\fP را بدهد. این درخواست تنها زمانی توسط fvwm پذیرفته میشود که این عدد کمتر یا مساوی \fImax\fP بوده یا \fImax\fP تهی باشد. توجه داشته باشید که میزکارهای منفی توسط مشخصات ewmh پشتیبانی نمیشوند. مقدار پیشفرض 4 0 است.
.RE
.sp
\fBGotoDesk\fP [screen \fIRANDRNAME\fP] [prev | \fIarg1\fP [\fIarg2\fP] [\fImin\fP \fImax\fP]]
.RS 4
درگاه دید (viewport) فعلی را به یک میزکار دیگر (فضای کاری، اتاق) تغییر میدهد. مانیتور فعلی در \fIDesktopConfiguration\fP از نوع \fIper\-monitor\fP و \fIshared\fP استفاده میشود، مگر اینکه عبارت صریح \fIscreen\fP به همراه یک نام معتبر مانیتور RandR درج شده باشد.
.sp
این دستور ۱، ۲، ۳ یا ۴ آرگومان میپذیرد. یک آرگومان منفرد به عنوان شماره میزکار نسبی تفسیر میشود. دو آرگومان به عنوان شماره میزکار نسبی و مطلق فهمیده میشوند. سه آرگومان یک میزکار نسبی و حداقل و حداکثر محدوده مجاز را مشخص میکنند. چهار آرگومان مقادیر نسبی، مطلق، حداقل و حداکثر را تعیین میکنند. اگر عبارت صریح \fIprev\fP به عنوان تنها آرگومان داده شود، آخرین شماره میزکار بازدیدشده استفاده میشود.
.sp
اگر \fIarg1\fP غیرصفر باشد، شماره میزکار بعدی برابر با شماره میزکار فعلی به اضافه \fIarg1\fP خواهد بود.
.sp
اگر \fIarg1\fP صفر باشد، شماره میزکار جدید \fIarg2\fP خواهد بود. (اگر \fIarg2\fP وجود نداشته باشد، دستور هیچ اثری ندارد.)
.sp
اگر \fImin\fP و \fImax\fP داده شوند، شماره میزکار جدید کوچکتر از \fImin\fP و بزرگتر از \fImax\fP نخواهد بود. مقادیر خارج از این محدوده بریده میشوند (اگر شماره میزکار مطلق داده باشید) یا چرخش میکنند (اگر شماره میزکار نسبی داده باشید).
.sp
نحو این دستور مشابه \fBMoveToDesk\fP است که یک پنجره را به میزکاری دیگر منتقل میکند.
.sp
تعداد میزکارهای فعال به صورت پویا تعیین میشود. فقط میزکارهایی که شامل پنجره هستند یا در حال حاضر نمایش داده میشوند فعال هستند. شماره میزکارها باید بین 0 و 2147483647 باشد (آیا این کافی است؟). شمارههای میزکار منفی توسط مشخصات EWMH پشتیبانی نمیشوند و دیگر در fvwm پشتیبانی نمیشوند.
.RE
.sp
\fBGotoDeskAndPage\fP screen | prev | \fIdesk\fP \fIxpage\fP \fIypage\fP
.RS 4
درگاه دید فعلی را به میزکار و صفحهای دیگر منتقل میکند، مشابه با دستورات \fBGotoDesk\fP و \fBGotoPage\fP. میزکار جدید \fIdesk\fP و صفحه جدید (\fIxpage\fP,\fIypage\fP) است.
.RE
.sp
\fBGotoPage\fP screen | prev | [\fIoptions\fP] \fIx\fP[p] \fIy\fP[p]
.RS 4
درگاه دید میزکار را به صفحه (x,y) منتقل میکند. صفحه بالا سمت چپ (0,0) و بالا سمت راست (M,0) است، که در آن M یک واحد کمتر از تعداد صفحات افقی فعلی مشخصشده در دستور \fBDesktopSize\fP است. صفحه پایین سمت چپ (0,N) و صفحه پایین سمت راست (M,N) است، که در آن N اندازه عمودی میزکار مشخصشده در دستور \fBDesktopSize\fP است. برای جابهجایی به صفحهای به صورت نسبی نسبت به صفحه فعلی، یک \*(Aq\fIp\fP\*(Aq به انتهای یکی از آرگومانهای عددی یا هر دوی آنها اضافه کنید.
.sp
گزینههای ممکن \fIwrapx\fP و \fIwrapy\fP هستند تا هنگام حرکت درگاه دید به فراتر از مرز میزکار، چرخش روی مختصات x یا y انجام شود.
.sp
نام صفحه نمایش RandR.
.sp
برای رفتن به آخرین صفحه بازدیدشده، از \fIprev\fP به عنوان آرگومان اول استفاده کنید. تابع \fBGotoPage\fP نباید در منوهای بالاپرنده (pop\-up) استفاده شود.
.sp
مثالها:
.sp
.if n .RS 4
.nf
.fam C
# رفتن به صفحه (2,3)
GotoPage 2 3
# رفتن به پایینترین و راستترین صفحه
GotoPage \-1 \-1
# رفتن به آخرین صفحه بازدیدشده
GotoPage prev
# رفتن به اندازه دو صفحه به سمت راست و یک صفحه به سمت بالا
GotoPage +2p \-1p
.fam
.fi
.if n .RE
.RE
.sp
\fBScroll\fP [screen RANDRNAME] [\fIhorizonal\fP[p] \fIvertical\fP[p] | reverse]
.RS 4
درگاه دید میزکار مجازی را به اندازه \fIhorizontal\fP صفحه در جهت x و \fIvertical\fP صفحه در جهت y پیمایش میکند یا پیمایش تعاملی درگاه دید را آغاز مینماید. هر یک از مقادیر یا هر دوی آنها میتوانند منفی باشند. هر دو مقدار \fIhorizontal\fP و \fIvertical\fP به صورت درصد صفحات بیان میشوند، بنابراین
.sp
.if n .RS 4
.nf
.fam C
Scroll 100 100
.fam
.fi
.if n .RE
.sp
به معنای یک صفحه کامل پیمایش به سمت پایین و راست است.
.sp
.if n .RS 4
.nf
.fam C
Scroll 50 25
.fam
.fi
.if n .RE
.sp
به معنای پیمایش به اندازه نصف صفحه به سمت راست و یک چهارم صفحه به سمت پایین است. تابع \fBScroll\fP نباید از منوهای بالاپرنده فراخوانی شود. به طور معمول، پیمایش در لبه میزکار متوقف میشود.
.sp
اگر درصدهای \fIhorizontal\fP و \fIvertical\fP برابر با 100 یا بیشتر باشند و در 1000 ضرب شوند، پیمایش در لبه میزکار چرخش (wrap around) میکند. اگر
.sp
.if n .RS 4
.nf
.fam C
Scroll 100000 0
.fam
.fi
.if n .RE
.sp
مکرراً اجرا شود، fvwm با هر بار اجرا به صفحه بعدی میزکار رفته و در لبه میزکار دور میزند، به طوری که همه صفحات به نوبت پیمایش میشوند.
.sp
اگر حرف \*(Aq\fIp\fP\*(Aq به هر یک از مختصاتها (\fIhorizontal\fP و/یا \fIvertical\fP) الصاق شود، مقدار پیمایش بر حسب پیکسل محاسبه خواهد شد.
.sp
بدون آرگومان یا در صورتی که گزینه \fIreverse\fP داده شود، پیمایش تعاملی انجام میپذیرد. با حرکت ماوس، درگاه دید پیمایش میشود. با گزینه \fIreverse\fP، پیمایش در جهت مخالف حرکت ماوس انجام میشود و بدون آن، در همان جهت ماوس پیمایش صورت میگیرد.
.sp
اتصال (binding) زیر:
.sp
.if n .RS 4
.nf
.fam C
Mouse 1 A CM Scroll reverse
.fam
.fi
.if n .RE
.sp
در صورت فشرده بودن کلیدهای Control و Meta، تأثیر گرفتن و کشیدن درگاه دید را با دکمه ۱ ایجاد میکند.
.sp
اگر \fIscreen\fP داده شود و به دنبال آن RANDRNAME یک نمایشگر مشخص بیاید، صفحه نمایش تعیینشده پیمایش میشود. این مورد تنها زمانی کاربرد دارد که از \fIDesktopConfiguration\fP حالت per\-monitor یا shared استفاده شود و بخواهید مانیتوری غیر از مانیتور فعلی را پیمایش کنید. پیمایش تعاملی همواره مانیتور فعلی را پیمایش میکند.
.RE.SS "توابع کاربر و دستورات شل (User Functions and Shell Commands)"
.sp
\fBAddToFunc\fP [\fIname\fP [I | J | M | C | H | D \fIaction\fP]]
.RS 4
تعریف یک تابع را آغاز میکند یا به آن میافزاید. در اینجا یک مثال آورده شده است:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc Move\-or\-Raise I Raise
+ M Move
+ D Lower
.fam
.fi
.if n .RE
.sp
نام تابع "Move\-or\-Raise" است، و میتواند از طریق یک منو، یا انتساب ماوس یا انتساب کلید فراخوانی شود:
.sp
.if n .RS 4
.nf
.fam C
Mouse 1 TS A Move\-or\-Raise
.fam
.fi
.if n .RE
.sp
\fIname\fP نباید شامل فاصلههای درونی باشد. هیچ تضمینی وجود ندارد که آیا نامهای تابع حاوی فاصله کار میکنند یا خیر. این رفتار ممکن است در آینده بدون اطلاع قبلی نیز تغییر کند. حرف قبل از \fIaction\fP مشخص میکند چه نوع کنشی فرمانی را که پس از آن میآید راهاندازی میکند. \*(Aq\fII\fP\*(Aq مخفف "Immediate" (فوری) است و به محض فراخوانی تابع اجرا میشود. \*(Aq\fIJ\fP\*(Aq مشابه "فوری" است اما تا زمانی که دکمهای فشرده یا رها شود، یا اشارهگر حرکت کند، یا تابع تکمیل شود به تأخیر میافتد. این عمل همواره قبل از سایر کنشهای تابع اجرا میشود. \*(Aq\fIM\fP\*(Aq مخفف "Motion" (حرکت) است، یعنی اگر کاربر شروع به حرکت دادن ماوس کند. \*(Aq\fIC\fP\*(Aq مخفف "Click" (کلیک) است، یعنی اگر کاربر دکمه ماوس را فشار داده و رها کند. \*(Aq\fIH\fP\*(Aq مخفف "Hold" (نگهداشتن) است، یعنی اگر کاربر دکمه ماوس را فشار دهد و آن را بیش از \fBClickTime\fP میلیثانیه نگه دارد. \*(Aq\fID\fP\*(Aq مخفف "Double\-click" (دوبار کلیک) است. کنش \*(Aq\fII\fP\*(Aq باعث میشود عملیات هنگام فشردن دکمه انجام شود، در صورتی که تابع با آگاهی قبلی از اینکه باید روی کدام پنجره عمل کند، فراخوانی شده باشد.
.sp
تعدادی نماد از پیش تعریفشده وجود دارند که اگر در خط فرمان ظاهر شوند با مقادیر مشخصی جایگزین میشوند. لطفاً برای جزئیات به بخش \fBCommand Expansion\fP مراجعه کنید.
.sp
\fBهشدار\fP لطفاً توضیحات مربوط به اجرای توابع پیچیده در بخش \fBScripting and Complex Functions\fP را مطالعه کنید.
.sp
مثالها:
.sp
اگر فراخوانی کنید:
.sp
.if n .RS 4
.nf
.fam C
Key F10 R A Function MailFunction xmh "\-font fixed"
.fam
.fi
.if n .RE
.sp
و "MailFunction" چنین باشد:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc MailFunction
+ I Next ($0) Iconify off
+ I Next (AcceptsFocus, $0) Focus
+ I None ($0) Exec exec $0 $1
.fam
.fi
.if n .RE
.sp
آنگاه آخرین خط تابع به این صورت تبدیل میشود:
.sp
.if n .RS 4
.nf
.fam C
+ I None (xmh) Exec exec xmh \-font fixed
.fam
.fi
.if n .RE
.sp
بسط در هنگام اجرای تابع انجام میشود، بنابراین میتوانید از همان تابع با انواع آرگومانهای مختلف استفاده کنید. شما میتوانید از:
.sp
.if n .RS 4
.nf
.fam C
Key F11 R A Function MailFunction zmail "\-bg pink"
.fam
.fi
.if n .RE
.sp
در همان \fIconfig\fP استفاده کنید، در صورتی که مایل باشید. مثالی از بهکارگیری "$[w.id]" عبارت است از:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc PrintFunction
+ I Raise
+ I Exec xdpr \-id $[w.id]
.fam
.fi
.if n .RE
.sp
توجه داشته باشید که "$$" به \*(Aq$\*(Aq بسط داده میشود.
.sp
مثالی دیگر: پیوند دادن کلید راست ماوس روی دکمه شماره ۶ پنجره (این یک دکمه کمینهسازی برای تم win95 است) جهت آیکونسازی تمام پنجرههای دارای منبع یکسان:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc FuncIconifySameResource "I" All ($0) Iconify on
Mouse 3 6 A FuncIconifySameResource $[w.resource]
.fam
.fi
.if n .RE
.RE
.sp
\fBBeep\fP
.RS 4
همانطور که انتظار میرود، این دستور باعث بوق زدن ترمینال میشود.
.RE
.sp
\fBDestroyFunc\fP \fIfunction\fP
.RS 4
یک تابع را حذف میکند، به طوری که ارجاعات بعدی به آن دیگر معتبر نخواهند بود. میتوانید از این دستور برای تغییر محتویات یک تابع در طول یک نشست fvwm استفاده کنید. تابع میتواند با استفاده از \fBAddToFunc\fP دوباره ساخته شود.
.sp
.if n .RS 4
.nf
.fam C
DestroyFunc PrintFunction
.fam
.fi
.if n .RE
.RE
.sp
\fBEcho\fP \fIstring\fP
.RS 4
پیامی را در فایل گزارش اشکالزدایی چاپ میکند، که نیازمند فعال بودن گزارشگیری است. برای اطلاعات بیشتر هم درباره فعالسازی گزارشگیری اشکالزدایی و هم مکان فایل گزارش، گزینه \fB\-v\fP یا \fBPrintInfo\fP را ببینید. میتواند برای اشکالزدایی موارد موجود در \fIconfig\fP شما یا دریافت مقدار متغیرها مفید باشد.
.sp
.if n .RS 4
.nf
.fam C
Echo Beginning style definitions...
Echo Current desk $[desk.n].
.fam
.fi
.if n .RE
.RE
.sp
\fBEchoFuncDefinition\fP \fIfunction\fP
.RS 4
دستور \fBEchoFuncDefinition\fP شبیه به دستور \fBEcho\fP است اما تعریف \fIfunction\fP دادهشده را در فایل گزارش اشکالزدایی چاپ میکند. این دستور برای پی بردن به نحوه مدیریت نقلقولها توسط fvwm و اشکالزدایی توابع مفید است.
.RE
.sp
\fBExec\fP \fIcommand\fP
.RS 4
دستور \fIcommand\fP را اجرا میکند. نباید از یک علامت امپرسند \*(Aq&\*(Aq در انتهای دستور استفاده کنید. احتمالاً مایل خواهید بود از یک "exec" اضافی در ابتدای \fIcommand\fP استفاده کنید. بدون آن، شلی که fvwm برای اجرای دستور شما فراخوانی میکند تا زمان خروج دستور باقی میماند. در عمل، دو برابر تعداد پردازههای مورد نیاز پردازه در حال اجرا خواهید داشت. توجه داشته باشید که برخی شلها آنقدر هوشمند هستند که از این امر جلوگیری کنند، اما در هر حال افزودن "exec" هیچ ضرری ندارد.
.sp
مثال زیر کلید تابع را مقید میکند.sp
در پنجرهٔ ریشه، بدون هیچ کلید تغییردهندهای، به تابع exec. برنامهٔ
rxvt با مجموعهای از گزینهها آغاز میشود.
.sp
.if n .RS 4
.nf
.fam C
Key F1 R N Exec exec rxvt \-fg yellow \-bg blue \(rs
\-e /bin/tcsh
.fam
.fi
.if n .RE
.sp
توجه داشته باشید که این تابع منتظر پایان یافتن \fIcommand\fP نمیماند، بنابراین
مواردی مانند:
.sp
.if n .RS 4
.nf
.fam C
Exec "echo AddToMenu ... > /tmp/file"
Read /tmp/file
.fam
.fi
.if n .RE
.sp
بهطور قابلاطمینان کار نمیکنند (دستور \fBPipeRead\fP را ببینید).
.RE
.sp
\fBExecUseShell\fP [\fIshell\fP]
.RS 4
باعث میشود دستور \fBExec\fP بهجای پوستهٔ پیشفرض Bourne (\fI/bin/sh\fP)، از پوستهٔ مشخصشده
یا در صورت عدم تعیین پوسته، از مقدار متغیر محیطی
\fI$SHELL\fP استفاده کند.
.sp
.if n .RS 4
.nf
.fam C
ExecUseShell
ExecUseShell /usr/local/bin/tcsh
.fam
.fi
.if n .RE
.RE
.sp
\fBFunction\fP \fIFunctionName\fP
.RS 4
برای مقید کردن (bind) یک تابع از پیش تعریفشده به یک کلید یا دکمهٔ ماوس استفاده میشود.
مثال زیر دکمهٔ ۱ ماوس را به تابعی به نام
«Move\-or\-Raise» متصل میکند که تعریف آن قبلاً در این صفحهٔ راهنما
بهعنوان مثال ارائه شده است. پس از انجام این اتصال، fvwm هر زمان که دکمهٔ ۱
در نوار عنوان پنجره فشرده شود، تابع «move\-or\-raise» را
اجرا میکند.
.sp
.if n .RS 4
.nf
.fam C
Mouse 1 T A Function Move\-or\-Raise
.fam
.fi
.if n .RE
.sp
در صورتی که \fIFunctionName\fP با دستورات fvwm تداخل نداشته باشد،
میتوان کلیدواژهٔ \fBFunction\fP را حذف کرد.
.sp
هشدار: لطفاً توضیحات مربوط به اجرای توابع پیچیده در
بخش \fBScripting and Complex Functions\fP را مطالعه کنید.
.RE
.sp
\fBInfoStoreAdd\fP \fIkey\fP \fIvalue\fP
.RS 4
مقدار \fIvalue\fP را در کلید \fIkey\fP دادهشده ذخیره میکند. این دستور برای ذخیرهٔ اطلاعات
عمومی مورداستفاده در طول چرخهٔ حیات یک فایل پیکربندی fvwm مفید است؛ برای نمونه
ذخیرهٔ ترجیحات برنامه جهت باز کردن فایلهای ویدئویی.
.sp
هدف این دستور ذخیرهٔ اطلاعات داخلی در fvwm است که میتواند
توسط توابع fvwm یا هنگام باز کردن برنامههایی با نوع خاص استفاده شود.
پیش از این دستور، تنها راه انجام این کار از طریق \fBSetEnv\fP بود
اما استفاده از آن توصیه نمیشود زیرا چنین اطلاعاتی را در متغیرهای محیطی قرار میدهد،
که محیط را آلوده کرده و اطلاعات را برای سایر فرایندهای آغازشده توسط fvwm بهصورت
سراسری درمیآورد و آنها ممکن است این اطلاعات را تغییر دهند که شاید
مطلوب نباشد. از این رو هدف \fBInfoStoreAdd\fP این است که امکان ذخیرهٔ چنین
اطلاعاتی را فراهم کند، اما آنها را در داخل fvwm نگه دارد.
.sp
به این ترتیب، میتوان به هر تعداد مورد نیاز جفت کلید/مقدار ایجاد کرد.
بازخوانی مقدار یک کلید خاص از طریق سازوکار معمول بسط در fvwm
صورت میگیرد. برای جزئیات بیشتر بخش \fBCommand Expansion\fP را ببینید.
برای مثال:
.sp
.if n .RS 4
.nf
.fam C
InfoStoreAdd teddybearprog xteddy
# Echo the value of teddybearprog
Echo $[infostore.teddybearprog]
.fam
.fi
.if n .RE
.sp
حذف یک مدخل از InfoStore با استفاده از دستور
\fBInfoStoreRemove\fP انجام میشود.
.RE
.sp
\fBInfoStoreRemove\fP \fIkey\fP
.RS 4
مدخل موجود در \fIkey\fP دادهشده را از InfoStore حذف میکند. مثال:
.sp
.if n .RS 4
.nf
.fam C
InfoStoreRemove teddybearprog
.fam
.fi
.if n .RE
.RE
.sp
\fBNop\fP
.RS 4
هیچ کاری انجام نمیدهد. برای درج یک خط خالی یا خط جداکننده در
یک منو استفاده میشود. اگر مشخصهٔ آیتم منو بهصورت زیر باشد:
.sp
.if n .RS 4
.nf
.fam C
AddToMenu MyMenu " " Nop
.fam
.fi
.if n .RE
.sp
آنگاه یک خط خالی درج میشود. اگر به شکل زیر باشد:
.sp
.if n .RS 4
.nf
.fam C
+ "" Nop
.fam
.fi
.if n .RE
.sp
یک خط جداکننده درج میشود. همچنین میتواند بهعنوان عمل
دوبار کلیک برای \fBMenu\fP یا \fBPopup\fP استفاده شود.
.RE
.sp
\fBPipeRead\fP \fIcommand\fP [quiet]
.RS 4
باعث میشود fvwm دستورها را از خروجی \fIcommand\fP بخواند. این
\fIcommand\fP توسط \fI/bin/sh\fP اجرا میشود، گویی آن را در خط فرمان
تایپ کرده باشید. اگر دستور از بیش از یک کلمه تشکیل شده باشد باید در علامت نقلقول قرار گیرد.
برای نمونه، جهت ساخت ورودیهای پویای منو بر اساس محتویات یک
دایرکتوری کاربرد دارد. اگر کلیدواژهٔ \fIQuiet\fP پس از دستور بیاید، در صورت پیدا
نشدن \fIcommand\fP هیچ پیامی تولید نمیشود.
.sp
مثال:
.sp
.if n .RS 4
.nf
.fam C
AddToMenu HomeDirMenu
PipeRead \*(Aqfor i in $HOME/*; \(rs
do echo "+ $i Exec xterm \-e vi $i"; done\*(Aq
.fam
.fi
.if n .RE
.sp
نکته: \fBPipeRead\fP بهطور پیشفرض در حین اجرا، اشارهگر ماوس را به نشانگر ساعت تغییر میدهد.
با این حال، برخی دستورها مانند xwd باید خودشان کنترل اشارهگر را به
دست بگیرند و کار نخواهند کرد. برای غیرفعال کردن نشانگر ساعت، پیش از \fBPipeRead\fP
از این دستور استفاده کنید:
.sp
.if n .RS 4
.nf
.fam C
BusyCursor Read off
.fam
.fi
.if n .RE
.sp
دستور \fBPipeRead\fP بهصورت همگام اجرا میشود. اگر میخواهید دستوری را با \fBExec\fP اجرا
کنید، اما نیاز دارید که بهصورت همگام اجرا شود، میتوانید
کاری شبیه به این انجام دهید:.sp
.if n .RS 4
.nf
.fam C
PipeRead \*(Aqcommand 1>&2\*(Aq
.fam
.fi
.if n .RE
.sp
تغییر مسیر باعث میشود هر خروجی برنامه به جای اینکه به عنوان توالی دستورها توسط fvwm خوانده شود، به stderr برود. در صورتی که دستور مشخصشده اجرا شود \fBPipeRead\fP مقدار 1 و در غیر این صورت مقدار \-1 را برمیگرداند (برای مفهوم کدهای بازگشتی به بخش \fBConditional Commands\fP مراجعه کنید).
.RE
.sp
\fBRead\fP \fIfilename\fP [quiet]
.RS 4
باعث میشود fvwm دستورها را از فایلی به نام \fIfilename\fP بخواند. اگر کلیدواژهٔ \fIQuiet\fP به دنبال دستور بیاید، در صورت پیدا نشدن فایل هیچ پیامی صادر نمیشود. اگر نام فایل با یک اسلش (\*(Aq/\*(Aq) آغاز نشود، fvwm ابتدا در دایرکتوری دادههای کاربر و سپس در دایرکتوری دادههای سیستم جستجو میکند. دایرکتوری دادههای کاربر بهطور پیشفرض \fI$HOME/.fvwm\fP است. این مسیر را میتوان با صادر کردن (export) متغیر \fIFVWM_USERDIR\fP به هر دایرکتوری دیگری بازنویسی کرد. در صورتی که فایل دادهشده خوانده شود دستور \fBRead\fP مقدار 1 و در غیر این صورت مقدار \-1 را بازمیگرداند (برای مفهوم کدهای بازگشتی به بخش \fBConditional Commands\fP مراجعه کنید).
.RE
.sp
\fBSetEnv\fP \fIvariable\fP \fIvalue\fP
.RS 4
مشابه دستورهای export یا setenv در شل، یک متغیر محیطی را روی مقداری جدید تنظیم میکند. \fIvariable\fP و مقدار آن \fIvalue\fP توسط فرایندهایی که مستقیماً از طریق fvwm آغاز میشوند به ارث برده میشود. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
SetEnv height HEIGHT
.fam
.fi
.if n .RE
.RE
.sp
\fBSilent\fP \fIcommand\fP
.RS 4
تعدادی از دستورها برای انجام عملیات به یک پنجره نیاز دارند. اگر هنگام فراخوانی چنین تابعی پنجرهای انتخاب نشده باشد، از کاربر درخواست میشود پنجرهای را انتخاب کند. گاهی اوقات این رفتار ناخواسته است؛ برای نمونه اگر تابع توسط یک ماژول فراخوانی شده باشد و پنجرهای که در ابتدا انتخاب شده بود دیگر وجود نداشته باشد. میتوانید با قرار دادن \fBSilent\fP در ابتدای \fIcommand\fP در fvwm، از این کار جلوگیری کنید. اگر تابعی که به پنجره نیاز دارد همراه با \fBSilent\fP و بدون انتخاب پنجره فراخوانی شود، بدون انجام کاری برمیگردد. اگر \fBSilent\fP بر روی یک تابع تعریفشده توسط کاربر استفاده شود، بر تمامی فراخوانیهای توابع و زیرتوابع تا زمان خروج از تابع اصلی تأثیر میگذارد.
.sp
کاربرد دیگر \fBSilent\fP همراه با دستورهای مقیدسازی (binding) شامل \fBKey\fP، \fBPointerKey\fP و \fBMouse\fP است که پیامهای خطا را غیرفعال میکند.
.sp
همچنین \fBSilent\fP پیام خطای مربوط به دستورهای ناموجود را غیرفعال میسازد.
نکته: با این دستور به عنوان یک پیشوند برای \fIcommand\fP رفتار میشود. بسط خط فرمان به گونهای انجام میگیرد که گویی \fBSilent\fP وجود نداشته است.
.sp
مثالها:
.sp
.if n .RS 4
.nf
.fam C
Silent Move 0 0
Silent User_defined_function
# do not complain on keyboards without "Help" key
Silent Key Help R A Popup HelpMenu
.fam
.fi
.if n .RE
.RE
.sp
\fBUnsetEnv\fP [\fIvariable\fP]
.RS 4
یک متغیر محیطی را لغو میکند، مشابه دستور export یا unsetenv در شل. سپس \fIvariable\fP از آرایهٔ متغیرهای محیطی که توسط فرایندهای راهاندازیشده بهطور مستقیم از fvwm به ارث برده میشود، حذف میگردد.
.RE
.sp
\fBWait\fP \fIwindow\fP
.RS 4
این دستور تنها برای استفاده در توابع fvwm در نظر گرفته شده است. این دستور اجرای یک تابع را تا زمان ظاهر شدن پنجرهای جدید و منطبق با \fIwindow\fP متوقف میکند. این مقدار میتواند نام پنجره، کلاس، یا رشتهٔ منبع (resource) آن باشد. همچنین میتواند شامل نویسههای عام \*(Aq*\*(Aq و \*(Aq?\*(Aq باشد که به شیوهٔ معمول نامگذاری فایل در Unix مطابقت داده میشوند. این ویژگی بهویژه در "InitFunction" در صورتی که بخواهید پنجرهها را در میزکارهای (desktops) خاصی راهاندازی کنید، مفید است:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc InitFunction
+ I Exec exec xterm \-geometry 80x64+0+0
+ I Wait xterm
+ I GotoDesk 0 2
+ I Exec exec xmh \-font fixed \-geometry \(rs
507x750+0+0
+ I Wait xmh
+ I GotoDesk 0 0
.fam
.fi
.if n .RE
.sp
تابع فوق یک xterm را روی میزکار فعلی آغاز میکند، منتظر میماند تا پنجره نمایان (map) شود، سپس به میزکار 2 رفته و یک xmh را اجرا میکند. پس از ظاهر شدن پنجرهٔ xmh، کنترل به میزکار 0 منتقل میشود.
.sp
در طول انتظار، fvwm تا حدی کارایی خود را حفظ میکند، اما هر ورودی از جانب ماژولها در صف قرار گرفته و تنها پس از نمایش پنجره یا لغو دستور پردازش میشود. برای مثال، در طول انتظار نمیتوان پنجرهها را با \fBFvwmIconMan\fP یا \fBFvwmPager\fP فوکوس کرد.
.sp
میتوانید با فشردن Ctrl\-Alt\-Escape (که در آن Alt نخستین کلید تبدیلگر است) از توقف \fBWait\fP خارج شوید. برای تعریف مجدد این توالی کلید، به دستور \fBEscapeFunc\fP مراجعه کنید.
.RE
.sp
\fBStatus\fP \fIOn | Off\fP
.RS 4
وضعیت را روشن (On) یا خاموش (Off) میکند. این دستور اطلاعاتی را در قالب JSON دربارهٔ میزکارهای کنونی، تعداد پنجرهها و غیره از طریق یک لولهٔ نامگذاریشده (تنظیمشده از طریق متغیر محیطی FVWM_STATUS_PIPE) ارسال میکند. هدف این است که روشی سریع برای ارائهٔ اطلاعات دربارهٔ رویدادهای Fvwm به ابزارهای شخص ثالث (third-party) فراهم شود. برای نمونه، دادههای JSON میتوانند پردازش شده و به ابزارهایی مانند \fIlemonbar\fP، \fIpolybar\fP و غیره فرستاده شوند.
.sp
قالب دادههای JSON به شکل زیر است:
.sp
.if n .RS 4
.nf
.fam C
{
"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
},
},
},
},
}
.fam
.fi
.if n .RE
.sp
این بخشها بسته به تعداد هر یک، برای تمام صفحهنمایشها، گروهها و غیره تکرار میشوند.
.RE.SS "دستورهای شرطی (Conditional Commands)"
.sp
دستورهای شرطی، دستورهایی هستند که فقط در صورت برآورده شدن شرایطی خاص اجرا میشوند. بیشتر دستورهای شرطی مانند \fBNext\fP، \fBThisWindow\fP یا \fBAll\fP روی پنجرهها عمل میکنند. یک دستور شرطی به نام \fBTest\fP نیز وجود دارد که روی شرایط سراسری بدون ارتباط با پنجرهها کار میکند. نحو (syntax) این شرایط در ادامه شرح داده شده است. به منظور خوانایی بهتر، فهرست شرایط در انتهای این بخش قرار دارد.
.sp
\fBکدهای بازگشتی (Return Codes)\fP
.RS 4
تمام دستورهای این بخش (مگر آنکه به طور مشخص برای دستوری خلاف آن ذکر شده باشد) یک کد بازگشتی نیز دارند که میتواند ۱ (در صورت برقرار بودن شرط) یا ۰ (در صورت برقرار نبودن شرط) باشد. برخی دستورها ممکن است \-1 بازگردانند که به معنای وقوع خطا و غیرقابلاستفاده بودن کد بازگشتی است. دستور \fBBreak\fP مقدار \-2 را بازمیگرداند. علاوه بر این، کدهای بازگشتی دستورهای اجراشده در یک تابع پیچیده (complex function) به تابع فراخواننده منتقل میشوند. کد بازگشتی توسط دستور \fBTestRc\fP استفاده میشود. لطفاً برای مثالها به توضیحات دستورها مراجعه کنید. به کد بازگشتی میتوان از طریق متغیر \fI$[cond.rc]\fP نیز دسترسی داشت. دستورهای غیرشرطی کد بازگشتیِ آخرین دستور شرطی را تغییر نمیدهند. نکته مهم: کدهای بازگشتی تنها درون توابعی که با دستور \fBAddToFunc\fP ایجاد شدهاند تعریف میشوند و به زیرتوابع به ارث نمیرسند. برای اجرای یک دستور بدون تغییر دادن کد بازگشتی، میتوان از دستور \fBKeepRc\fP استفاده کرد.
.RE
.sp
\fBحلقه پنجرهها (The Ring of Windows)\fP
.RS 4
سامانه Fvwm پنجرهها را در ساختاری حلقوی در حافظه نگهداری میکند. پنجره دارای فوکوس را مانند مکاننمایی بر روی موقعیت فعلی در این حلقه در نظر بگیرید. دستور \fBNext\fP و بسیاری دیگر از دستورها در جهت جلو در طول حلقه به دنبال پنجره منطبق میگردند، و \fBPrev\fP به سمت عقب جستجو میکند. پنجرهها در این حلقه یا بر اساس زمان ایجاد مرتب میشوند (اگر سبکهای \fI!FPSortWindowlistByFocus\fP، \fINeverFocus\fP یا \fIMouseFocus\fP استفاده شده باشند) یا بر اساس آخرین باری که فوکوس داشتهاند.
.RE
.sp
\fBفهرست دستورهای شرطی (List of Conditional Commands)\fP
.RS 4
.sp
\fBAll\fP [\fIoptions\fP] [(\fIconditions\fP)] \fIcommand\fP
.RS 4
دستور \fIcommand\fP را روی تمام پنجرههایی که شرایط را برآورده میکنند اجرا میکند. اگر پنجرهای با شرایط مطابقت داشته باشد ۱ و در غیر این صورت ۰ بازمیگرداند. اجرا از بالای حلقه پنجرهها آغاز شده و به سمت پایین ادامه مییابد. گزینههای \fIoptions\fP میتوانند هر ترکیبی از \fIReverse\fP و \fIUseStack\fP باشند. اگر گزینه \fIReverse\fP مشخص شود، ترتیب اجرا معکوس میگردد. گزینه \fIUseStack\fP باعث میشود All هنگام پیمایش پنجرهها به جای حلقه پنجرهها از ترتیب چیدمان لایهای (stacking order) استفاده کند. برای فهرستی از شرایط به بخش \fBConditions\fP مراجعه کنید.
.sp
این دستور به طور ضمنی شامل شرایط \fICirculateHit\fP، \fICirculateHitIcon\fP و \fICirculateHitShaded\fP است. این شرایط را میتوان با مشخص کردن صریح \fI!CirculateHit\fP و غیره غیرفعال کرد.
.RE
.sp
\fBAny\fP [(\fIconditions\fP)] \fIcommand\fP
.RS 4
در صورتی که پنجرهای وجود داشته باشد که تمام شرایط \fIconditions\fP را برآورده کند، دستور \fIcommand\fP را اجرا میکند. این دستور در بافتار پنجره ریشه (root window) اجرا میشود. برای فهرستی از شرایط به بخش \fBConditions\fP مراجعه کنید.
.RE
.sp
\fBBreak\fP [\fIlevels\fP]
.RS 4
اگر دستور break درون یک تابع استفاده شود، اجرای تابع بلافاصله متوقف میشود. دستورهای بعدی آن تابع پردازش نخواهند شد. به طور معمول، از تمام فراخوانیهای تودرتوی توابع پیچیده خارج میشود. میتوان یک عدد صحیح اختیاری \fIlevels\fP تعیین کرد تا از همان تعداد توابع تودرتو خارج شده و اجرای تابع در سطح بالاتر ادامه یابد. دستور \fBBreak\fP همواره کد بازگشتی \-2 دارد. مثال:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc PickWindowRaiseAndDeiconify
+ I Pick
+ I TestRc (Error) Break
+ I Raise
+ I Iconify off
.fam
.fi
.if n .RE
.RE
.sp
\fBCurrent\fP [(\fIconditions\fP)] \fIcommand\fP
.RS 4
در صورتی که پنجرهای که اکنون دارای فوکوس است تمام شرایط \fIconditions\fP را برآورده کند، دستور \fIcommand\fP را روی آن اجرا میکند. برای فهرستی از شرایط به بخش \fBConditions\fP مراجعه کنید.
.sp
این دستور به طور ضمنی شامل شرایط \fICirculateHit\fP، \fICirculateHitIcon\fP و \fICirculateHitShaded\fP است. این شرایط را میتوان با مشخص کردن صریح \fI!CirculateHit\fP و غیره غیرفعال کرد.
.RE
.sp
\fBDirection\fP [FromPointer] \fIdirection\fP [(\fIconditions\fP)] \fIcommand\fP
.RS 4
دستور \fIcommand\fP (معمولاً \fBFocus\fP) را روی پنجرهای در جهت دادهشده که تمام شرایط \fIconditions\fP را برآورده میکند اجرا مینماید. به طور معمول، مرکز پنجرهای که اکنون دارای فوکوس است یا پنجره بافتاری که دستور در آن فراخوانی شده، به عنوان نقطه شروع در نظر گرفته میشود. در صورت نبود چنین پنجرهای، یا در صورتی که گزینه \fIFromPointer\fP مشخص شده باشد، موقعیت فعلی نشانگر به عنوان نقطه شروع فرض میشود. مقدار \fIdirection\fP میتواند یکی از مقادیر "North"، "Northeast"، "East"، "Southeast"، "South"، "Southwest"، "West"، "Northwest" و "Center" باشد. این که \fBDirection\fP کدام پنجره را انتخاب کند به زاویه و فاصله میان نقاط مرکزی پنجرهها بستگی دارد. پنجرههای نزدیکتر تطابق بهتری نسبت به پنجرههای دورتر به حساب میآیند. جهت \fICenter\fP صرفاً نزدیکترین پنجره به نقطه شروع را انتخاب میکند. در صورت ارائه یک جهت نامعتبر مقدار \-1 بازگردانده میشود. برای فهرستی از شرایط به بخش \fBConditions\fP مراجعه کنید.
.RE
.sp
\fBKeepRc\fP \fIcommand\fP
.RS 4
دستور \fIcommand\fP را اجرا میکند اما کد بازگشتی دستور قبلی را تغییر نمیدهد. نکته: با \fBKeepRc\fP به عنوان یک پیشوند برای \fIcommand\fP رفتار میشود. بسط خط فرمان به گونهای صورت میگیرد که گویی \fBKeepRc\fP وجود نداشته است.
.RE
.sp
\fBNext\fP [(\fIconditions\fP)] \fIcommand\fP
.RS 4
دستور \fIcommand\fP (معمولاً \fBFocus\fP) را روی پنجره بعدی که تمام شرایط \fIconditions\fP را برآورده کند اجرا میکند. اگر دستور در بافتار یک پنجره در حال اجرا باشد، جستجو برای یافتن پنجره منطبق را از همانجا آغاز میکند؛ در غیر این صورت، از پنجره دارای فوکوس شروع مینماید. برای فهرستی از شرایط به بخش \fBConditions\fP مراجعه کنید.
.RE
.sp
\fBNone\fP [(\fIconditions\fP)] \fIcommand\fP
.RS 4
در صورتی که هیچ پنجرهای که تمام شرایط \fIconditions\fP را برآورده کند وجود نداشته باشد، دستور \fIcommand\fP را اجرا میکند. این دستور در بافتار پنجره ریشه اجرا میشود. اگر هیچ پنجرهای با شرایط مطابقت نداشته باشد مقدار ۱ و در غیر این صورت ۰ بازمیگرداند. برای فهرستی از شرایط به بخش \fBConditions\fP مراجعه کنید.
.sp
این دستور به طور ضمنی شامل شرایط \fICirculateHit\fP، \fICirculateHitIcon\fP و \fICirculateHitShaded\fP است. این شرایط را میتوان با مشخص کردن صریح \fI!CirculateHit\fP و غیره غیرفعال کرد.
.RE
.sp
\fBNoWindow\fP \fIcommand\fP
.RS 4
دستور \fIcommand\fP را اجرا میکند، اما بافتار پنجره را (در صورت وجود) حذف مینماید. این در حقیقت یک دستور شرطی نیست، بلکه یک پیشوند است که ممکن است در مواردی از منو که باید بدون پنجره عمل کنند مفید باشد، حتی اگر چنین منویی به تزئینات پنجره متصل شده باشد.
.RE
.sp
\fBPick\fP [(\fIconditions\fP)] \fIcommand\fP
.RS 4
دستور \fBPick\fP در صورتی که در بافتار یک پنجره فراخوانی شود، مانند \fBFunction\fP عمل میکند. اگر در پنجره ریشه فراخوانی شود، ابتدا از کاربر میخواهد پنجرهای را انتخاب کند و سپس دستور \fIcommand\fP را در بافتار آن پنجره اجرا مینماید. این کار مانع از انتخابهای مکرر و آزاردهنده در توابع پیچیده میشود. دستور تنها در صورتی اجرا میشود که شرایط \fIconditions\fP دادهشده برآورده شوند. اگر هیچ پنجرهای انتخاب نشود، مقدار \-1 بازگردانده میشود. برای فهرستی از شرایط به بخش \fBConditions\fP مراجعه کنید.
.sp
این دستور به طور ضمنی شامل شرایط \fICirculateHit\fP، \fICirculateHitIcon\fP و \fICirculateHitShaded\fP است. این شرایط را میتوان با مشخص کردن صریح \fI!CirculateHit\fP و غیره غیرفعال کرد.
.RE
.sp
\fBPointerWindow\fP [(\fIconditions\fP)] \fIcommand\fP
.RS 4
در صورتی که پنجره زیر نشانگر تمام شرایط \fIconditions\fP را برآورده کند، دستور \fIcommand\fP را اجرا میکند. اگر پنجرهای زیر نشانگر نباشد مقدار \-1 بازمیگرداند. برای فهرستی از شرایط به بخش \fBConditions\fP مراجعه کنید.
.sp
این دستور به طور ضمنی شامل شرایط \fICirculateHit\fP، \fICirculateHitIcon\fP و \fICirculateHitShaded\fP است. این شرایط را میتوان با مشخص کردن صریح \fI!CirculateHit\fP و غیره غیرفعال کرد.
.RE
.sp
\fBPrev\fP [(\fIconditions\fP)] \fIcommand\fP
.RS 4
دستور \fIcommand\fP (معمولاً \fBFocus\fP) را روی پنجره قبلی که تمام شرایط \fIconditions\fP را برآورده کند اجرا میکند. اگر دستور در بافتار یک پنجره در حال اجرا باشد، جستجو برای یافتن پنجره منطبق را از همانجا آغاز میکند؛ در غیر این صورت، از پنجره دارای فوکوس شروع مینماید. برای فهرستی از شرایط به بخش \fBConditions\fP مراجعه کنید.
.RE.sp
\fBScanForWindow\fP [FromPointer] \fIdir1\fP \fIdir2\fP [(\fIconditions\fP)] \fIcommand\fP
.RS 4
دستور \fIcommand\fP (معمولاً \fBFocus\fP) را بر روی پنجرهای در جهت دادهشده که تمام \fIconditions\fP را برآورده میکند، اجرا میکند. بهطور معمول، مرکز پنجرهای که در حال حاضر دارای فوکوس است یا پنجره زمینهای (context window) که دستور در آن فراخوانی شده است، به عنوان نقطه شروع در نظر گرفته میشود. در صورت عدم وجود چنین پنجرهای، یا زمانی که گزینه \fIFromPointer\fP داده شود، موقعیت کنونی اشارهگر به عنوان نقطه شروع در نظر گرفته میشود. جهت \fIdir1\fP میتواند یکی از "North" ،"NorthEast" ،"East" ،"SouthEast" ،"South" ،"SouthWest" ،"West" و "NorthWest" باشد. اینکه \fBScanForWindow\fP کدام پنجره را انتخاب کند، ابتدا به موقعیت در امتداد محور اصلی ارائهشده توسط \fIdir1\fP بستگی دارد. اگر چند پنجره مختصات دقیقاً یکسانی در امتداد محور اصلی داشته باشند، از جهت فرعی برای مرتبسازی پنجرهها استفاده میشود. جهت \fIdir2\fP میتواند یکی از همان مقادیر مجموعه \fIdir1\fP باشد. اگر \fIdir2\fP کاملاً بر \fIdir1\fP عمود نباشد، ScanForWindow شکست (failure) برمیگرداند. هنگام استفاده مکرر از ScanForWindow با همان آرگومانها، تضمین میشود که در نهایت تمامی پنجرههای منطبق با شرایط پیدا خواهند شد. اگر فوکوس در امتداد محور اصلی به یک حد برسد، دور زده و به سمت مخالف میرود (wrap around). در صورت تعیین یک جهت نامعتبر، مقدار \-1 بازگردانده میشود. برای فهرستی از شرایط، بخش \fBConditions\fP را ببینید.
.RE
.sp
\fBTest\fP [(\fItest\-conditions\fP)] \fIcommand\fP
.RS 4
اگر تمام \fItest\-conditions\fP برآورده شوند، دستور \fIcommand\fP را اجرا میکند. شرایط آزمون (\fItest\-conditions\fP) کلمات کلیدی به همراه آرگومانهای احتمالی از فهرست زیر هستند و با کاما یا نویسه فاصله از یکدیگر جدا میشوند. آنها شامل موارد زیر هستند:
\fIVersion operator x.y.z\fP، \fIEnvIsSet varname\fP، \fIEnvMatch varname pattern\fP، \fIStrMatch string pattern\fP، \fIEdgeHasPointer direction\fP، \fIEdgeIsActive direction\fP، \fIStart\fP، \fIInit\fP، \fIRestart\fP، \fIExit\fP، \fIQuit\fP، \fIToRestart\fP، \fITrue\fP، \fIFalse\fP، \fIF\fP، \fIR\fP، \fIW\fP، \fIX\fP و \fII\fP. شرط آزمونی که پیشوند "!" داشته باشد، نقیض میشود.
.sp
شرط آزمون \fIVersion\fP \fIoperator x.y.z\fP در صورتی برآورده میشود که شرط منطقی عبارت درست باشد. مقادیر معتبر \fIoperator\fP عبارتند از: \fI>=\fP، \fI>\fP، \fI<=\fP، \fI<\fP، \fI==\fP و \fI!=\fP.
.sp
مثال:
.sp
.if n .RS 4
.nf
.fam C
Test (Version >= 2.5.11) Echo 2.5.11 or later.
.fam
.fi
.if n .RE
.sp
شرط آزمون \fIEnvIsSet\fP \fIvarname\fP در صورتی درست است که متغیر محیطی دادهشده مقداردهی شده باشد. شرط آزمون \fIEnvMatch\fP \fIvarname pattern\fP در صورتی درست است که \fIpattern\fP با مقدار متغیر محیطی یا infostore دادهشده مطابقت داشته باشد (به \fBInfoStoreAdd\fP مراجعه کنید). الگو میتواند شامل نویسههای خاص "*" و "?" باشد. نام متغیر "varname" بدون علامت دلار ابتدایی ($) نوشته میشود.
.sp
شرط \fIStrMatch\fP \fIstring\fP \fIpattern\fP بررسی میکند که آیا \fIstring\fP دادهشده با \fIpattern\fP دادهشده مطابقت دارد یا خیر، که یک رشته حساس به حروف بزرگ و کوچک است و میتواند شامل نویسههای خاص "*" و "?" برای نویسههای عمومی (wildcard) باشد. این دستور میتواند بهجای \fIEnvMatch\fP با نحوی متفاوت به کار رود و همچنین امکان بررسی این را فراهم میسازد که آیا سایر بسطهای متغیر با یک مقدار مشخص برابر هستند یا خیر. برای مثال، جهت بررسی اینکه آیا نام مانیتور کنونی "DP\-2" است، از این دستور استفاده کنید:
.sp
.if n .RS 4
.nf
.fam C
Test (StrMatch $[monitor.current] DP\-2) Echo True
# StrMatch and EnvMatch have different syntaxes:
Test (EnvMatch HOME /home/username) ...
Test (StrMatch $[HOME] /home/username) ...
.fam
.fi
.if n .RE
.sp
شرط آزمون \fIEdgeHasPointer\fP [\fIdirection\fP] در صورتی درست است که لبه در جهت دادهشده در حال حاضر حاوی اشارهگر باشد. شرط آزمون \fIEdgeIsActive\fP [\fIdirection\fP] در صورتی درست است که لبه در جهت دادهشده در حال حاضر فعال باشد. یک لبه فعال است و میتواند حاوی اشارهگر باشد اگر یا دستوری به آن متصل شده باشد و یا پیمایش لبه (edge scroll) در آن جهت در دسترس باشد. جهت میتواند یکی از * Any\fI,\fP North\fI,\fP Top\fI,\fP Up\fI,\fP West\fI,\fP Left\fI,\fP South\fI,\fP Bottom\fI, \fP Down\fI,\fP Right* و * East\fI باشد. اگر هیچ جهتی مشخص نشود، \fPAny* فرض میشود.
.sp
شرط آزمون \fIStart\fP معادل یکی از شرایط \fIInit\fP یا \fIRestart\fP است. این شرط فقط هنگام راهاندازی یا شروع مجدد، پیش از و در طول اجرای \fBStartFunction\fP درست است. شرط آزمون \fIExit\fP معادل یکی از شرایط \fIQuit\fP یا \fIToRestart\fP است. این شرط فقط هنگام خاموش شدن، در طول اجرای تابع \fBExitFunction\fP معتبر است.
.sp
شرایط آزمون \fITrue\fP و \fIFalse\fP بدون قید و شرط درست و نادرست هستند.
.sp
علاوه بر این، اگر نام یک شرط آزمون شناخته نشود، کد بازگشتی Error تنظیم میشود و دستور اجرا نمیگردد.
.sp
شرایط آزمون \fIF\fP \fIfile\fP، \fIR\fP \fIfile\fP، \fIW\fP \fIfile\fP، \fIX\fP \fIfile\fP و \fII\fP \fIfile\fP وجود فایل دادهشده [F]ile (احتمالاً با مجوزهای خواندن [R]ead یا نوشتن [W]rite)، فایل اجرایی e[X]ecutable (در \fI$PATH\fP)، یا تصویر [I]mage (در ImagePath) را بررسی میکنند.
.sp
مثال:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc StartFunction I Test (Init) Exec exec xterm
AddToFunc VerifyVersion
+ I Test (Version 2.5.*) Echo 2.5.x detected
+ I TestRc (NoMatch) \(rs
Test (!Version 2.6.*) Echo Future version
+ I TestRc (NoMatch) \(rs
Echo 2.6.x is detected
Test (F $[FVWM_USERDIR]/local\-config) Read local\-config
Test (X xterm\-utf16) Exec exec xterm\-utf16
.fam
.fi
.if n .RE
.RE
.sp
\fBTestRc\fP [([!]\fIreturncode\fP)] \fIcommand\fP
.RS 4
اگر آخرین دستور شرطی مقدار \fIreturncode\fP را بازگردانده باشد، دستور \fIcommand\fP را اجرا میکند. به جای مقادیر عددی 0 (عدم تطابق)، 1 (تطابق)، \-1 (خطا) و \-2 (توقف)، میتوان از نامهای نمادین "\fINoMatch\fP"، "\fIMatch\fP"، "\fIError\fP" و "\fIBreak\fP" استفاده کرد. اگر هیچ \fIreturncode\fP مشخص نشود، مقدار پیشفرض 0 در نظر گرفته میشود. اگر کد بازگشتی با پیشوند \*(Aq!\*(Aq مشخص شود، در صورتی که \fIreturncode\fP با مقدار بازگرداندهشده توسط دستور شرطی مطابقت نداشته باشد، دستور اجرا میشود. دستور \fBTestRc\fP تنها درون توابع قابل استفاده است. اگر \fIcommand\fP یک دستور شرطی دیگر باشد، کد بازگشتی قبلی با کد جدید جایگزین میشود. مثال:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc ToggleXterm
+ I All (my_xtermwindow) Close
+ I TestRc (NoMatch) Exec xterm \-T my_xtermwindow
.fam
.fi
.if n .RE
.RE
.sp
\fBThisWindow\fP [(\fIconditions\fP)] command
.RS 4
دستور \fBThisWindow\fP دستور \fIcommand\fP مشخصشده را در زمینه (context) پنجره عملوند فعلی اجرا میکند. اگر هیچ پنجره عملوندی وجود نداشته باشد (در پنجره ریشه فراخوانی شود)، دستور نادیده گرفته میشود. \fBThisWindow\fP هرگز تعاملی نیست. دستور تنها در صورتی اجرا میشود که \fIconditions\fP ارائهشده برآورده شوند. در صورت استفاده در خارج از زمینه پنجره، مقدار \-1 بازگردانده میشود. برای مشاهده فهرستی از شرایط، بخش \fBConditions\fP را ببینید.
.sp
این دستور بهطور ضمنی شامل شرایط \fICirculateHit\fP، \fICirculateHitIcon\fP و \fICirculateHitShaded\fP است. میتوان آنها را با تعیین صریح "!CirculateHit" و غیره غیرفعال کرد.
.RE
.sp
\fBWindowId\fP [\fIid\fP] [(\fIconditions\fP)] | [root] \fIcommand\fP
.RS 4
دستور \fBWindowId\fP به دنبال یک \fIid\fP مشخص از پنجره میگردد و دستور \fIcommand\fP تعیینشده را روی آن اجرا میکند. شکل دوم نحو، شناسه پنجره مربوط به پنجره ریشه (root window) را بازیابی میکند. پنجرهای که توسط \fIid\fP مشخص شده ممکن است متعلق به پنجرهای باشد که توسط fvwm مدیریت نمیشود. اگرچه اکثر دستورها نمیتوانند بر روی چنین پنجرههایی عمل کنند، برخی استثناها وجود دارد؛ برای مثال دستور \fBWarpToWindow\fP. در صورتی که هیچ پنجرهای با شناسه دادهشده وجود نداشته باشد، مقدار \-1 را برمیگرداند. برای مشاهده فهرستی از شرایط، بخش \fBConditions\fP را ببینید.
.sp
این دستور بهطور ضمنی شامل شرایط \fICirculateHit\fP، \fICirculateHitIcon\fP و \fICirculateHitShaded\fP است. میتوان آنها را با مشخص کردن صریح \fI!CirculateHit\fP و غیره غیرفعال کرد.
.sp
مثالها:
.sp
.if n .RS 4
.nf
.fam C
WindowId 0x34567890 Raise
WindowId root 1 WarpToWindow 50 50
WindowId $0 (Silly_Popup) Delete
.fam
.fi
.if n .RE.sp
در گذشته این دستور بیشتر برای توابعی مفید بود که با دستور \fBWindowList\fP به کار میرفتند، یا برای پردازش گزینشی فراخوانیهای \fBFvwmEvent\fP (مانند مثال آخر)، اما در حال حاضر این توابع گرداننده درون زمینه پنجره فراخوانی میشوند، بنابراین در این موارد واقعاً به این دستور نیازی نیست. با این حال هنوز هم اگر برای نمونه لازم باشد شناسه پنجره برای پردازشهای بعدی در یک متغیر محیطی ذخیره شود، میتواند مفید باشد.
.RE
.sp
.if n .RS 4
.nf
.fam C
Pick SetEnv BOOKMARKED_WINDOW $[w.id]
WindowId $[BOOKMARKED_WINDOW] WarpToWindow
.fam
.fi
.if n .RE
.RE
.sp
\fBشرایط (Conditions)\fP
.RS 4
\fIشرایطی\fP (\fIconditions\fP) که ممکن است بهعنوان آرگومان به هر دستور شرطی داده شوند، فهرستی از کلیدواژههای جداشده با کاما هستند که درون پرانتز قرار میگیرند. مگر در مواردی که خلاف آن ذکر شده باشد، دستورهای شرطی تمام شرایط فهرستشده در زیر را میپذیرند. توجه داشته باشید که نگارشهای پیشین fvwm مستلزم آن بودند که شرایط بهجای کاما با فاصله (whitespace) جدا شده و بهجای پرانتز درون قلاب (کروشه) قرار گیرند (این قابلیت همچنان برای سازگاری با گذشته پشتیبانی میشود).
.sp
علاوه بر این، \fIشرایط\fP ممکن است شامل یک یا چند نام پنجره برای مطابقت باشند. اگر بیش از یک نام پنجره مشخص شود، همه آنها باید مطابقت داشته باشند. هنگام تلاش برای یافتن تطابق، نام پنجره، نام آیکون، کلاس (class) و منبع (resource) مد نظر قرار میگیرند. هر نام میتواند شامل نویسههای عمومی (wildcard) \*(Aq*\*(Aq و \*(Aq?\*(Aq باشد و میتواند از دو یا چند جایگزین تشکیل شود که با نویسه \*(Aq|\*(Aq (که بهعنوان عملگر OR عمل میکند) از یکدیگر جدا شدهاند. (در صورت استفاده از عملگرهای OR، نباید با فاصله از نامها جدا شوند.) هر نام پنجره میتواند با \*(Aq!\*(Aq شروع شود، که در صورت تطابق هر یک از نام پنجره، نام آیکون، کلاس یا منبع، از اجرای \fIcommand\fP جلوگیری میکند. با این حال، \*(Aq!\*(Aq نباید برای تکتک نامها در گروهی که با عملگرهای OR جدا شدهاند اعمال شود؛ بلکه فقط میتواند در ابتدای گروه قرار گیرد، و در آن صورت روی کل گروه عمل خواهد کرد.
.sp
مثالها:
.sp
.if n .RS 4
.nf
.fam C
Next ("Netscape|konqueror|Mozilla*") WarpToWindow 99 90
.fam
.fi
.if n .RE
.sp
این دستور بدون در نظر گرفتن اینکه کدامیک از سه مرورگر وب نامبرده در حال استفاده است، به پنجره مرورگر وب بعدی میرود.
.sp
.if n .RS 4
.nf
.fam C
Next ("Mozilla*", "Bookmark*") WarpToWindow 99 90
.fam
.fi
.if n .RE
.sp
این دستور به پنجره مدیریت بوکمارک Mozilla میرود و سایر پنجرههای Mozilla و پنجرههای بوکمارک مرورگرهای دیگر را نادیده میگیرد.
.sp
.if n .RS 4
.nf
.fam C
All ("XTerm|rxvt", !console) Iconify
.fam
.fi
.if n .RE
.sp
این دستور تمام پنجرههای xterm و rxvt در صفحه جاری را به آیکون تبدیل میکند (Iconify)، بهجز پنجرهای به نام "console" (با گزینه \-name در xterm) که مستثنی میشود.
.sp
.if n .RS 4
.nf
.fam C
Next (!"FvwmPager|FvwmForm*|FvwmButtons") Raise
Next (!FvwmPager, !FvwmForm*, !FvwmButtons) Raise
.fam
.fi
.if n .RE
.sp
این دو دستور معادل یکدیگرند؛ هر یک از آنها پنجره بعدی را که جزو ماژولهای نامبرده fvwm نباشد، بالا میآورد (Raise).
.sp
هر شرطی را میتوان با قرار دادن یک علامت تعجب (\*(Aq!\*(Aq) درست در جلوی نام آن، نقیض کرد.
.sp
\fIAcceptsFocus\fP, \fIAnyScreen\fP, \fICirculateHit\fP, \fICirculateHitIcon\fP,
\fICirculateHitShaded\fP, \fIClosable\fP, \fICurrentDesk\fP, \fICurrentGlobalPage\fP,
\fICurrentGlobalPageAnyDesk\fP, \fICurrentPage\fP, \fICurrentPageAnyDesk\fP,
\fICurrentScreen\fP, \fIDesk\fP, \fIFixedPosition\fP, \fIFixedSize\fP, \fIFocused\fP,
\fIHasBorders\fP, \fIHasHandles\fP, \fIHasPointer\fP, \fIHasTitle\fP, \fITitleAtTop\fP,
\fITitleAtBottom\fP, \fITitleAtLeft\fP, \fITitleAtRight\fP, \fIIconic\fP,
\fIIconifiable\fP, \fILayer [n]\fP, \fIMaximizable\fP, \fIMaximized\fP, \fIOverlapped\fP,
\fIPlacedByButton n\fP, \fIPlacedByButton3\fP, \fIPlacedByFvwm\fP, \fIRaised\fP, \fIShaded\fP,
\fIState n\fP, \fISticky\fP, \fIStickyAcrossDesks\fP, \fIStickyAcrossPages\fP, \fIStickyIcon\fP,
\fIStickyAcrossDesksIcon\fP, \fIStickyAcrossPagesIcon\fP, \fITransient\fP,
\fIVisible\fP.
.sp
شرط \fIAcceptsFocus\fP تمام پنجرههایی را که فوکوس ورودی را نمیخواهند (برنامه، "Input hints" پنجره را روی False تنظیم کرده است) و از گزینه \fILenience\fP در دستور \fBStyle\fP استفاده نمیکنند، مستثنی میکند. همچنین تمام پنجرههایی که از سبک \fINeverFocus\fP استفاده میکنند نادیده گرفته میشوند. توجه: \fI!Lenience\fP معادل گزینه منسوخشده \fINoLenience\fP است.
.sp
با استفاده از شرط \fIAnyScreen\fP همراه با هر یک از شرایط \fICurrent.\|.\|.\fP، پنجرههایی که با صفحهنمایش حاوی اشارهگر ماوس تلاقی ندارند نیز برای بررسی تطابق در نظر گرفته میشوند. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
# Focus next window on current page,
# regardless of screen
Next (CurrentPage, AnyScreen) Focus
.fam
.fi
.if n .RE
.sp
گزینههای \fICirculateHit\fP و \fICirculateHitIcon\fP ویژگیهای \fBStyle\fP مربوط به \fICirculateSkip\fP و \fICirculateSkipIcon\fP را برای پنجرههای عادی یا آیکونی نادیده میگیرند. گزینه \fICirculateHitShaded\fP ویژگی \fICirculateSkipShaded\fP در \fBStyle\fP را بازنویسی میکند. هر سه گزینه بهطور پیشفرض برای دستور \fBCurrent\fP فعال هستند. میتوان آنها را با مشخص کردن صریح \fI!CirculateHit\fP و غیره خاموش کرد. توجه: این شرایط را با گزینههای سبک همنام اشتباه نگیرید. بهطور مشخص،
.sp
.if n .RS 4
.nf
.fam C
Style foo CirculateSkip
Next (foo, CirculateHit) ...
.fam
.fi
.if n .RE
.sp
با مورد زیر یکسان نیست:
.sp
.if n .RS 4
.nf
.fam C
Style foo CirculateHit ...
Next (foo)
.fam
.fi
.if n .RE
.sp
مورد نخست پنجرههایی با نام foo را تنها در دستور Next انتخاب میکند. در مثال دوم، این پنجرهها همواره در تمام دستورهای شرطی مطابقت داده میشوند.
.sp
شرط \fIClosable\fP تنها با پنجرههایی مطابقت دارد که اجازه بسته شدن دارند.
.sp
شرط \fICurrentDesk\fP تنها با پنجرههایی مطابقت دارد که روی میزکار (desk) جاری قرار دارند.
.sp
شرط \fICurrentGlobalPage\fP تنها با پنجرههایی مطابقت دارد که روی صفحه جاری از میزکار جاری قرار دارند، بدون در نظر گرفتن اینکه پنجره روی کدام صفحهنمایش واقع شده است. این شرط بهطور ضمنی شرط \fICurrentDesk\fP را فعال میکند.
.sp
شرط \fICurrentGlobalPageAnyDesk\fP تنها با پنجرههایی مطابقت دارد که روی صفحه جاری از هر میزکاری قرار دارند، بدون در نظر گرفتن صفحهنمایش RandR.
.sp
شرط \fICurrentPage\fP تنها با پنجرههایی مطابقت دارد که روی صفحه جاری از میزکار جاری قرار دارند. این شرط بهطور ضمنی شرط \fICurrentDesk\fP را فعال میکند.
.sp
شرایط \fICurrentPageAnyDesk\fP و \fICurrentScreen\fP تنها با پنجرههایی مطابقت دارند که روی صفحه جاری از هر میزکاری قرار گرفتهاند.
.sp
شرط \fIScreen [name]\fP تنها با پنجرههایی مطابقت دارد که روی صفحهنمایش مشخصشده قرار دارند..sp
شرط \fIDesk [n]\fP تنها با پنجرههایی مطابقت دارد که روی
میزکار (desk) مشخصشده قرار دارند.
.sp
شرط \fIFixedPosition\fP تمام پنجرههایی را که موقعیت ثابتی ندارند،
چه از طریق اشارات (hints) مدیر پنجره (WM) و چه با گزینهٔ \fBStyle\fP
یعنی \fIFixedPosition\fP تنظیم شده باشند، مستثنی میکند. مثال:
.sp
.if n .RS 4
.nf
.fam C
DestroyFunc ToggleFixedGeometry
AddToFunc\& ToggleFixedGeometry
+ I Pick (FixedPosition) \(rs
WindowStyle VariablePosition, VariableSize
+ I TestRc (NoMatch) WindowStyle FixedPosition, FixedSize
.fam
.fi
.if n .RE
.sp
شرط \fIFixedSize\fP تمام پنجرههایی را که اندازهٔ ثابتی ندارند،
چه از طریق اشارات مدیر پنجره و چه با گزینهٔ \fBStyle\fP یعنی
\fIFixedSize\fP تنظیم شده باشند، مستثنی میکند.
.sp
شرط \fIFocused\fP با پنجرهای مطابقت دارد که در حال حاضر فوکوس
صفحهکلید را در اختیار دارد. این شرط برای دستور \fBCurrent\fP مفید نیست،
اما میتواند با سایر دستورات شرطی استفاده شود.
.sp
شرط \fIHasBorders\fP تمام پنجرههایی را که فاقد حاشیه هستند، مستثنی میکند.
.sp
شرط \fIHasHandles\fP تمام پنجرههایی را که فاقد دستگیرههای
تغییر اندازه هستند، مستثنی میکند.
.sp
شرط \fIHasPointer\fP تمام پنجرههایی را که نشانگر ماوس درون آنها
قرار ندارد، مستثنی میکند.
.sp
شرط \fIHasTitle\fP تمام پنجرههایی را که فاقد نوار عنوان هستند، مستثنی میکند.
.sp
شرطهای \fITitleAtTop\fP، \fITitleAtBottom\fP، \fITitleAtLeft\fP و \fITitleAtRight\fP
وجود نوار عنوان را در آن موقعیت از پنجره بررسی میکنند.
.sp
شرط \fIIconic\fP تنها با پنجرههای آیکونشده (iconic) مطابقت دارد.
.sp
شرط \fIIconifiable\fP تنها با پنجرههایی مطابقت دارد که اجازهٔ
آیکونشدن دارند.
.sp
شرط \fILayer [n]\fP تنها با پنجرههای موجود در لایهٔ مشخصشده مطابقت دارد.
آرگومان اختیاریِ شرط \fILayer\fP بهطور پیشفرض لایهٔ پنجرهٔ دارای فوکوس
است. نقیض آن یعنی \fI!Layer\fP شرط \fILayer\fP را غیرفعال میکند.
.sp
شرط \fIMaximizable\fP تنها با پنجرههایی مطابقت دارد که اجازهٔ
بیشینهشدن دارند.
.sp
شرط \fIMaximized\fP تنها با پنجرههای بیشینهشده مطابقت دارد.
.sp
شرط \fIOverlapped\fP تنها با پنجرههایی مطابقت دارد که توسط پنجرههای دیگر
در همان لایه همپوشانی شدهاند (یا پنجرههای مدیریتنشده در صورتی که از گزینهٔ
\fIRaiseOverUnmanaged\fP در دستور \fBBugOpts\fP استفاده شده باشد). توجه داشته باشید
که این شرط در صورت وجود پنجرههای زیاد یا در صورت استفاده از
RaiseOverUnmanaged و کند بودن اتصال به کارساز X، میتواند کند باشد.
.sp
شرط \fIPlacedByButton n\fP زمانی برقرار میشود که آخرین جابهجایی
تعاملی پنجره (با دستور \fBMove\fP یا بهصورت \fIManualPlacement\fP)
با فشردن دکمهٔ ماوس \fIn\fP پایان یافته باشد. مثال:
.sp
.if n .RS 4
.nf
.fam C
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
.fam
.fi
.if n .RE
.sp
شرط \fIPlacedByButton3\fP همان معنای \fIPlacedByButton\fP 3 را دارد.
این شرط تنها برای سازگاری با نسخههای قبلی باقی مانده است.
.sp
شرط \fIPlacedByFvwm\fP تمام پنجرههایی را که بهصورت دستی یا با
استفاده از اشارهٔ موقعیت کاربر یا برنامه جایگذاری شدهاند، مستثنی میکند.
.sp
شرط \fIRaised\fP تنها با پنجرههایی مطابقت دارد که کاملاً در
درگاهدید (viewport) فعلی قابل مشاهده هستند و توسط هیچ پنجرهٔ دیگری همپوشانی نشدهاند.
.sp
شرط \fIShaded\fP تنها با پنجرههای سایهخورده/جمعشده مطابقت دارد (دستور
\fBWindowShade\fP را ببینید).
.sp
شرطهای \fIState n\fP یا \fI!State n\fP تنها با پنجرههایی مطابقت دارند که
وضعیت عدد صحیح مشخصشده در آنها تنظیم (یا لغو تنظیم) شده باشد. برای
جزئیات به دستور \fBState\fP مراجعه کنید. آرگومان میتواند در بازهٔ 0 تا 31 باشد.
.sp
شرطهای \fISticky\fP، \fIStickyAcrossDesks\fP و \fIStickyAcrossPages\fP تنها با
پنجرههایی مطابقت دارند که در حال حاضر چسبان (sticky)، چسبان در تمام میزکارها
یا چسبان در تمام صفحات هستند. لطفاً برای جزئیات به گزینههای \fBStyle\fP با همین
نام و دستورات \fBStick\fP، \fBStickAcrossDesks\fP و
\fBStickAcrossPages\fP مراجعه کنید.
.sp
شرطهای \fIStickyIcon\fP، \fIStickyAcrossDesksIcon\fP و \fIStickyAcrossPagesIcon\fP
تنها با پنجرههایی مطابقت دارند که در وضعیت آیکونشده، چسبان،
چسبان در تمام میزکارها یا چسبان در تمام صفحات میشوند.
.sp
شرط \fITransient\fP تنها با پنجرههایی مطابقت دارد که ویژگی
«transient» توسط برنامه برای آنها تنظیم شده است. این حالت معمولاً
برای منوهای جهنده (popup) و کادرهای محاورهای برنامهها صادق است. ماژول \fBFvwmIdent\fP
میتواند برای فهمیدن اینکه آیا پنجرهای خاص transient است یا خیر استفاده شود.
.sp
شرط \fIVisible\fP تنها با پنجرههایی مطابقت دارد که دستکم بهطور
جزئی در درگاهدید (viewport) فعلی قابل مشاهده هستند و بهطور کامل
توسط پنجرههای دیگر همپوشانی نشدهاند.
.RE.SS "دستورهای پودمان (Module Commands)"
.sp
Fvwm پایگاه دادهای از خطوط پیکربندی پودمان را به شکل زیر نگهداری میکند:
.sp
.if n .RS 4
.nf
.fam C
*:
.fam
.fi
.if n .RE
.sp
که در آن \fI\fP یا نام واقعی پودمان و یا یک نام مستعار (alias) است.
.sp
این پایگاه داده در ابتدا از فایل پیکربندی (یا از خروجی دستور پیکربندی \fB\-cmd\fP) پر میشود و بعداً میتواند توسط کاربر (از طریق \fBFvwmCommand\fP) یا توسط پودمانها تغییر یابد.
.sp
هنگامی که پودمانها اجرا میشوند، بخش مربوط به خود را از پایگاه داده میخوانند. (مفهوم این پایگاه داده شبیه به پایگاه داده منابع در سامانه X است).
.sp
دستورهای کار با پایگاه داده پیکربندی پودمان در زیر شرح داده شدهاند.
.sp
\fB*\fP \fImodule_config_line\fP
.RS 4
پیکربندی یک پودمان را تعریف میکند. \fImodule_config_line\fP از یک نام پودمان (یا نام مستعار پودمان) و یک خط منبع پودمان تشکیل شده است. ساختار نوشتاری جدید اجازه میدهد یک جداکننده یعنی دونقطه و فاصلههای اختیاری بین نام پودمان و بقیه خط قرار گیرد؛ این کار برای جلوگیری از تداخل توصیه میشود.
.sp
.if n .RS 4
.nf
.fam C
*FvwmPager: WindowBorderWidth 1
*FvwmButtons\-TopRight: Geometry 100x100\-0+0
*FvwmButtons\-Bottom: Geometry +0\-0
.fam
.fi
.if n .RE
.RE
.sp
\fBDestroyModuleConfig\fP \fImodule_config\fP
.RS 4
مدخلهای پیکربندی پودمان را حذف میکند تا بتوان خطوط پیکربندی جدید را به جای آنها وارد کرد. این کار گاهی اوقات تنها راه برای بازگرداندن برخی از تنظیمات پودمان است که قبلاً تعریف شدهاند. این دستور نحوه اجرای یک پودمان در طول یک نشست fvwm را بدون راهاندازی مجدد تغییر میدهد. همچنین میتوان از نویسههای عمومی (wildcards) برای بخشهایی از نام استفاده کرد.
.sp
ساختار نوشتاری جدیدِ بدون تداخل اجازه میدهد یک جداکننده یعنی دونقطه و فاصلههای اختیاری بین نام پودمان و بقیه خط قرار گیرد. در این حالت نام پودمان (یا نام مستعار) نمیتواند شامل نویسههای عمومی باشد.
.sp
.if n .RS 4
.nf
.fam C
DestroyModuleConfig FvwmButtons*
DestroyModuleConfig FvwmForm: Fore
DestroyModuleConfig FvwmIconMan: Tips*
.fam
.fi
.if n .RE
.RE
.sp
\fBKillModule\fP \fImodulename\fP [\fImodulealias\fP]
.RS 4
باعث متوقف کردن (kill) پودمانی میشود که با نام \fImodulename\fP فراخوانی شده بود. نام میتواند شامل نویسههای عمومی باشد. اگر \fImodulealias\fP مشخص شده باشد، تنها پودمانهایی که با نام مستعار مشخصشده اجرا شدهاند متوقف میشوند.
.sp
.if n .RS 4
.nf
.fam C
# kill all pagers
KillModule FvwmPager
Module FvwmEvent SoundEvent
KillModule FvwmEvent SoundEvent
.fam
.fi
.if n .RE
.RE
.sp
\fBModule\fP \fImodulename\fP [\fImoduleparams\fP]
.RS 4
پودمان و پارامترهای اختیاری آن را که باید اجرا شوند مشخص میکند. در حال حاضر چندین پودمان، از جمله \fBFvwmButtons\fP، \fBFvwmEvent\fP، \fBFvwmForm\fP، \fBFvwmPager\fP و \fBFvwmScript\fP از نامهای مستعار پشتیبانی میکنند. نامهای مستعار زمانی مفید هستند که قرار باشد بیش از یک نمونه از پودمان اجرا شود. نامهای مستعار را میتوان به طور جداگانه با استفاده از ساختار \fB*\fP پیکربندی کرد. برای شروع یک پودمان \fBFvwmForm\fP با استفاده از نام مستعار \fIMyForm\fP، میتوان از ساختار دستوری زیر استفاده کرد:
.sp
.if n .RS 4
.nf
.fam C
Module FvwmForm MyForm
.fam
.fi
.if n .RE
.sp
در حال حاضر پودمانهای موجود (همراه با fvwm) عبارتند از \fBFvwmAnimate\fP (ایجاد جلوههای پویانمایی هنگامی که پنجرهای کوچک یا بزرگ میشود)، \fBFvwmAuto\fP (پودمان بالا آوردن خودکار پنجره)، \fBFvwmBacker\fP (برای تغییر پسزمینه هنگام تغییر میزکارها)، \fBFvwmBanner\fP (برای نمایش یک تصویر چشمنواز XBM، XPM، PNG یا SVG)، \fBFvwmButtons\fP (یک نوار ابزار قابل سفارشیسازی ایجاد میکند)، \fBFvwmPrompt\fP (برای اجرای مستقیم دستورهای fvwm)، \fBFvwmEvent\fP (راهاندازی کنشهای گوناگون بر اساس رویدادها)، \fBFvwmForm\fP (برای نمایش کادرهای محاورهای)، \fBFvwmIconMan\fP (یک مدیر آیکون انعطافپذیر)، \fBFvwmIdent\fP (برای دریافت اطلاعات پنجره)، \fBFvwmPager\fP (یک نسخه مینیاتوری از میزکار)، \fBFvwmPerl\fP (یک دستکاریکننده و پیشپردازنده Perl)، \fBFvwmProxy\fP (برای یافتن و کنترل پنجرههای پوشاندهشده با استفاده از پنجرههای پروکسی کوچک)، \fBFvwmRearrange\fP (برای مرتبسازی دوباره پنجرهها)، \fBFvwmScript\fP (یکی دیگر از ابزارهای قدرتمند کادر محاوره). این پودمانها هر کدام صفحه راهنمای اختصاصی خود را دارند. پودمانهای دیگری نیز ممکن است در دسترس باشند.
.sp
پودمانها میتوانند برنامههای گذرا و کوتاهمدت باشند، یا مانند \fBFvwmButtons\fP در تمام طول مدت نشست X باقی بمانند. پودمانها در صورت امکان قبل از راهاندازیهای مجدد و خروجها توسط مدیر پنجره متوقف میشوند. بخش مقدماتی پودمانها را ببینید. در صورتی که \fImodulename\fP با تمام دستورهای fvwm متمایز باشد، کلیدواژه \fBModule\fP میتواند حذف شود.
.RE
.sp
\fBModuleListenOnly\fP \fImodulename\fP [\fImoduleparams\fP]
.RS 4
این دستور مانند دستور \fBModule\fP عمل میکند، اما fvwm هرگز هیچ پیامی به پودمان ارسال نمیکند. این ویژگی ممکن است برای نوشتن یک پودمان به عنوان اسکریپت شل که با رویدادهای خارجی تحریک میشود، بدون زحمت پاسخ دادن به بستههای ارسالشده توسط fvwm مفید باشد. به عنوان مثال، پودمانی که به عنوان اسکریپت شل نوشته شده است میتواند برچسبهای پودمان \fBFvwmButtons\fP را تغییر دهد تا یک ساعت ساده پیادهسازی شود.
.RE
.sp
\fBModulePath\fP \fIpath\fP
.RS 4
فهرستی از دایرکتوریهای جداشده با دونقطه را مشخص میکند که باید برای یافتن پودمانها جستجو شوند. برای یافتن یک پودمان، fvwm هر دایرکتوری را به نوبت جستجو کرده و از اولین فایل پیداشده استفاده میکند. نام دایرکتوریها در این فهرست نیازی به اسلش در انتها ندارند.
.sp
متغیر \fBModulePath\fP میتواند شامل متغیرهای محیطی نظیر \fI$HOME\fP (یا \fI${HOME}\fP) باشد. علاوه بر این، یک \*(Aq+\*(Aq در \fIpath\fP به مقدار قبلی \fIpath\fP بسط داده میشود که امکان افزودن آسان به انتها یا ابتدای \fIpath\fP را فراهم میسازد.
.sp
به عنوان مثال:
.sp
.if n .RS 4
.nf
.fam C
ModulePath ${HOME}/lib/fvwm/modules:+
.fam
.fi
.if n .RE
.sp
دایرکتوری حاوی پودمانهای استاندارد از طریق متغیر محیطی \fI$FVWM_MODULEDIR\fP در دسترس است.
.RE
.sp
\fBModuleSynchronous\fP [Expect \fIstring\fP] [Timeout \fIsecs\fP] \fImodulename\fP
.RS 4
دستور \fBModuleSynchronous\fP بسیار شبیه به \fBModule\fP است. Fvwm پردازش هرگونه دستور و ورودی کاربر را متوقف میکند تا زمانی که پودمان رشتهای را که با "NOP FINISHED STARTUP" آغاز میشود به fvwm بازگرداند. اگر گزینه اختیاری \fITimeout\fP مشخص شده باشد، در صورتی که پودمان به مدت \fIsecs\fP ثانیه هیچ ورودی به fvwm ارسال نکند، fvwm انصراف میدهد. اگر گزینه \fIExpect\fP مشخص شده باشد، fvwm به جای آن منتظر \fIstring\fP دادهشده میماند. \fBModuleSynchronous\fP تنها باید در طول راهاندازی fvwm برای اعمال ترتیبی که پودمانها در آن شروع میشوند استفاده شود. این دستور برای استفاده با پودمانی (در حال حاضر فرضی) در نظر گرفته شده است که باید قبل از شروع سایر پودمانها آماده به کار باشد.
.sp
\fBهشدار\fP: قفل کردن fvwm با این دستور بسیار آسان است، حتی اگر زمان انتظاری (timeout) تعیین شده باشد. در انتخاب رشتهای که قرار است منتظرش بمانید نهایت دقت را به کار ببرید. اگرچه تمامی پودمانهای موجود در توزیع fvwm پس از راهاندازی درست رشته "NOP FINISHED STARTUP" را بازمیگردانند، اما ممکن است در مورد پودمانهای شخص ثالث اینگونه نباشد. علاوه بر این، میتوانید با استفاده از توالی کلیدهای زیر برای رهایی از یک دستور قفلشده \fBModuleSynchronous\fP تلاش کنید.sp
(به \fBEscapeFunc\fP مراجعه کنید).
.RE
.sp
\fBModuleTimeout\fP \fItimeout\fP
.RS 4
مشخص میکند که fvwm چند ثانیه منتظر پاسخ یک ماژول بماند. اگر ماژول در این محدوده زمانی پاسخ ندهد، fvwm آن را خاتمه میدهد (kill میکند). مقدار \fItimeout\fP باید بزرگتر از صفر باشد، در غیر این صورت به مقدار پیشفرض ۳۰ ثانیه بازنشانی میشود.
.RE
.sp
\fBSendToModule\fP \fImodulename\fP \fIstring\fP
.RS 4
یک رشته دلخواه (بدون نیاز به علامت نقلقول) را به تمام ماژولهایی که نام یا نام مستعار آنها با \fImodulename\fP مطابقت دارد ارسال میکند، که میتواند شامل نویسههای عام (wildcards) نیز باشد. البته این دستور تنها زمانی معنا دارد که ماژول برای درک و کار با این رشتهها پیکربندی شده باشد. این دستور میتواند برای ارتباط ماژول با ماژول، یا پیادهسازی دستورهای پیچیدهتر در ماژولها استفاده شود.
.RE
.SS "دستورهای مدیریت نشست (Session Management Commands)"
.sp
\fBQuit\fP
.RS 4
از fvwm خارج میشود که معمولاً باعث خروج از X نیز خواهد شد.
.RE
.sp
\fBRestart\fP [\fIwindow_manager\fP [\fIparams\fP]]
.RS 4
در صورتی که \fIwindow_manager\fP خالی گذاشته شود باعث راهاندازی مجدد خود fvwm میشود، و در صورت مشخص شدن \fIwindow_manager\fP، به یک مدیر پنجره دیگر (یا نسخه دیگری از fvwm) جابهجا میشود. اگر مدیر پنجره در مسیر جستجوی پیشفرض شما قرار ندارد، باید از نام مسیر کامل برای \fIwindow_manager\fP استفاده کنید.
.sp
این دستور نباید در انتها علامت اَمپرسند (&) داشته باشد. دستور میتواند پارامترهای اختیاری با نحو ساده شبیه به شل داشته باشد. میتوانید از \fI~\fP (که به دایرکتوری خانگی کاربر گسترش مییابد) و متغیرهای محیطی \fI$VAR\fP یا \fI${VAR}\fP استفاده کنید. در اینجا چند مثال آمده است:
.sp
.if n .RS 4
.nf
.fam C
Key F1 R N Restart
Key F1 R N Restart fvwm1 \-f .fvwmrc
Key F1 R N Restart xterm \-n \*(Aq"X console"\*(Aq \-T \(rs"X\(rs console\(rs" \-e fvwm
.fam
.fi
.if n .RE
.sp
توجه داشته باشید که در حال حاضر در نمایشگرهای چندسَره (multi-headed)، راهاندازی مجدد fvwm روی صفحههای مختلف بهطور مستقل عمل میکند.
.RE
.sp
\fBRestart\fP \fB\-\-pass\-args\fP \fIwindow_manager\fP
.RS 4
مشابه \fBRestart\fP بدون پارامتر است، با این تفاوت که نام مدیر پنجره فعلی با \fIwindow_manager\fP مشخصشده جایگزین شده و آرگومانهای اصلی حفظ میشوند.
.RE
.sp
\fBRestart\fP \fB\-\-dont\-preserve\-state\fP [\fIother\-params\fP]
.RS 4
مشابه دستور زیر عمل میکند:
.sp
.if n .RS 4
.nf
.fam C
Restart [other\-params]
.fam
.fi
.if n .RE
.sp
اما هیچکدام از وضعیتهای پنجرهها را در طول راهاندازی مجدد ذخیره نمیکند.
.sp
بدون این گزینه، \fBRestart\fP وضعیتهای مربوط به اکثر پنجرهها را با نوشتن در فایلی به نام \fI.fs\-restart\-$HOSTDISPLAY\fP در دایرکتوری خانگی کاربر حفظ میکند.
.RE
.sp
\fBSaveSession\fP
.RS 4
باعث میشود مدیر نشست (در صورت وجود) نشست فعلی را ذخیره کند. این دستور برای xsm کار نمیکند؛ به نظر میرسد xsm این قابلیت را پیادهسازی نکرده است. برای مدیریت xsm از راه دور از سیگنالهای یونیکس استفاده کنید.
.RE
.sp
\fBSaveQuitSession\fP
.RS 4
باعث میشود مدیر نشست (در صورت وجود) ابتدا نشست را ذخیره کرده و سپس آن را ببندد. این دستور برای xsm کار نمیکند؛ به نظر میرسد xsm این قابلیت را پیادهسازی نکرده است. برای مدیریت xsm از راه دور از سیگنالهای یونیکس استفاده کنید.
.RE.SS "مجموعههای رنگ (Colorsets)"
.sp
مجموعهرنگها (Colorsets) روشی قدرتمند برای واپایش رنگها هستند. مجموعهرنگها منابع ظاهری مشترکی را میان fvwm و ماژولهای آن ایجاد میکنند. هنگامی که یک مجموعهرنگ تغییر مییابد، تمام بخشهای fvwm به آن تغییر واکنش نشان میدهند. یک مجموعهرنگ شامل رنگ پیشزمینه، رنگ پسزمینه، رنگ سایه و برجستگی (اغلب بر پایهٔ رنگ پسزمینه)، و جلوهٔ پسزمینه (شامل تصاویر و انواع گرادیانها) است. روشی نیز برای جلوهبخشی پسزمینه و تعیین سایر عملیاتهای رنگی وجود دارد.
.sp
\fBColorset\fP \fInum\fP [\fIoptions\fP]
.RS 4
مجموعهرنگ \fInum\fP را ایجاد یا ویرایش میکند. مجموعهرنگها با این شماره شناسایی میشوند. این شماره میتواند از صفر شروع شود و عددی بسیار بزرگ باشد.
.sp
هشدار: بالاترین شمارهٔ مجموعهرنگِ استفادهشده، میزان مصرف حافظه را تعیین میکند. بنابراین، اگر \*(AqColorset 100000\*(Aq را تعریف کنید، حافظهٔ مورد نیاز برای ۱۰۰۰۰۱ مجموعهرنگ مصرف خواهد شد. شمارههای مجموعهرنگ خود را تا حد ممکن کوچک نگه دارید.
.sp
بر طبق قرارداد، مجموعهرنگها به این شکل شمارهگذاری میشوند:
.sp
.if n .RS 4
.nf
.fam C
# 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
.fam
.fi
.if n .RE
.sp
اگر به رنگهای بیشتری نیاز دارید و نمیخواهید چرخ را دوباره اختراع کنید، میتوانید از قرارداد مورد استفاده در fvwm\-themes بهره ببرید؛ این قرارداد معنای ۴۰ مجموعهرنگ اول را تقریباً برای تمام اهداف تعیین میکند:
.sp
.URL "http://fvwm\-themes.sourceforge.net/doc/colorsets" "" ""
.sp
هر مجموعهرنگ دارای چهار رنگ، یک pixmap اختیاری و یک mask شکل اختیاری است. این چهار رنگ توسط ماژولها بهعنوان رنگهای پیشزمینه، پسزمینه، برجستگی و سایه به کار میروند. زمانی که یک مجموعهرنگ ایجاد میشود، رنگ پیشزمینه بهطور پیشفرض سیاه و پسزمینه خاکستری است. پیشزمینه و پسزمینه بهعنوان «average» و «contrast» نشانهگذاری میشوند (در ادامه ببینید) تا تعیین یک pixmap یا گرادیان بهتنهایی نتایج معقولی تولید کند.
.sp
\fIoptions\fP فهرستی جداشده با کاما شامل برخی از کلیدواژههای زیر است:
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.
.sp
گزینههای \fIfg\fP، \fIFore\fP و \fIForeground\fP یک نام رنگ را بهعنوان آرگومان گرفته و رنگ پیشزمینه را تنظیم میکنند. نام ویژهٔ \fIContrast\fP میتواند برای انتخاب رنگی که کنتراست مناسبی با رنگ پسزمینه دارد استفاده شود. برای بازنشانی رنگ پیشزمینه به مقدار پیشفرض، میتوانید بهسادگی نام رنگ را حذف کنید.
.sp
گزینههای \fIbg\fP، \fIBack\fP و \fIBackground\fP یک نام رنگ را بهعنوان آرگومان گرفته و رنگ پسزمینه را تنظیم میکنند. این گزینهها همچنین رنگهای برجستگی و سایه را روی مقادیری قرار میدهند که جلوهای سهبعدی ایجاد کنند، مگر اینکه این مقادیر با گزینههای زیر صریحاً مشخص شده باشند. نام ویژهٔ \fIAverage\fP میتواند برای انتخاب رنگی به کار رود که رنگ میانگین pixmap است. اگر pixmap با گزینهٔ \fITint\fP دارای تهرنگ شده باشد، این تهرنگ در محاسبهٔ رنگ میانگین در نظر گرفته نمیشود. برای بهدست آوردن رنگ میانگین «واقعی» باید از گزینهٔ \fIbgTint\fP استفاده کنید. در صورت حذف نام رنگ، رنگ پسزمینه به مقدار پیشفرض بازنشانی میشود.
.sp
گزینههای \fIhi\fP، \fIHilite\fP و \fIHilight\fP یک نام رنگ را بهعنوان آرگومان دریافت کرده و رنگ برجستگی را مشخص میکنند. اگر رنگ برجستگی صریحاً تنظیم نشده باشد، پیشفرض محاسبهٔ آن از روی رنگ پسزمینه است. برای بازگشت به رفتار پیشفرض، نام رنگ را میتوان حذف کرد.
.sp
گزینههای \fIsh\fP، \fIShade\fP و \fIShadow\fP یک نام رنگ را بهعنوان آرگومان دریافت کرده و رنگ سایه را تنظیم میکنند. اگر رنگ سایه صریحاً تعیین نشده باشد، پیشفرض محاسبهٔ آن از روی رنگ پسزمینه است. برای بازگشت به رفتار پیشفرض، نام رنگ را میتوان حذف کرد.
.sp
گزینهٔ \fIfgsh\fP یک نام رنگ را بهعنوان آرگومان دریافت کرده و رنگ مورد استفاده در جلوهٔ سایهدار کردن قلم را مشخص میکند. بخش \fBFont Shadow Effects\fP در صفحهٔ راهنمای fvwm را ببینید. بهطور پیشفرض این رنگ از روی رنگهای پیشزمینه و پسزمینه محاسبه میشود. برای بازگشت به حالت پیشفرض، میتوان نام رنگ را حذف کرد.
.sp
گزینههای \fIPixmap\fP، \fITiledPixmap\fP و \fIAspectPixmap\fP یک نام فایل را بهعنوان آرگومان گرفته، در \fBImagePath\fP جستجو کرده و آن را بهعنوان pixmap پسزمینه به کار میبرند. بخشهای شفاف با رنگ پسزمینه پر میشوند. تعیین نکردن نام فایل هر تصویر موجود را از مجموعهرنگ حذف میکند. گزینهٔ \fITiledPixmap\fP نسخههای تکرارشونده از تصویر را بدون مقیاسبندی تولید میکند، \fIPixmap\fP باعث میشود تصویر کشیده شود تا با هر شیئی که مجموعهرنگ روی آن اعمال شده متناسب گردد، و \fIAspectPixmap\fP آن را با حفظ نسبت ابعاد تصویر، برای برازش میکشد.
.sp
گزینهٔ \fITransparent\fP یک pixmap پسزمینهٔ شفاف ایجاد میکند. این pixmap بهعنوان پسزمینهٔ پنجره برای دستیابی به شفافیت نسبت به ریشه (root transparency) استفاده میشود. برای این کار باید از گزینهٔ \fIParentalRelativity\fP در دستور \fBStyle\fP استفاده کنید. تغییر بعدی پسزمینهٔ ریشه ممکن است تشخیص داده شود یا خیر؛ این موضوع به برنامهای بستگی دارد که برای تنظیم پسزمینه استفاده میشود. اگر از \fBfvwm\-root\fP، \fBxsetbg\fP (xli)، \fBFvwmBacker\fP با رنگهای یکدست یا رنگهای مجموعهرنگ، یا نسخههای جدید \fBEsetroot\fP (>= 9.2) استفاده کنید، تغییر پسزمینه تشخیص داده میشود. اگر تغییرات پسزمینه تشخیص داده نشود (مثلاً اگر از \fBxv\fP یا \fBxsetroot\fP استفاده کنید)، میتوانید با استفاده از گزینهٔ \fB\-d\fP در fvwm\-root تشخیص را اجبار کنید:
.sp
.if n .RS 4
.nf
.fam C
xv \-root \-quit mybg.png; fvwm\-root \-d
.fam
.fi
.if n .RE
.sp
به دلیل شیوهٔ پیادهسازی شفافیت در سامانهٔ X، هیچ تضمینی وجود ندارد که جلوهٔ مورد نظر حاصل شود. ممکن است برنامه حتی از کار بیفتد (crash کند). اگر با این گزینه مشکلی دارید، از آن استفاده نکنید.
.sp
استفاده از جابهجایی و تغییر اندازهٔ خطوط پیرامونی (outline) (دستور \fBOpaqueMoveSize\fP و گزینهٔ \fBStyle\fP با نام \fIResizeOpaque\fP را ببینید) و همچنین تنظیم سبک \fIWindowShadeShrinks\fP میتواند کمککننده باشد. شفافیت حاصلشده با \fITransparent\fP به این بستگی دارد که مجموعهرنگ روی پیشزمینه یا پسزمینهٔ پنجره اعمال شده باشد. در حالت دوم، شفافیت نسبت به پنجرهٔ والدِ پنجرهای است که مجموعهرنگ روی آن تعریف شده است. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
Colorset 12 VGradient 200 grey30 grey60
Colorset 17 Transparent
*FvwmIconMan: Colorset 12
*FvwmIconMan: PlainColorset 17
.fam
.fi
.if n .RE
.sp
یک IconMan با پسزمینهٔ گرادیان عمودی خاکستری تولید میکند و دکمهها (بهوسیلهٔ شفافیت) از پسزمینه استفاده میکنند. برای داشتن یک IconMan شفاف (نسبت به root):
.sp
.if n .RS 4
.nf
.fam C
Colorset 12 Transparent
Colorset 17 Transparent
Colorset 18 Transparent
Colorset 19 Transparent
*FvwmIconMan: Colorset 12
*FvwmIconMan: PlainColorset 17
*FvwmIconMan: FocusColorset 18
*FvwmIconMan: IconColorset\& 19
.fam
.fi
.if n .RE
.sp
گزینهٔ Colorset در IconMan پسزمینهٔ پنجرهٔ IconMan را تعریف میکند، اما PlainColorset و FocusColorset روی پیشزمینه کشیده میشوند. بنابراین، شفافیت دکمههای IconMan با رسم نکردن هیچ چیزی حاصل میشود. اکنون اگر این IconMan در یک FvwmButtons بلعیده شود، بهصورت:
.sp
.if n .RS 4
.nf
.fam C
FvwmButtons:(Colorset 10, Swallow "FvwmIconMan" \*(AqFvwmIconMan\*(Aq)
.fam
.fi
.if n .RE
.sp
آنگاه \fBFvwmIconMan\fP به فرزند \fBFvwmButtons\fP تبدیل میشود و نسبت به \fBFvwmButtons\fP شفاف خواهد بود. بنابراین در این حالت، \fBFvwmIconMan\fP از Colorset 10 بهعنوان پسزمینه استفاده میکند. اگر شفافیت نسبت به پنجرهٔ ریشه (root) را میخواهید، از گزینهٔ \fIRootTransparent\fP استفاده کنید. ماژولهای \fBFvwmButtons\fP، \fBFvwmIconMan\fP و \fBFvwmIdent\fP نسبتاً ساده هستند. یک گزینهٔ اصلی مجموعهرنگ وجود دارد که پسزمینهٔ پنجره را تعیین میکند و سایر مجموعهرنگها (در صورت وجود) روی پیشزمینه رسم میشوند. مورد \fBFvwmProxy\fP سادهتر است؛ دو مجموعهرنگ به پسزمینههای پنجره ارجاع دارند. ماژول \fBFvwmPager\fP پیچیدهتر است چرا که تقریباً همهچیز در pager پنجرههایی با برخی روابط والد و فرزندی هستند (پنجرههای کوچک فرزند هستند و میزکارها والد، و همهٔ اینها با صفحهٔ برجستهشده پیچیدهتر میشود). بنابراین مجموعهرنگها بر پسزمینهٔ این پنجرهها اعمال میشوند. باید این مورد را آزمایش کنید. برای \fBFvwmForm\fP و \fBFvwmScript\fP وضعیت مشابه است. یک پنجرهٔ اصلی (فرزندِ پنجرهٔ root) وجود دارد که متناظر با مجموعهرنگ اصلی است و بیشتر ویجتها پنجرههایی هستند که فرزند پنجرهٔ اصلی محسوب میشوند. گزینهٔ \fITint\fP ممکن است با گزینهٔ \fITransparent\fP کار کند یا نکند. وقتی مجموعهرنگ روی پیشزمینه رسم شود، \fITint\fP باید کار کند. در برخی موارد، اعمال تهرنگ (tinting) ممکن است بسیار کُند باشد. اعمال تهرنگ ممکن است با منوی fvwm (بدون پویانمایی) کار کند. اگر ویژگی backing store در کارساز X شما فعال باشد، Tinting ممکن است بهتر کار کند (با xdpyinfo بررسی کنید که آیا اینطور است یا خیر). این احتمال وجود دارد که پشتیبانی کارساز X شما از backing store با روش دستکاری نامناسبی (terrible hack) که برای Tint کردن Pixmap با خاصیت ParentRelative به کار رفته سازگار نباشد. بنابراین، برای دستیابی به شفافیت دارای تهرنگ نسبت به ریشه، امنتر است که از گزینهٔ \fIRootTransparent\fP استفاده کنید..sp
\fIRootTransparent\fP [ \fIbuffer\fP ] یک پسزمینهٔ شفاف نسبت به ریشه (root transparent) ایجاد میکند.
برای کارکرد این گزینه، باید از یک برنامهٔ سازگار با \fBEsetroot\fP، fvwm\-root به همراه گزینهٔ \-\-retain\-pixmap، یا \fBFvwmBacker\fP با گزینهٔ RetainPixmap (و colorset یا پسزمینههای یکرنگ) استفاده کنید. کلیدواژهٔ \fIbuffer\fP فقط زمانی سودمند است که گزینهٔ \fITint\fP نیز به کار رفته باشد.
این کار ایجاد پنجرههایی را که از colorset استفاده میکنند تسریع میبخشد (که برای منوهای fvwm بسیار مفید است)، اما به بهای مصرف بیشتر حافظه تمام میشود. همچنین جابهجایی و تغییر اندازهٔ کدر (opaque) را که بدون \fIbuffer\fP میتواند به طرز غیرقابلقبولی کند باشد، سرعت میبخشد. با این وجود، این گزینه ممکن است حافظهٔ زیادی را در کارساز X اشغال کند (بسته به اندازهٔ تصویری که برای تنظیم پسزمینه استفاده شده است). در مجموع، استفاده از جابهجایی و تغییر اندازهٔ خط بیرونی (outline) برای ماژولهایی که از چنین colorsetای استفاده میکنند، میتواند ایدهٔ خوبی باشد.
.sp
گزینههای \fIShape\fP، \fITiledShape\fP و \fIAspectShape\fP یک نام فایل را به عنوان آرگومان دریافت میکنند، مسیر \fBImagePath\fP را برای یافتن آن جستجو کرده و از آن به عنوان نگاشت بیت شکل (shape bitmap) استفاده میکنند.
\fITiledShape\fP نسخههای تکرارشوندهای از نگاشت بیت را بدون مقیاسبندی تولید میکند؛ \fIShape\fP سبب کشیده شدن تصویر bitmap برای تطبیق با هر شیئی که colorset روی آن اعمال شده میشود و \fIAspectShape\fP با حفظ نسبت ابعاد (aspect ratio)، آن را برای انطباق میکشد. اگر فایل یک pixmap در قالب xpm باشد، ماسک شکلِ pixmap (تمامی پیکسلهای کدر) استفاده میشود. برای تصاویر png و svg، ماسک شکل معادل تمامی پیکسلهایی است که کاملاً شفاف نیستند (alpha > 0).
.sp
\fBهشدار\fP به دلیل نحوهٔ پیادهسازی شکلها در X11، نمیتوان شکلدار کردن پنجرهها را لغو کرد. ممکن است مجبور شوید fvwm یا برنامهٔ شکلیافته را مجدداً راهاندازی کنید.
.sp
دستور \fI?Gradient .\|.\|.\fP یک pixmap ایجاد کرده و آن را برای انطباق با پنجره میکشد.
مقدار \fI?Gradient\fP میتواند یکی از گزینههای \fIHGradient\fP، \fIVGradient\fP، \fIDGradient\fP، \fIBGradient\fP، \fISGradient\fP، \fICGradient\fP، \fIRGradient\fP یا \fIYGradient\fP باشد. انواع گرادیان به شرح زیر است: H افقی (horizontal)؛ V عمودی (vertical)؛ D مورب از گوشهٔ بالا-چپ به پایین-راست؛ B مورب وارونه از گوشهٔ پایین-چپ به بالا-راست؛ S مربعهای هممرکز؛ C دایرههای هممرکز؛ R الگوی شبیه به رادار و Y سبک یین و یانگ (بدون نقطهها). لطفاً برای نحو گرادیانها به بخش \fBColor Gradients\fP مراجعه کنید.
.sp
گزینهٔ \fITint\fP دو آرگومان میگیرد: یک رنگ و درصدی بین 0 تا 100.
این گزینه باعث میشود تصویری که با استفاده از \fI?Pixmap\fP یا \fI?Gradient\fP تعریف شده است، با رنگ مشخصشده بر اساس آن درصد تینت شود. اگر تصویر شفاف باشد، \fITint\fP فقط بخش تصویر را تینت میکند. متأسفانه، پسزمینهٔ colorset که با استفاده از گزینهٔ \fITransparent\fP مشخص شده باشد میتواند نتایج نامتعارفی ایجاد کند. برای جزئیات به گزینهٔ \fITransparent\fP مراجعه کنید. بدون آرگومان، این گزینه تینت را حذف میکند.
.sp
گزینهٔ \fIfgTint\fP دو آرگومان میگیرد: یک رنگ و درصدی بین 0 تا 100.
این گزینه باعث میشود رنگ تعریفشده با \fIfg\fP با رنگ مشخصشده بر اساس درصد تینت شود. بدون آرگومان، این گزینه تینت را حذف میکند.
.sp
گزینهٔ \fIbgTint\fP دو آرگومان میگیرد: یک رنگ و درصدی بین 0 تا 100.
این گزینه باعث میشود رنگ تعریفشده با \fIbg\fP با رنگ مشخصشده بر اساس درصد تینت شود. اگر رنگهای \fIsh\fP و \fIhi\fP مشخص نشده باشند، دوباره از روی رنگ bg تینتشده محاسبه میشوند. بدون آرگومان، این گزینه تینت را حذف میکند.
.sp
گزینهٔ \fIAlpha\fP یک درصد بین 0 تا 100 را به عنوان آرگومان میگیرد. این گزینه موجب میشود fvwm تصویر تعریفشده توسط \fI?Pixmap\fP یا \fI?Gradient\fP را بر اساس آن درصد با رنگ \fIbg\fP ادغام کند. اگر درصد 0 باشد تصویر پنهان میشود و اگر 100 باشد طبق روال عادی نمایش مییابد (بدون ادغام). پیشفرض 100 است و در صورت ارائه نشدن آرگومان، به این مقدار بازمیگردد.
.sp
گزینهٔ \fIfgAlpha\fP یک درصد بین 0 تا 100 را به عنوان آرگومان دریافت میکند. این گزینه باعث میشود fvwm متن و پسزمینهٔ colorset را با استفاده از درصد مشخصشده ادغام کند. اگر درصد 0 باشد متن پنهان میشود و اگر 100 باشد متن طبق روال معمول نمایش داده میشود (بدون ادغام). این گزینه تنها بر قلمهایی اثر دارد که با Xft بارگذاری شده باشند؛ به بخش \fBFont Names and Font Loading\fP مراجعه کنید. مقدار پیشفرض 100 است و در صورت عدم ارائهٔ آرگومان بازنشانی میشود.
.sp
گزینهٔ \fIDither\fP سبب میشود fvwm تصویری را که با استفاده از \fI?Pixmap\fP یا \fI?Gradient.\fP تعریف شده است، دیتر (شبکهبندی) کند. این ویژگی تنها در نمایشگرهایی با عمق کمتر یا مساوی 16 مفید است (یعنی نمایشگرهایی که در یک لحظه فقط میتوانند کمتر از 65537 رنگ را نمایش دهند). جلوهٔ دیترینگ امکان شبیهسازی رنگهای بیشتری نسبت به آنچه واقعاً در دسترس دارید را فراهم میکند. \fINoDither\fP مانع از دیتر کردن تصاویر توسط fvwm میشود. اگر عمق رنگ کمتر یا مساوی 8 باشد (صفحهای با 256 رنگ یا کمتر)، \fIDither\fP پیشفرض است. در عمقهای 15 (32768 رنگ) و 16 (65536 رنگ)، پیشفرض \fINoDither\fP است؛ هرچند این جلوه میتواند برای تصاویری که حاوی رنگهای بسیار نزدیک به هم هستند مفید باشد؛ برای نمونه یک گرادیان ظریف یکنواختتر و روانتر به نظر خواهد رسید.
.sp
گزینهٔ \fIIconTint\fP دو آرگومان دریافت میکند: یک رنگ و درصدی بین 0 تا 100.
این گزینه باعث میشود fvwm یا یک ماژول، «آیکونها»یی را که درون پسزمینهٔ colorset کشیده میشوند، با رنگ تعیینشده بر حسب درصد تینت کند. در اینجا منظور از «آیکونها»، آیکونهای fvwm، آیکونهای منوی fvwm، MiniIconهایی که نشاندهندهٔ برنامهها در ماژولهای مختلف هستند، تصاویر بارگذاریشده توسط ماژولها (مانند تصاویر مشخصشده با گزینهٔ دکمهٔ \fIIcon\fP در \fBFvwmButtons\fP) و .\|.\|. غیره است. بدون آرگومان، این گزینه تینت آیکون را حذف میکند.
.sp
گزینهٔ \fIIconAlpha\fP یک درصد بین 0 تا 100 را به عنوان آرگومان میگیرد. این گزینه باعث میشود fvwm «آیکونها»یی را که درون پسزمینهٔ colorset رندر میشوند بر اساس این درصد ادغام کند. مقدار پیشفرض 100 است و در صورت عدم ارائهٔ آرگومان بازگردانی میشود.
.sp
\fIنکته\fP: در صورتی که a = 100 باشد و رنگ bg برابر با a_color باشد، استفاده از «Tint a_color rate» و «Alpha a» معادل یکدیگر است. این همارزی برای IconAlpha و IconTint برقرار نیست، چرا که پسزمینه میتواند یک تصویر یا یک گرادیان باشد (نه یک پسزمینهٔ تکرنگ یکدست). با این حال، در برخی موارد میتوانید با استفاده از IconTint به جای IconAlpha (تقریباً) به همان اثر دست یابید. این کار ارجحیت دارد زیرا به طور کلی، IconAlpha نسبت به IconTint بازترسیمهای بیشتری ایجاد میکند.
.sp
گزینهٔ \fINoShape\fP ماسک شکل را از colorset حذف میکند در حالی که \fIPlain\fP نگاشت پیکسل یا گرادیان پسزمینه را حذف مینماید.
.sp
مثالها
.sp
.if n .RS 4
.nf
.fam C
Colorset 3 fg tan, bg navy
.fam
.fi
.if n .RE
.sp
در صورت لزوم، این دستور colorsetهای 0، 1، 2 و 3 را ایجاد کرده و سپس colorset شمارهٔ 3 را به داشتن پیشزمینهٔ tan و پسزمینهٔ navy تغییر میدهد.
.sp
.if n .RS 4
.nf
.fam C
Colorset 3 bg "navy blue"
.fam
.fi
.if n .RE
.sp
رنگ پسزمینهٔ colorset شمارهٔ 3 را به navy blue تغییر میدهد. پیشزمینه و نگاشت پیکسل بدون تغییر باقی میمانند.
.sp
.if n .RS 4
.nf
.fam C
Colorset 3 AspectPixmap large_murky_dungeon.xpm
.fam
.fi
.if n .RE
.sp
باعث افسردگی میشود.
.sp
.if n .RS 4
.nf
.fam C
Colorset 3 bg Average
.fam
.fi
.if n .RE
.sp
رنگ پسزمینه و رنگهای برجستگی (relief) را طوری تنظیم میکند که با نگاشت پیکسلِ پسزمینه مطابقت داشته باشند. این مقدار پیشفرض است، اما زمانی که یک رنگ پسزمینه قبلاً تعیین شده و اکنون دیگر مورد نیاز نباشد، باید استفاده شود.
.sp
.if n .RS 4
.nf
.fam C
Colorset 3 YGradient 200 3 blue 1000 navy 1 blue 1000 navy
.fam
.fi
.if n .RE
.sp
یک pixmap پسزمینه با گرادیان یین و یانگ (Yin Yang) به colorset شمارهٔ 3 اضافه میکند. اگر پسزمینه روی average تنظیم شده باشد، دوباره محاسبه میشود و چنانچه پیشزمینه نیز روی contrast تنظیم شده باشد، آن نیز بازنگری و محاسبه خواهد شد.
.sp
.if n .RS 4
.nf
.fam C
#!/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
.fam
.fi
.if n .RE
.sp
باعث چشمک زدن colorset شمارهٔ 7 میشود..sp
نامهای رنگ استفادهشده در colorsetها به عنوان متغیرهای fvwm ذخیره میشوند که
میتوانند در هر دستور fvwm جایگزین شوند. برای مثال:
.sp
.if n .RS 4
.nf
.fam C
AddToFunc InitFunction
+ I Exec exec xterm \-fg $[fg.cs0] \-bg $[bg.cs0]
.fam
.fi
.if n .RE
.sp
که در آن $[fg.cs0] رنگ پیشزمینه colorset صفر است. لطفاً برای اطلاعات
بیشتر به بخش \fBCommand Expansion\fP مراجعه کنید.
.RE
.sp
\fBCleanupColorsets\fP
.RS 4
تعریف تمام colorsetها را بازنشانی میکند.
.RE
.sp
\fBColor Gradients\fP
.RS 4
گرادیان رنگ پسزمینهای است که رنگ آن به تدریج از یک پرده رنگ به پردهای
دیگر تغییر میکند. گرادیانهای رنگ میتوانند توسط دستورات و ماژولهای گوناگون
fvwm استفاده شوند. هشت نوع گرادیان وجود دارد:
\fBHGradient\fP یک گرادیان افقی است، \fBVGradient\fP عمودی است،
\fBDGradient\fP مورب از بالا\-چپ به پایین\-راست است، \fBBGradient\fP
مورب معکوس از پایین\-چپ به بالا\-راست است، \fBSGradient\fP
مربعهای هممرکز است، \fBCGradient\fP دایرههای هممرکز است، \fBRGradient\fP
الگویی شبیه به رادار است و \fBYGradient\fP به سبک یین و یانگ است (اما بدون
نقطهها).
.sp
نحو گرادیان رنگ دو شکل دارد:
.sp
\fB?Gradient\fP \fIcolors\fP \fIstart\-color\fP \fIend\-color\fP
.sp
این شکل یک گرادیان خطی را تعیین میکند. آرگومانها نشاندهنده تعداد کل
\fIcolors\fP برای تخصیص (بین ۲ تا ۱۰۰۰)، رنگ آغازین
و رنگ پایانی هستند.
.sp
مثال:
.sp
.if n .RS 4
.nf
.fam C
TitleStyle VGradient 20 rgb:b8/ce/bc rgb:5b/85/d0
.fam
.fi
.if n .RE
.sp
\fB?Gradient\fP \fIcolors\fP \fIsegments\fP \fIcolor\fP \fIlength\fP \fIcolor\fP [\fIlength\fP
\fIcolor\fP] .\|.\|.
.sp
شکل دوم یک گرادیان غیرخطی را مشخص میکند. آرگومانها عبارتند از:
تعداد کل \fIcolors\fP برای تخصیص (بین ۲ تا ۱۰۰۰)، سپس
تعداد \fIsegments\fP. برای هر بخش، \fIcolor\fP آغازین،
یک \fIlength\fP نسبی و سپس رنگ پایانی را مشخص کنید. هر بخش بعدی
با رنگ دوم بخش قبلی آغاز میشود. طولها میتوانند
هر عدد صحیح غیرمنفی باشند. طول یک بخش تقسیم بر
مجموع طول تمام بخشها، کسری از رنگها است که
برای آن بخش استفاده میشود.
.sp
مثالها:
.sp
.if n .RS 4
.nf
.fam C
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
.fam
.fi
.if n .RE
.sp
نکته: برخی سبکهای گرادیان ممکن است کُند باشند و مقدار زیادی
حافظه مصرف کنند، بنابراین اگر با آنها به مشکلات کارایی برخوردید ممکن است
بهتر باشد از آنها استفاده نکنید. برای بهبود کارایی میتوانید یک
یا تمام موارد زیر را امتحان کنید:
.sp
برجستهسازی آیتم فعال منو به غیر از رنگ پیشزمینه را
خاموش کنید:
.sp
.if n .RS 4
.nf
.fam C
MenuStyle