| FVWM3(1) | FVWM3(1) |
نام (NAME)
fvwm3 - مدیر پنجره مجازی F? برای X11
خلاصه دستور (SYNOPSIS)
fvwm3 [-c config-command] [-d displayname] [-f config-file] [-o logfile] [-v]
توضیحات (DESCRIPTION)
برنامه Fvwm یک مدیر پنجره برای X11 است که برای سرعت بهینهسازی شده است.
برنامه Fvwm طوری طراحی شده است که اشغال حافظه پایینی داشته باشد و فوقالعاده سفارشیپذیر و توسعهپذیر است. یک میزکار مجازی بزرگ و چندین میزکار مجزا میتوانند به صورت جداگانه یا همراه با یکدیگر استفاده شوند. میزکار مجازی چنین وانمود میکند که صفحه نمایش ویدئویی در واقع بسیار بزرگ است، و شما میتوانید درون میزکار پیمایش کنید. چندین میزکار مجزا وانمود میکنند که واقعاً چندین صفحه نمایش مختلف برای کار وجود دارد، اما هر صفحه نمایش کاملاً از دیگری مستقل و بیارتباط است.
برنامه Fvwm امکان شتابدهندههای صفحهکلید را فراهم میکند که اجازه میدهند عملاً تمامی عملکردهای مدیر پنجره، از جمله جابجایی و تغییر اندازه پنجرهها و کار با منوها، با استفاده از میانبرهای صفحهکلید انجام شوند.
برنامه Fvwm تمایزی بین دستورهای پیکربندی و دستورهای عملیاتی قائل نمیشود. دستورهای پیکربندی معمولاً قلمها، رنگها، محتوای منو و انتسابهای عملکردهای کلید و موشواره را تعیین میکنند، در حالی که دستورهای عملیاتی کارهایی نظیر بالا آوردن و پایین بردن پنجرهها را انجام میدهند. Fvwm هیچ تمایزی قائل نیست و اجازه میدهد هر چیزی در هر زمانی تغییر داده شود.
گزینهها (OPTIONS)
گزینههای خط فرمانی که توسط fvwm شناسایی میشوند عبارتند از:
-i | --clientid id
-c | --cmd config-command
فرض میشود هر ماژولی که با آرگومانهای خط فرمان راهاندازی میشود، ماژولی است که دستورهای پیکربندی را پس میفرستد. تمام ماژولهای خط فرمان باید پیش از اینکه fvwm به سراغ StartFunction و تنظیم تزیینات و سبکهای حاشیه برود، خاتمه یابند. اگر ماژولی غیر از FvwmPerl را اجرا کنید بنبست احتمالی رخ میدهد، اما یک مهلت زمانی وجود دارد تا در نهایت fvwm به کار خود ادامه دهد.
به عنوان مثال، راهاندازی صفحهبند (pager) از این طریق fvwm را تا زمان سرآمدن مهلت متوقف میکند، اما دستور زیر به خوبی کار خواهد کرد:
fvwm -c "AddToFunc StartFunction I Module FvwmPager"
-d | --display displayname
-f config-file
-o logfile
-h | --help
-r | --replace
-F | --restore state-file
-V | --version
-C | --visual visual-class
-I | --visualid id
-l | --color-limit limit
عمق رنگ صفحه نمایش ۸ (۲۵۶ رنگ)
PseudoColor: 68 (4x4x4 color cube + 4 grey) GrayScale: 64 regular grey DirectColor: 32 (3x3x3 color cube + 5 grey)
عمق رنگ صفحه نمایش ۴ (۱۶ رنگ)
PseudoColor: 10 (2x2x2 color cube + 2 grey) GrayScale: 8 regular grey DirectColor: 10 (2x2x2 color cube + 2 grey)
توجه داشته باشید که اگر از یک نقشه رنگ اختصاصی استفاده کنید (یعنی fvwm با گزینههای -C یا -I راهاندازی شده باشد)، از مقادیر پیشفرض دیگری استفاده خواهد شد.
اکنون اگر با رنگها با مشکل مواجه شدید چه باید کرد؟ نخستین کار این است که بررسی کنید آیا واقعاً نمیتوانید کارگزار X خود را با عمق رنگ ۱۵، ۱۶ یا بهتر اجرا کنید یا خیر. مستندات کارگزار X خود را بررسی کنید. توجه داشته باشید که برخی سختافزارها میتوانند از دو عمق رنگ مختلف روی یک صفحه نمایش پشتیبانی کنند (معمولاً عمق ۸ و عمق ۲۴). اگر عمق ۸ پیشفرض است، میتوانید با استفاده از گزینه -C با آرگومان TrueColor، برنامه fvwm را وادار به استفاده از بهترین عمق کنید. بنابراین اکنون فرض میکنیم شما مجبورید در عمق ۸ با یک visual پویا کار کنید چون سختافزار/درایور شما نمیتواند بهتر عمل کند یا به این دلیل که نیاز به استفاده از برنامهای دارید که باید در این حالت اجرا شود (برای مثال، چون این برنامه به رنگهای خواندنی-نوشتنی نیاز دارد). آنچه باید درک شود این است که شما فقط ۲۵۶ رنگ در اختیار دارید و تمام برنامههایی که از نقشه رنگ پیشفرض استفاده میکنند باید این رنگها را به اشتراک بگذارند. مشکل اصلی این است که برنامههایی وجود دارند که از رنگهای زیاد یا حتی تمام رنگها استفاده میکنند. اگر از چنین برنامهای استفاده کنید، ممکن است دیگر رنگ آزادی نداشته باشید و برخی برنامهها (که فقط از چند رنگ استفاده میکردند) ممکن است در راهاندازی شکست بخورند یا غیرقابل استفاده شوند. سه کار میتوان انجام داد (و fvwm واقعاً نقش خاصی ایفا نمیکند، بلکه همه برنامهها درگیر هستند). نخستین کار این است که برنامههایی را که نقشه رنگ (پیشفرض) شما را هدر میدهند با یک نقشه رنگ اختصاصی اجرا کنید. برای مثال، netscape را با گزینه -install اجرا کنید، برنامههای KDE یا QT را با گزینه --cmap اجرا کنید، یا از گزینه -C برای fvwm استفاده کنید. عیب این روش این است که از نظر بصری ناخوشایند است (برای کنترل بهترِ تعویض نقشههای رنگ، دستور ColormapFocus را ببینید). روش دوم محدود کردن تعداد رنگهایی است که برنامهها استفاده میکنند. مجدداً، برخی برنامهها گزینههایی برای تعیین یک سقف رنگ مشخص دارند. با fvwm میتوانید مقادیر مختلفی را امتحان کنید: ۶۱ (یک پالت «بصری» ویژه)، ۵۶ (یک مکعب رنگی ۴x۴x۳ به اضافه ۶ رنگ خاکستری)، ۲۹ (یک مکعب رنگی ۳x۳x۳ به اضافه ۲ رنگ خاکستری)، ۱۰ یا ۹. همچنین، میتوانید از گزینه -L استفاده کنید. با این حال، محدود کردن تعداد رنگها راهحل قطعی نیست. راهحل نهایی این است که سعی کنید کاری کنید برنامههایی که از رنگهای زیادی استفاده میکنند، همگی از رنگهای یکسانی استفاده کنند. این یک کار دشوار است چرا که استانداردهای رسمی برای این هدف وجود ندارد. با این حال، برخی جعبهابزارها مانند QT و GTK از مکعبهای رنگی به عنوان پالت استفاده میکنند. بنابراین، ایده این است که برنامهها/جعبهابزارهای خود را طوری پیکربندی کنید که همگی از یک مکعب رنگی یکسان استفاده کنند. علاوه بر این، میتوانید از رنگهای موجود در این مکعب رنگی در فایلهای پیکربندی منابع X خود و/یا به عنوان آرگومان برای گزینههای رنگ استفاده کنید. برنامه Fvwm میتواند از هر مکعب رنگی به فرم RxGxB با ۲ <= R <= ۶، R = G، R-1 =< B <= R و B >= ۲ استفاده کند. برای بهدست آوردن یک مکعب رنگی RxGxB، به عنوان آرگومان به -l یک عدد صحیح c بدهید به طوری که c >= R*G*B و در صورتی که B=R باشد c < (R+1)(G+1)*B و در صورتی که B < R باشد c < R*G(B+1) باشد (و متمایز از ۶۱). اگر c > R*G*B باشد، ممکن است مقداری رنگ خاکستری به مکعب رنگی افزوده شود. میتوانید از دستور PrintInfo Colors [1] برای دریافت اطلاعات درباره تنظیمات رنگ fvwm خود استفاده کنید. بهویژه، این دستور پالت استفادهشده توسط fvwm را در قالب rgb چاپ میکند (آخرین عدد صحیح تعداد دفعاتی را نشان میدهد که fvwm آن رنگها را تخصیص داده است).
-L | --strict-color-limit
-P | --visual-palette
-A | --allocate-palette
-S | --static-palette
--debug-stack-ring
-v | --verbose
همچنین ثبت گزارش میتواند با استفاده از سیگنالها به صورت پویا روشن و خاموش شود:
SIGUSR1 : used as a signal to restart Fvwm SIGUSR2 : used as a signal to toggle opening/closing debug log file
Fvwm یک حاشیه تزئینی در اطراف بیشتر پنجرهها قرار میدهد. این حاشیه شامل یک نوار در هر طرف و یک بخش کوچک L-شکل در هر گوشه است. یک نوار بالایی اضافی نیز به نام title-bar وجود دارد که برای نمایش نام پنجره به کار میرود. علاوه بر این، حداکثر تا ۱۰ دکمه در title-bar میتوانند وجود داشته باشند. نوارهای بالایی، کناری و پایینی در مجموع به عنوان side-bars شناخته میشوند. قطعات گوشه، frame نامیده میشوند.
با پیکربندی کمینهٔ توکار، کشیدن کلید ۱ ماوس روی frame یا side-bars عملیات تغییر اندازهٔ پنجره را آغاز میکند. کشیدن کلید ۲ ماوس روی frame یا side-bars عملیات جابهجایی را آغاز میکند. عملیات بالا آوردن/پایین بردن (raise/lower) به یک بار کلیک روی حاشیهها مقید شده است. همین وضعیت برای عنوان پنجره نیز برقرار است.
حداکثر تا ده دکمهٔ title-bar میتواند وجود داشته باشد. کاربرد آنها کاملاً توسط کاربر قابل تعریف است. یک پیکربندی پرطرفدار از یک دکمه در سمت چپ برای باز کردن فهرستی از گزینههای پنجره و دو دکمه در سمت راست برای نمادین کردن (iconify) و بیشینهسازی (maximize) پنجره استفاده میکند. یک پیکربندی محبوب دیگر یک دکمهٔ بستن (close) را به سمت راست اضافه میکند. تعداد دکمههای title-bar مورد استفاده به این بستگی دارد که برای کدامیک از آنها کنشهای ماوس مقید شده باشد. دستور Mouse را ببینید.
میزکار مجازی (THE VIRTUAL DESKTOP)
Fvwm برای کاربرانی که مایل به استفاده از میزکارهای مجازی هستند، چندین میزکار مجازی فراهم میکند. صفحهنمایش یک درگاه دید (viewport) بر روی یک desktop است که ممکن است بزرگتر از صفحهنمایش باشد. به چندین میزکار متمایز میتوان دسترسی داشت (مفهوم: یک میزکار برای هر پروژه، یا یک میزکار برای هر برنامه، هنگامی که دید برنامهها مجزا است). از آنجا که هر میزکار میتواند بزرگتر از صفحهنمایش فیزیکی باشد، و به m در n صفحه (pages) تقسیم شود که هر یک به اندازه صفحهنمایش فیزیکی هستند، پنجرههایی که بزرگتر از صفحهنمایش هستند یا گروههای بزرگی از پنجرههای مرتبط را میتوان بهسادگی مشاهده کرد.
اندازه (m در n) (یعنی تعداد صفحهها) میزکارهای مجازی را میتوان در هر زمان با استفاده از دستور DesktopSize تغییر داد. تمام میزکارهای مجازی باید دارای اندازه یکسان باشند (هستند). نیازی به تعیین تعداد کل میزکارهای مجزا نیست، اما در کل به حدود ۴ میلیارد محدود شده است. همهٔ پنجرهها در محدودهای از میزکارها را میتوان در FvwmPager، نمای مینیاتوری از میزکارها، مشاهده کرد. ابزار pager یک برنامهٔ جانبی است که ماژول نامیده میشود و برای کارکرد مدیر پنجره ضروری نیست. همچنین پنجرهها را میتوان با استفاده از دستور WindowList یا ماژول FvwmIconMan فهرست کرد.
Fvwm پنجرههای روی میزکار را در یک چیدمان پشتهای لایهبندیشده نگه میدارد؛ پنجرهای در لایهٔ پایینتر هرگز پنجرهای در لایهٔ بالاتر را نمیپوشاند. لایهٔ یک پنجره را میتوان با استفاده از دستور Layer تغییر داد. مفهوم لایهها تعمیمی از پرچم StaysOnTop در نسخههای قدیمیتر fvwm است. گزینههای Style به نامهای StaysOnTop و StaysPut اکنون با قرار دادن پنجرهها در لایههای مناسب پیادهسازی شدهاند و گزینهٔ Style که پیشتر وجود نداشت، یعنی StaysOnBottom، اضافه شده است.
پنجرههای Sticky پنجرههایی هستند که با «چسبیدن به شیشهٔ صفحهنمایش» از میزکار مجازی فراتر میروند. آنها همیشه روی صفحه ثابت باقی میمانند. این ویژگی برای مواردی مانند ساعتها و xbiffها بسیار راحت است، بنابراین تنها کافی است یک ابزارک از این دست را اجرا کنید و همیشه همراه شما خواهد ماند. در صورت تمایل میتوان آیکونها را نیز به شیشه چسباند.
مختصات و ابعاد پنجره (geometries) نسبت به درگاه دید (viewport) کنونی تعیین میشوند. بدین معنی که:
xterm -geometry +0+0
پنجرهای را در گوشهٔ بالا و چپ بخش قابل مشاهدهٔ صفحهنمایش ایجاد میکند. تعیین مختصاتی که پنجرهها را روی میزکار مجازی، اما خارج از صفحهنمایش قرار دهد مجاز است. برای نمونه، اگر صفحهنمایش قابل مشاهده ۱۰۰۰ در ۱۰۰۰ پیکسل باشد، و اندازه میزکار 3x3 باشد، و درگاه دید فعلی در گوشهٔ بالا و چپ میزکار قرار داشته باشد، اجرای:
xterm -geometry +1000+1000
پنجرهای را دقیقاً بیرون از گوشهٔ پایین و راست صفحهنمایش قرار میدهد. این پنجره را میتوان با بردن ماوس به گوشهٔ پایین و راست صفحهنمایش و منتظر ماندن برای پیمایش آن به داخل نما پیدا کرد. مختصاتی که به صورت زیر تعیین شود:
xterm -geometry -5-5
گوشهٔ پایین و راست پنجره را در فاصلهٔ ۵ پیکسلی از گوشهٔ پایین و راست بخش مرئی صفحهنمایش قرار میدهد. همه برنامهها از مختصات پنجره با آفستهای منفی پشتیبانی نمیکنند. برخی برنامهها گوشهٔ بالا و راست پنجره را ۵ پیکسل بالاتر و به سمت چپِ گوشهٔ بالا و چپ صفحهنمایش قرار میدهند؛ دیگر برنامهها ممکن است رفتارهای کاملاً عجیبی نشان دهند.
یک افزونهٔ ویژهٔ fvwm برای رشتههای مختصات (geometry) وجود دارد که میتواند تعیین مختصات را نسبت به صفحهنمایش دادهشده نیز اعمال کند. برای نمونه:
xterm -geometry +0+0@n
که در آن 'n' میتواند نام یک مانیتور RandR یا شماره مانیتور تخصیصیافته باشد. برای جزئیات بیشتر، بخش RANDR SUPPORT را ببینید.
راههای مختلفی وجود دارد تا پنجرهای روی میزکار یا صفحهای غیر از میزکار یا صفحهٔ فعال فعلی نگاشت (map) شود. با این حال، روش مختصات که در بالا ذکر شد (تعیین مختصات x,y بزرگتر از اندازه صفحهنمایش فیزیکی)، از این محدودیت رنج میبرد که نسبت به درگاه دید فعلی تفسیر میشود: پنجره ممکن است بهطور پایدار روی یک صفحهٔ خاص ظاهر نشود، مگر اینکه همیشه برنامه را از همان صفحه فراخوانی کنید.
روش بهتر برای قرار دادن پنجرهها روی یک صفحه، صفحهنمایش یا میزکار (desk) متفاوت از درگاه دید نگاشتشدهٔ فعلی، استفاده از مشخصهٔ سبک StartsOnPage یا StartsOnScreen (جانشینهای سبک قدیمیتر StartsOnDesk) در فایل config شما است. این جایگذاری پایدار است: به موقعیت فعلی شما روی میزکار مجازی وابسته نیست.
برخی از برنامهها که آرگومانهای خط فرمان استاندارد Xt و X resources را درک میکنند، مانند xterm و xfontsel، به کاربر اجازه میدهند میزکار (desk) یا صفحهٔ راهاندازی را در خط فرمان مشخص کند:
xterm -xrm "*Desk:1"
یک xterm را در میزکار شماره ۱ اجرا میکند؛
xterm -xrm "*Page:3 2 1"
یک xterm را در دو صفحه به سمت راست و یک صفحه به سمت پایین از صفحهٔ بالا و چپ میزکار شماره ۳ اجرا میکند. با این حال، همهٔ برنامهها کاربرد این گزینهها را درک نمیکنند. میتوانید با خطوط زیر در فایل .Xdefaults خود به همان نتایج دست یابید:
XTerm*Desk: 1
یا
XTerm*Page: 3 2 1
برنامه Fvwm با استفاده از پروتکل RandR سامانه X11، به بهترین نحو از چندین نمایشگر پشتیبانی میکند. اگر fvwm بدون پشتیبانی از پروتکل RandR کامپایل شده باشد، پشتیبانی از چند نمایشگر بسیار محدود خواهد بود و پیشنهاد میشود برنامه را مجدداً با RandR بازسازی (rebuild) کنید. همچنین توصیه میشود در نمایشگرهای چندگانه از 'EdgeScroll 0 0' استفاده کنید تا هنگام حرکت نشانگر موشواره بین نمایشگرها از تعویض صفحات جلوگیری شود.
اگر Fvwm با پشتیبانی از RandR کامپایل شده باشد، خروجیهایی (نمایشگرهایی) را که مییابد ردگیری میکند. این خروجیها با نام ذخیره میشوند که میتوان نام آنها را با اجرای دستور xrandr(1) یافت.
هنگامی که Fvwm نمایشگرها را شناسایی میکند، آنها را با ترتیبی مشخص به یک ساختار درختی اضافه کرده و به هر نمایشگر یک شماره اختصاص میدهد. این ترتیب از بالا به پایین و از چپ به راست است؛ به عنوان مثال، نمودار زیر چینش چند نمایشگر و شمارههای اختصاصیافته به آنها را نشان میدهد.
A (0) B (1) C (2) D (3)
بنابراین میتوان به نمایشگر دوم ارجاع داد و نام آن را از طریق متغیرهای بسط به صورت زیر چاپ کرد:
$[monitor.1.name]
که نام B را چاپ خواهد کرد.
با این اقدام، Fvwm رویدادهای ارسالی از RandR را ردگیری میکند؛ مانند زمانی که اندازه یک خروجی مشخص تغییر میکند، یا خروجی جدیدی افزوده یا برداشته میشود.
این موارد توسط FvwmEvent کنترل میشوند.
رفتار میزکار (DESKTOP BEHAVIOUR)
از آنجا که Fvwm قابلیت ردگیری خروجیها را دارد، میتوان نحوه مدیریت آنها را به Fvwm اعلام کرد. این سازوکار از طریق دستور DesktopConfiguration کنترل میشود. بهطور پیشفرض، Fvwm تمام خروجیهای یافتشده را به عنوان یک صفحهٔ بزرگ در نظر میگیرد، اگرچه میتوان به Fvwm دستور داد که با هر نمایشگر مستقل از دیگری رفتار کند.
راهاندازی اولیه (INITIALIZATION)
در حین راهاندازی اولیه، fvwm به دنبال یک فایل پیکربندی میگردد که تعریف کلیدها، دکمههای موشواره و بسیاری از موارد دیگر را شامل میشود. قالب این فایلها در ادامه شرح داده شده است. Fvwm ابتدا با استفاده از دستور زیر به دنبال فایلهای پیکربندی میگردد:
Read config
این دستور همانگونه که در Read شرح داده شده، به دنبال فایل config در دایرکتوریهای $FVWM_USERDIR و $FVWM_DATADIR میگردد. در صورت عدم موفقیت، برای حفظ سازگاری با نسخههای قدیمیتر، فایلهای بیشتری مورد بررسی قرار میگیرند. فهرست کامل تمام مسیرهای فایلی که در نصب پیشفرض بررسی میشوند به شرح زیر است (تنها از نخستین فایل یافتشده استفاده خواهد شد):
$HOME/.fvwm/config /usr/local/share/fvwm/config $HOME/.fvwm/.fvwm2rc $HOME/.fvwm2rc /usr/local/share/fvwm/.fvwm2rc /usr/local/share/fvwm/system.fvwm2rc /etc/system.fvwm2rc
لطفاً توجه داشته باشید، تضمینی نیست که از ۵ مسیر آخر در آینده نیز پشتیبانی شود.
اگر هیچ فایل پیکربندیای یافت نشود، دکمه سمت چپ موشواره، یا
یا
کلیدهای روی پنجره ریشه (root window)، منوها و فرمهایی را باز میکنند که امکان ایجاد یک فایل پیکربندی ابتدایی را فراهم میسازند.
برنامه Fvwm دو متغیر محیطی تنظیم میکند که توسط فرآیندهای فرزند آن به ارث برده میشوند. این متغیرها عبارتند از $DISPLAY که نمایشگری را که fvwm روی آن در حال اجراست توصیف میکند. مقدار $DISPLAY ممکن است unix:0.0 یا :0.0 باشد که در صورت هدایت از طریق ssh به دستگاهی دیگر عملکرد چندان خوبی نخواهد داشت، بنابراین $HOSTDISPLAY روی یک توصیف آمادهٔ شبکه از نمایشگر تنظیم میشود. $HOSTDISPLAY همیشه از پروتکل انتقال TCP/IP (حتی برای اتصالات محلی) استفاده میکند؛ از این رو برای اتصالات محلی بهتر است از $DISPLAY استفاده شود، زیرا میتواند از سوکتهای دامنه یونیکس (Unix-domain sockets) بهره ببرد که سریعتر هستند.
اگر تمایل دارید برخی برنامهها یا ماژولها همزمان با fvwm اجرا شوند، میتوانید به سادگی خطوط زیر را
Exec app
یا
Module FvwmXxx
در فایل config خود قرار دهید؛ اما این کار توصیه نمیشود و تنها در صورتی باید انجام شود که کاملاً از عملکرد آن آگاه باشید. معمولاً آغاز به کار برنامهها یا ماژولها پس از خوانده شدن کامل فایل پیکربندی اهمیت دارد، زیرا این فایل دربردارنده سبکها یا تنظیماتی است که میتوانند بر ظاهر و عملکرد پنجرهها تأثیر بگذارند.
روش استاندارد برای اجرای برنامهها یا ماژولها در هنگام راهاندازی fvwm، اضافه کردن آنها به یک تابع راهاندازی اولیه است (معمولاً StartFunction یا InitFunction). بدین ترتیب، آنها تنها پس از اتمام فرایند خواندن و اجرای فایل config توسط fvwm راهاندازی خواهند شد.
برنامه Fvwm دارای سه تابع ویژه برای راهاندازی اولیه است: StartFunction، که هنگام آغاز به کار و راهاندازیهای مجدد (restart) اجرا میشود؛ و توابع InitFunction و RestartFunction، که به ترتیب در حین راهاندازی اولیه و راهاندازی مجدد، درست پس از StartFunction فراخوانی میشوند. این توابع را میتوان در فایل config کاربر و با استفاده از دستور AddToFunc (که در ادامه شرح داده شده) سفارشی کرد تا ماژولها، xtermها، یا هر برنامهای که میخواهید توسط fvwm شروع شود به اجرا درآیند.
همچنین Fvwm دارای یک تابع خروج ویژه است: ExitFunction، که پیش از بسته شدن نهایی، در زمان خروج یا راهاندازی مجدد اجرا میشود. از این تابع میتوان برای متوقف کردن صریح ماژولها و موارد دیگر استفاده کرد.
اگر fvwm تحت یک مدیر نشست (session manager) اجرا شود، توابع SessionInitFunction و SessionRestartFunction به جای InitFunction و RestartFunction فراخوانی میشوند. این امر کمک میکند تا فایل config کاربر به نحوی تنظیم شود که هم برای اجرا تحت یک مدیر نشست و هم بدون آن مناسب باشد. بهطور کلی اجرای xtermها یا سایر برنامهها در توابع "*Session" ایده مناسبی نیست. همچنین کاربر میتواند تصمیم بگیرد که در صورت اجرا تحت مدیر نشست یا عدم اجرای آن، ماژولهای متفاوتی را راهاندازی کند. برای اهداف مشابه، تابع SessionExitFunction به جای ExitFunction مورد استفاده قرار میگیرد.
DestroyFunc StartFunction AddToFunc StartFunction + I Module FvwmPager * * + I Module FvwmButtons DestroyFunc InitFunction AddToFunc InitFunction + I Module FvwmBanner + I Module FvwmIconMan + I Exec xsetroot -solid cyan + I Exec xterm + I Exec netscape DestroyFunc RestartFunction AddToFunc RestartFunction + I Module FvwmIconMan DestroyFunc SessionInitFunction AddToFunc SessionInitFunction + I Module FvwmBanner DestroyFunc SessionRestartFunction AddToFunc SessionRestartFunction + I Nop
اگر نیازی به تعریف برخی از توابع خاص نباشد و خالی بمانند، الزامی به تعریف آنها نیست. همچنین دقت داشته باشید که اکنون میتوان تمام این توابع ویژه را با استفاده از StartFunction و ExitFunction به این صورت شبیهسازی کرد:
DestroyFunc StartFunction AddToFunc StartFunction + I Test (Init) Module FvwmBanner + I Module FvwmPager * * + I Test (Restart) Beep DestroyFunc ExitFunction AddToFunc ExitFunction + I Test (Quit) Echo Bye-bye + I KillModule MyBuggyModule + I Test (ToRestart) Beep
برنامه Fvwm دارای تعدادی گزینه زمان کامپایل است. اگر در استفاده از دستور یا قابلیتی خاص با مشکل مواجه شدید، بررسی کنید که آیا پشتیبانی از آن در زمان کامپایل گنجانده شده است یا خیر. قابلیتهای اختیاری در فایل config.h که هنگام کامپایل تولید میشود شرح داده شدهاند.
آیکونها و تصاویر (ICONS AND IMAGES)
برنامه Fvwm میتواند تصاویر .xbm، .xpm، .png و .svg را بارگذاری کند. تصاویر XBM تکرنگ (سیاه و سفید) هستند. Fvwm همیشه میتواند فایلهای XBM را نمایش دهد. قالبهای XPM و PNG تصاویر رنگی هستند. SVG یک فرمت گرافیک برداری است. گزینههای زمان کامپایل تعیین میکنند که آیا fvwm میتواند آیکونها و تصاویر XPM، PNG یا SVG را نمایش دهد یا خیر. برای اطلاعات بیشتر فایل INSTALL.fvwm را ببینید.
گزینه مرتبط زمان کامپایل SHAPE میتواند کاری کند که fvwm آیکونهای شکلدار شکیل و زیبایی را نمایش دهد.
گزینههای رندر SVG (SVG rendering options)
تصاویر SVG از فایلهای متنی (XML) تولید میشوند. یک فایل SVG واقعاً ساده ممکن است چیزی شبیه به این باشد:
<svg width="120" height="80"> <rect fill="red" width="40" height="40" x="0" y="0" /> <rect fill="lime" width="40" height="40" x="40" y="0" /> <rect fill="blue" width="40" height="40" x="80" y="0" /> <rect fill="cyan" width="40" height="40" x="0" y="40" /> <rect fill="magenta" width="40" height="40" x="40" y="40" /> <rect fill="yellow" width="40" height="40" x="80" y="40" /> </svg>
بهطور پیشفرض، تصاویر SVG به همان شکلی رندر میشوند که سازنده تصویر مد نظر داشته است. اما از آنجا که SVG یک قالب گرافیک برداری است، تصاویر را میتوان در هر اندازه و چرخش دلخواهی رندر کرد؛ به عنوان مثال این امکان فراهم میشود که از یک فایل آیکون یکسان، با رندر در اندازههای متفاوت، برای سبکهای Icon و MiniIcon استفاده شود.
گزینههای رندر به عنوان یک رشته که به انتهای نام فایل SVG پیوست میشود، به شرح زیر مشخص میگردند:
_image.svg_:[!] [(1) _size_] [(2) _position_] [(3) _rotation_] [(4)
_scale_] ...
{empty}(1) [-]_width_{x}[-]_height_
{empty}(2) {- | +}_xpos_{- | +}_ypos_
{empty}(3) @[-]_angle_
{empty}(4) {* | }[-]_factor_[x | y]
رشته گزینه همواره با یک دونقطه (':') آغاز میشود تا از نام فایل جدا گردد. یک رشته گزینه خالی میتواند این دونقطه را نادیده بگیرد، اما در صورتی که نام فایل شامل دونقطه باشد، همچنان بهتر است برای جلوگیری از ابهام آن را درج کنید.
filename_without_colon.svg filename:with:colon.svg:
علامت تعجب ('!') کل تصویر نهایی (شامل ناحیه رندر) را ترانهاده (transpose) میکند؛ یعنی تمام مختصاتهای افقی و تمام مختصاتهای عمودی با یکدیگر جابهجا میشوند.
image.svg:!
مقادیر width و height ابعاد ناحیه رندر را بر حسب پیکسل مشخص میکنند، یعنی ابعاد تصویر حاصل. تصویر واقعی طوری تنظیم میشود که کل ناحیه رندر را پر کند.
image.svg:60x60
برای حفظ نسبت ابعاد (aspect ratio)، مقدار width یا height را برابر با 0 قرار دهید.
image.svg:0x60 image.svg:60x0
یک '-' قبل از width، ناحیه رندر را به صورت افقی آینهای (معکوس) میکند.
image.svg:-0x0
یک '-' قبل از height، ناحیه رندر را به صورت عمودی آینهای (معکوس) میکند.
image.svg:0x-0
مقادیر xpos و ypos جابهجایی (انتقال) تصویر را بر حسب پیکسل مشخص میکنند. مقدار مثبت xpos تصویر را به سمت راست حرکت میدهد. مقدار مثبت ypos آن را به سمت پایین میبرد. حرکت دادن بخشی از آن به خارج از ناحیه رندر منجر به بریده شدن (crop) تصویر میشود.
image.svg:-30-0 image.svg:-0+10 image.svg:-30+10
مقدار angle یک چرخش حول مرکز تصویر واقعی را بر حسب درجه مشخص میکند. این کار ممکن است منجر به بریده شدن تصویر شود. مقدار مثبت، تصویر را در جهت عقربههای ساعت میچرخاند. مقادیر ممیز شناور پشتیبانی میشوند.
image.svg:@180 image.svg:@-90 image.svg:@30 image.svg:@57.3
مقدار factor مقیاسبندی تصویر واقعی را مشخص میکند (نه ناحیه رندر). بزرگنمایی تصویر منجر به بریده شدن آن میشود. مقادیر ممیز شناور شناسایی و پذیرفته میشوند. تقسیم بر صفر نادیده گرفته میشود. اگر بلافاصله پس از factor یک 'x' یا یک 'y' بیاید، مقیاسبندی به ترتیب به صورت افقی یا عمودی خواهد بود. در غیر این صورت، مقیاسبندی یکنواخت است.
image.svg:*2 image.svg:/2 image.svg:/3x image.svg:/2y
کوچکنمایی تصویری که جابهجا شده یا چرخیده است، میتواند از بریده شدن آن جلوگیری کند.
image.svg:@30*0.6
استفاده مکرر از جابهجایی، چرخش و مقیاسبندی مجاز است. جابهجایی و چرخش جمعپذیر هستند. مقیاسبندی ضربپذیر است.
image.svg:*2/3 image.svg:/3x/2y
هنگام ترکیب تبدیلات آفین (affine transformations)، مقیاسبندی همیشه ابتدا انجام میشود، سپس چرخش و در نهایت جابهجایی.
image.svg:-30+10@30/3x/2y
برای آینهای/معکوس کردن تصویر واقعی، از یک factor مقیاس منفی استفاده کنید.
image.svg:-30+10@30/-3x/2y
آینهای کردن ناحیه رندر پس از هرگونه مقیاسبندی، چرخش یا جابهجایی تصویر انجام میشود.
image.svg:-0x0-30+10@30/3x/2y
ترانهادن در آخرین مرحله و پس از هر کار دیگری انجام میشود.
image.svg:!-0x0-30+10@30/3x/2y
یک ماژول برنامهای جداگانه است که به عنوان یک فرایند مستقل یونیکس (Unix) اجرا میشود اما دستورها را برای اجرا به fvwm ارسال میکند. کاربران میتوانند ماژولهای اختصاصی خود را بنویسند تا بدون حجیمکردن یا تأثیر منفی بر یکپارچگی خودِ fvwm، هرگونه دستکاری خاص یا نامتعارفی را انجام دهند.
ماژولها باید توسط fvwm ایجاد (spawn) شوند تا بتواند دو لوله (pipe) را برای برقراری ارتباط میان fvwm و ماژول برپا کند. این لولهها هنگام شروع ماژول از پیش باز هستند و توصیفکنندههای فایل (file descriptors) لولهها به عنوان آرگومانهای خط فرمان در اختیار آن قرار میگیرند.
ماژولها میتوانند در هر زمان از نشست X با استفاده از دستور Module توسط fvwm فراخوانی شوند. ماژولها میتوانند در تمام طول نشست X فعال بمانند، یا یک وظیفه منفرد را به پایان رسانده و خارج شوند. اگر هنگام فرمان خروج به fvwm، ماژول همچنان فعال باشد، fvwm لولههای ارتباطی را میبندد و منتظر دریافت سیگنال SIGCHLD از ماژول میماند، که نشان میدهد ماژول بستهشدن لوله را تشخیص داده و خارج شده است. در صورتی که ماژولها موفق به تشخیص بستهشدن لوله نشوند، fvwm در هر صورت پس از حدود ۳۰ ثانیه خارج میشود. تعداد ماژولهای در حال اجرای همزمان با حداکثر تعداد فایلهای باز همزمان در سیستمعامل محدود میشود که معمولاً بین ۶۰ تا ۲۵۶ است.
ماژولها صرفاً دستورها را به موتور دستورات fvwm مخابره میکنند. قالببندی دستورها دقیقاً مانند پیوند کلیدهای ماوس در فایل پیکربندی config است. اطلاعات کمکی مشخصی نیز ارسال میشوند، مانند آنچه در ماژول نمونهٔ FvwmButtons دیده میشود.
لطفاً برای جزئیات بیشتر به بخش Module Commands مراجعه کنید.
سازگاری با ICCCM (ICCCM COMPLIANCE)
fvwm تلاش میکند با ICCCM 2.0 سازگار باشد. برای اطلاعات بیشتر http://tronche.com/gui/x/icccm را بررسی کنید. علاوه بر این، ICCCM بیان میکند که برنامهها باید قادر به دریافت هر کلید فشردهشدهای باشند، که این امر با رویکرد میانبرهای صفحهکلید استفادهشده در fvwm و اکثر دیگر مدیرهای پنجره همخوانی ندارد. به طور خاص، شما نمیتوانید میانبرهای صفحهکلید یکسانی داشته باشید که همزمان در fvwm اصلی شما و یک fvwm دیگر که درون Xnest (یک کارساز X تودرتو که در یک پنجره اجرا میشود) کار کنند. همین مشکل در مورد پیوندهای ماوس نیز وجود دارد.
ICCCM مشخص میکند پنجرههایی که دارای ویژگی زیر هستند:
WM_HINTS(WM_HINTS): Client accepts input or input focus: False
نباید توسط مدیر پنجره، فوکوس ورودی صفحهکلید را دریافت کنند. با این حال، این پنجرهها خودشان میتوانند فوکوس ورودی را به دست آورند. تعدادی از برنامهها این ویژگی را تنظیم میکنند و با این وجود انتظار دارند که مدیر پنجره به آنها فوکوس صفحهکلید را بدهد؛ بنابراین fvwm سبک پنجرهای به نام Lenience ارائه میدهد که به fvwm اجازه میدهد این قانون ICCCM را نادیده بگیرد. حتی با اعمال این سبک پنجره نیز تضمین نمیشود که برنامه فوکوس را بپذیرد.
تفاوتهای میان ICCCM 1.1 و 2.0 شامل قابلیت جایگزینی و در دست گرفتن کنترل از یک مدیر پنجره سازگار با ICCCM 2.0 در حال اجرا است؛ بنابراین دستور
fvwm; vi ~/.fvwm/config; fvwm -replace
مشابه دستور Restart عمل میکند. البته کاملاً یکسان نیست، چرا که اگر مدیر پنجره قبلی به عنوان آخرین کلاینت در فایل .Xclients یا .Xsession شما اجرا شده باشد، بستن آن ممکن است نشست X شما را خاتمه دهد.
قابلیتهای افزودهشدهٔ دیگر عبارتند از پشتیبانی از نصب جدول رنگ (colormap) در سمت کلاینت (برای جزئیات به ICCCM مراجعه کنید) و نشانهٔ فوریت (urgency hint). کلاینتها میتوانند این نشانه را در ویژگی WM_HINTS پنجرهشان تنظیم کنند و انتظار داشته باشند مدیر پنجره توجه کاربر را به پنجره جلب کند. fvwm برای این منظور دو تابع قابل بازتعریف به نامهای «UrgencyFunc» و «UrgencyDoneFunc» دارد که هنگام تنظیم یا پاکشدن پرچم اجرا میشوند. تعاریف پیشفرض آنها عبارتند از:
AddToFunc UrgencyFunc + I Iconify off + I FlipFocus + I Raise + I WarpToWindow !raise 5p 5p AddToFunc UrgencyDoneFunc + I Nop
اشارات توسعهیافته مدیر پنجره (EXTENDED WINDOW MANAGER HINTS)
fvwm تلاش میکند مشخصات اشارات توسعهیافته مدیر پنجره (به اختصار ewmh یا EWMH): https://specifications.freedesktop.org/wm-spec/wm-spec-1.3.html و برخی افزونههای این مشخصات را رعایت کند.
این پشتیبانی از طریق سبکها و دستورها قابل پیکربندی است. این سبکها و دستورها دارای پیشوند EWMH هستند (تا بتوانید آنها را به راحتی در این صفحه راهنما پیدا کنید).
یک بافتار (Context) جدید 'D' برای دستورهای Key، PointerKey و Mouse در نظر گرفته شده است. این بافتار برای برنامههای میزکار (مانند kdesktop و میزکار Nautilus) کاربرد دارد.
هنگامی که یک نوار وظیفه (taskbar) سازگار از fvwm میخواهد پنجرهای را فعال کند (معمولاً زمانی که روی دکمهای که نمایانگر پنجره در نوار وظیفه است کلیک میکنید)، fvwm تابع پیچیدهٔ EWMHActivateWindowFunc را فراخوانی میکند که به طور پیشفرض Iconify Off، Focus و Raise است. شما میتوانید این تابع را بازتعریف کنید. برای مثال:
DestroyFunc EWMHActivateWindowFunc AddToFunc EWMHActivateWindowFunc I Iconify Off + I Focus + I Raise + I WarpToWindow 50 50
علاوه بر این، نشانگر ماوس را به مرکز پنجره منتقل میکند.
مشخصات EWMH مفهوم ناحیه کاری (Working Area) را معرفی میکند. بدون پشتیبانی ewmh، ناحیه کاری همان کل صفحه نمایش قابل مشاهده است (یا تمام نمایشگرهای شما در صورتی که پیکربندی چندنمایشگره با RandR داشته باشید). با این حال، برنامههای سازگار (مانند یک پنل) میتوانند درخواست رزرو فضا در لبه صفحه را داشته باشند. در این صورت، ناحیه کاری برابر است با کل صفحه نمایش قابل مشاهده منهای این فضاهای رزروشده. اگر بتوان پنلی را با کلیک روی یک دکمه پنهان کرد، ناحیه کاری تغییر نمیکند (چرا که میتوانید در هر زمان پنل را آشکار کنید)، اما «ناحیه کاری پویا» (Dynamic Working Area) بهروزرسانی میشود: فضای رزروشده توسط پنل برداشته میشود (و اگر مجدداً پنل را باز کنید، اضافه میشود). ناحیه کاری پویا ممکن است زمانی که fvwm پنجرهای را جایگذاری کرده یا بیشینه (maximize) میکند مورد استفاده قرار گیرد. برای دانستن اینکه آیا برنامهای فضا رزرو کرده است، میتوانید دستور «xprop | grep _NET_WM_STRUT» را در ترمینال وارد کرده و برنامه را انتخاب کنید. اگر چهار عدد ظاهر شدند، این اعداد فضای رزروشده را همانطور که در دستور EwmhBaseStruts توضیح داده شده تعریف میکنند..SH "پیکربندی (CONFIGURATION)"
فایلهای پیکربندی
فایل پیکربندی برای توصیف پیوندهای موشواره و کلیدها، رنگها، اندازهٔ نمایشگر مجازی، و موارد مرتبط به کار میرود. فایل پیکربندی راهاندازی معمولاً config (یا .fvwm2rc) نامیده میشود. با استفاده از دستور Read، خواندن فایلهای پیکربندی جدید در حین کار بسیار آسان است.
خطوطی که با '#' آغاز میشوند توسط fvwm نادیده گرفته میشوند. انتظار میرود خطوطی که با '*' شروع میشوند شامل دستورهای پیکربندی پودمان باشند (بهجای دستورهای پیکربندی برای خود fvwm). همانند اسکریپتهای شل، خطوط جدید تعبیهشده در یک خط از فایل پیکربندی را میتوان با قرار دادن یک بکاسلش در پیش از آنها نقلقول (quote) کرد. تمامی خطوطی که به این شیوه متصل میشوند، بهعنوان یک خط واحد در نظر گرفته میشوند. خود نویسهٔ خط جدید نادیده گرفته میشود.
نرمافزار Fvwm هیچ تمایزی میان دستورهای پیکربندی و دستورهای عملیاتی قائل نمیشود، بنابراین هر موردی که در بخش دستورهای fvwm ذکر شده است را میتوان روی یک خط جداگانه قرار داد تا fvwm هنگام خواندن فایل پیکربندی آن را اجرا کند، یا میتوان آن را بهعنوان یک دستور اجرایی در یک منو قرار داد یا به یک کلید موشواره یا کلیدی از صفحهکلید متصل کرد. تصمیمگیری در این باره که کدام توابع برای راهاندازی اولیه و کدامها برای زمان اجرا مناسب هستند، به عهدهٔ کاربر گذاشته شده است.
پیکربندی ارائهشده
یک نمونه فایل پیکربندی، همراه با توزیع fvwm ارائه شده است. این فایل دارای توضیحات مناسبی است و میتواند بهعنوان منبعی از مثالها برای پیکربندی fvwm استفاده شود. میتوان آن را از فایل /usr/local/share/fvwm/config کپی کرد.
همچنین، منوی پیشساخته (که در صورت پیدا نشدن هیچ فایل پیکربندی در دسترس است) گزینههایی برای ایجاد یک فایل پیکربندی اولیه برای کاربر دارد.
قلمها (FONTS)
نامهای قلم و بارگذاری قلم
قلمهای مورد استفاده برای متن عنوان پنجره، عنوانهای آیکون، منوها و پنجرهٔ ابعاد و مکان (geometry window) را میتوان با استفاده از دستورهای Font و IconFont در Style، دستور Font در MenuStyle و دستور DefaultFont مشخص کرد. همچنین، تمام پودمانهایی که از متن استفاده میکنند دارای دستور(های) پیکربندی برای مشخص کردن قلم(ها) هستند. همهٔ این سبکها و دستورها یک نام قلم را بهعنوان آرگومان میپذیرند. این بخش توضیح میدهد که یک نام قلم برای fvwm چیست و fvwm چه قلمهایی را بارگذاری میکند.
نخست، میتوانید از چیزی که میتوان آن را یک نام قلم معمول نامید استفاده کنید، برای مثال:
-adobe-courier-bold-r-normal--10-100-75-75-m-60-ISO8859-1 -adobe-courier-bold-r-normal--10-* -*-fixed-medium-o-normal--14-*-ISO8859-15
به این معنا که میتوانید از یک X Logical Font Description (بهاختصار XLFD) استفاده کنید. سپس «اولین» قلمی که با این توصیف مطابقت داشته باشد بارگذاری شده و استفاده میشود. این «اولین» قلم به مسیر قلم شما و همچنین محیط محلی (locale) شما بستگی دارد. قلمهایی که با مجموعه نویسهٔ locale مطابقت دارند به ترتیب اولویت بارگذاری میشوند. برای مثال با
-adobe-courier-bold-r-normal--10-*
اگر مجموعه نویسهٔ locale برابر با ISO8859-1 باشد، آنگاه fvwm تلاش میکند قلمی را بارگذاری کند که با
-adobe-courier-bold-r-normal--10-*-ISO8859-1
مطابقت داشته باشد؛ با مجموعه نویسهٔ locale برابر با ISO8859-15 نرمافزار fvwm تلاش میکند
-adobe-courier-bold-r-normal--10-*-ISO8859-15.
را بارگذاری کند.
یک نام قلم را میتوان بهصورت یک XLFD گسترشیافته مشخص کرد. این یک فهرست جداشده با کاما از نامهای قلم XLFD (ساده) است، برای مثال:
-adobe-courier-bold-r-normal--14-*,-*-courier-medium-r-normal--14-*
هر نام قلم ساده تا زمانی که قلمی منطبق با مجموعه نویسهٔ locale یافت شود آزموده میشود و اگر این کار ناموفق بود، هر نام قلم ساده بدون محدودیت روی مجموعه نویسه امتحان میشود.
جزئیات بیشتر دربارهٔ XLFD را میتوان در صفحهٔ راهنمای X، سند X Logical Font Description Conventions (با نام xlfd) و صفحات راهنمای XLoadFont و XCreateFontSet یافت. برخی از ابزارهای کمکی مفید قلم عبارتند از: xlsfonts، xfontsel، xfd و xset.
اگر از پشتیبانی Xft برخوردارید، میتوانید نام قلم (توصیف) Xft یک قلم true type (یا Type1) را با پیشوند "xft:" مشخص کنید، برای مثال:
"xft:Luxi Mono" "xft:Luxi Mono:Medium:Roman:size=14:encoding=iso8859-1"
«اولین» قلمی که با این توصیف مطابقت داشته باشد بارگذاری میشود. این اولین قلم با Xft1 به فایل پیکربندی XftConfig و با Xft2 به فایل /etc/fonts/fonts.conf بستگی دارد. میتوان صفحهٔ راهنمای Xft و صفحهٔ راهنمای fontconfig را همراه با Xft2 مطالعه کرد. نخستین رشتهای که پس از "xft:" میآید همواره بهعنوان خانواده (family) در نظر گرفته میشود. در مثال دوم، Luxi Mono خانواده قلم است (سایر خانوادههای TTF در XFree عبارتند از: "Luxi Serif"، "Luxi Sans")، مقدار Medium نشاندهندهٔ وزن (Weight) است (سایر وزنهای ممکن: Light، DemiBold، Bold، Black)، مقدار Roman بیانگر زاویه یا سبک (slant یا style) است (سایر حالتهای ممکن: Regular، Oblique، Italic)، پارامتر size اندازه قلم بر حسب نقطه (point size) را مشخص میکند (برای اندازه بر حسب پیکسل از pixelsize= استفاده کنید)، پارامتر encoding امکان اجبار یک مجموعه نویسه را فراهم میکند (فقط iso8859-1 یا iso10646-1؛ اگر هیچ انکودینگی مشخص نشود، مجموعه نویسهٔ locale فرض میشود). یک پارامتر مهم "minspace=bool" است که در آن bool برابر با True یا False میباشد. اگر bool برابر با False باشد (حالت پیشفرض؟)، Xft ارتفاع قلم بیشتری را نسبت به حالتی که bool برابر با True باشد به fvwm اختصاص میدهد. این ممکن است چینش متن، ارتفاع عنوان آیکون و پنجره، فاصلهٔ خطوط در منوها و FvwmIdent، ارتفاع دکمه در برخی پودمانهای fvwm و ... غیره را تغییر دهد. با یک نمایشگر LCD میتوانید افزودن "rgba=mode" را امتحان کنید که در آن mode یکی از مقادیر rgb، bgr، vrgb یا vbgr برای فعالسازی رندر زیرپیکسلی (subpixel rendering) است. بهترین حالت به نحوهٔ چیدمان سلولهای LCD شما بستگی دارد. میتوانید مشخصات دیگری را نیز در میان ":" ارسال کنید، از قبیل "foundry=foundry_name"، "spacing=type" که در آن type میتواند monospace، proportional یا charcell باشد، "charwidth=integer"، "charheight=integer" یا "antialias=bool" که در آن bool برابر با True یا False است. به نظر میرسد که این پارامترها همیشه اعمال نمیشوند.
برای تعیین اینکه کدام قلمهای Xft واقعاً بارگذاری شدهاند، میتوانید مقدار XFT_DEBUG=1 را پیش از اجرای fvwm صادر (export) کنید و نگاهی به لاگ خطاها بیندازید. با Xft2 میتوانید از fc-list برای فهرست کردن قلمهای موجود استفاده کنید. به هر حال، پشتیبانی از Xft (از دیدگاه X و fvwm) آزمایشی است و کیفیت رندر به تعداد زیادی از پارامترها بستگی دارد (نسخههای XFree و freetype و کارت(های) گرافیک شما).
پس از نام قلم Xft میتوانید بعد از یک نویسهٔ ";" یک نام قلم XLFD (ساده یا گسترشیافته) بیفزایید، مانند:
xft:Verdana:pixelsize=14;-adobe-courier-bold-r-normal--14-*
سپس، اگر بارگذاری قلم Xft با شکست مواجه شود یا fvwm فاقد پشتیبانی Xft باشد، fvwm قلم "-adobe-courier-bold-r-normal—14-*" را بارگذاری میکند. این ویژگی امکان نوشتن فایلهای پیکربندی سازگار و قابلحمل (portable) را فراهم میآورد..SS "کدگذاری قلم و رشته (Font and string encoding)"
بهمحض بارگذاری یک قلم، fvwm کدگذاری (یا مجموعهنویسه) آن را با استفاده از نام قلم (دو فیلد آخر نام) پیدا میکند. fvwm فرض میکند رشتههایی که با این قلم نمایش داده میشوند از این کدگذاری استفاده میکنند (یک استثنا این است که اگر یک قلم iso10646-1 بارگذاری شود، آنگاه UTF-8 برای کدگذاری رشتهها فرض میشود). در وضعیت عادی، (i) یک قلم با دادن نام قلم بدون مشخص کردن کدگذاری بارگذاری میشود، (ii) کدگذاری قلم بارگذاریشده همان کدگذاری محلی (locale) است، و سپس (iii) رشتهها در فایلهای پیکربندی fvwm و همچنین نام پنجره و آیکون باید از کدگذاری محلی استفاده کنند. با Xft وضعیت کمی متفاوت است، زیرا Xft تنها از iso10646-1 و iso8859-1 پشتیبانی میکند. اگر یکی از این کدگذاریها را در نام قلم Xft مشخص نکنید، fvwm تبدیل رشتهها را طبق (iii) انجام میدهد. توجه داشته باشید که در قلمهای چندبایتی (بهویژه قلمهای «CJK») برای رندر مناسب متن، کدگذاری محلی باید با مجموعهنویسه قلم یکسان باشد.
برای نادیدهگرفتن قواعد پیشین، میتوان کدگذاری رشته را در ابتدای توصیف قلم به صورت زیر مشخص کرد:
StringEncoding=enc:_full_font_name_
که در آن enc کدگذاری پشتیبانیشده توسط fvwm است (معمولاً مجموعهنویسه نام قلم بههمراه چند کدگذاری یونیکد: UTF-8، USC-2، USC-4 و UTF-16).
برای نمونه، ممکن است از مجموعهنویسه محلی iso8859-1 استفاده کنید و یک FvwmForm به زبان روسی با کدگذاری koi8-r داشته باشید. در این حالت، کافی است با مشخص کردن کدگذاری در نام قلم، از FvwmForm بخواهید قلم koi8-r را بارگذاری کند. در یک زبان چندبایتی (از آنجا که قلم چندبایتی تنها زمانی بهخوبی کار میکند که کدگذاری محلی، همان مجموعهنویسه قلم باشد)، باید از یک قلم iso10646-1 استفاده کنید:
StringEncoding=jisx0208.1983-0:-*-fixed-medium-r-*-ja-*-iso10646-1
یا
"StringEncoding=jisx0208.1983-0:xft:Bitstream Cyberbit"
اگر پیکربندی FvwmForm شما از کدگذاری jisx0208.1983-0 استفاده میکند. امکان دیگر، استفاده از کدگذاری UTF-8 برای پیکربندی FvwmForm و استفاده از یک قلم iso10646-1 است:
-*-fixed-medium-r-*-ja-*-iso10646-1
یا
"StringEncoding=UTF-8:xft:Bitstream Cyberbit"
یا بهطور معادل
"xft:Bitstream Cyberbit:encoding=iso10646-1"
بهطور کلی قلمهای iso10646-1 همراه با کدگذاری رشتهای UTF-8 امکان نمایش هر نویسهای را در یک منوی مشخص، FvwmForm و غیره فراهم میسازند.
امروزه یونیکد روزبهروز بیشتر استفاده میشود و فایلهای متنی از کدگذاری UTF-8 بهره میبرند. با این وجود، در عمل نویسههای مورد استفاده در محدوده مجموعهنویسه محلی شما هستند. برای صرفهجویی در حافظه (یک قلم iso10646-1 ممکن است تعداد بسیار زیادی نویسه داشته باشد) یا به این دلیل که قلم زیبایی بدون مجموعهنویسه iso10646-1 دارید، میتوانید کدگذاری رشته را روی UTF-8 تنظیم کرده و از قلمی با مجموعهنویسه محلی استفاده کنید:
StringEncoding=UTF-8:-*-pretty_font-*-12-*
در بیشتر موارد، fvwm کدگذاری قلم را بهدرستی تشخیص میدهد. با این حال، نام برخی از قلمها به نامهای کدگذاری معتبر ختم نمیشود. هنگامی که نام قلم عادی نیست، برای نمونه:
-misc-fixed-*--20-*-my_utf8-36
باید کدگذاری را پس از نام قلم و با استفاده از یک اسلش به عنوان جداکننده اضافه کنید. برای نمونه:
MenuStyle * Font -misc-fixed-*--20-*-my_utf8-36/iso10646-1
اگر fvwm کدگذاری را پیدا کند، از توابع سیستمی iconv برای انجام تبدیل میان کدگذاریها استفاده میکند. متأسفانه استاندارد ثابتی وجود ندارد. برای تبدیل بین iso8859-1 و UTF-8: یک سیستم GNU از «ISO-8859-1» و سیستمهای دیگر از «iso881» برای تعریف مبدلها استفاده میکنند (هر دوی این نامها توسط fvwm پشتیبانی میشوند). افزون بر این، در برخی موارد ممکن است استفاده از مبدلهای مختص ماشین ضروری باشد. بنابراین، در صورت مواجهه با مشکل میتوانید اطلاعات مربوط به پیادهسازی iconv سیستم خود را به دست آورید (دستور «man iconv» ممکن است مفید باشد) و نامی را که مبدل بین کدگذاری قلم و UTF-8 را تعریف میکند، در انتهای نام قلم پس از راهنمای کدگذاری و یک / قرار دهید (راهکار ممکن دیگر استفاده از GNU libiconv است). برای نمونه از این ساختار استفاده کنید:
Style * Font -misc-fixed-*--14-*-iso8859-1/*/latin1
تا از latin1 برای تعریف مبدل برای کدگذاری iso8859-1 استفاده شود. نویسه «*» در میان «/»ها به fvwm اعلام میکند که کدگذاری را از انتهای نام قلم تشخیص دهد. از این ساختار استفاده کنید:
Style * Font \ -misc-fixed-*--14-*-local8859-6/iso8859-6/local_iso8859_6_iconv
تا fvwm وادار به استفاده از قلم با کدگذاری iso8859-6 شود (این مورد برای پشتیبانی از متون دوجهته یا bi-directionality سودمند است) و از local_iso8859_6_iconv برای تعریف مبدلها استفاده کند..SS "جلوههای سایه قلم (Font Shadow Effects)"
میتوان به قلمها جلوههای سهبعدی داد. در ابتدای نام قلم (یا دقیقاً پس از مشخصه احتمالی StringEncoding) عبارت زیر را اضافه کنید:
Shadow=size [offset] [directions]]:
size یک عدد صحیح مثبت است که تعداد پیکسلهای سایه را مشخص میکند. offset یک عدد صحیح مثبت اختیاری است که میزان فاصله (آفست) سایه از لبه نویسه را بر حسب پیکسل تعیین میکند. مقدار پیشفرض offset صفر است. directions مجموعهای اختیاری از جهتهایی است که سایه از نویسه به سمت آنها کشیده میشود. مقادیر directions فهرستی از جهتهای fvwm هستند که با فاصله از هم جدا میشوند:
N, North, Top, t, Up, u, -
E, East, Right, r, Right, r, ]
S, South, Bottom, b, Down, d, _
W, West, Left, l, Left, l, [
NE, NorthEast, TopRight, tr, UpRight, ur, ^
SE, SouthEast, BottomRight, br, DownRight, dr, >
SW, SouthWest, BottomLeft, bl, DownLeft, dl, v
NW, NorthWest, TopLeft, tl, UpLeft, ul, <
C, Center, Centre, .
در هر یک از جهتهای ارائهشده یک سایه نمایش داده میشود. مقدار All معادل تمامی جهتها است. مقدار پیشفرض direction برابر BottomRight است. با انتخاب جهت Center، سایه کل رشته را احاطه میکند. از آنجا که این حالت یک ابرمجموعه از تمامی جهتهای دیگر است، مشخص کردن آن به همراه هر جهت دیگری بیهوده خواهد بود.
جلوه سایه تنها با colorsetها کار میکند. رنگ سایه با استفاده از گزینه fgsh در دستور Colorset تعیین میشود. لطفاً برای جزئیات بیشتر درباره colorsetها، به بخش Colorsets مراجعه کنید.
نکته: یافتن قلم و ترکیب مناسب رنگهای fg، fgsh و bg برای اینکه این جلوه زیبا به نظر برسد ممکن است دشوار باشد، اما میتواند جلوه بسیار زیبایی خلق کند.
متن دوجهته (BI-DIRECTIONAL TEXT)
متون عربی و عبری برای نمایش صحیح به پشتیبانی از متن دوجهته (bi-directional) نیاز دارند؛ بدین معنا که رشتههای منطقی پیش از نمایش بصری باید تبدیل شوند تا زیررشتههای چپبهراست و راستبهچپ مشخص گردیده و بازآرایی شوند. در fvwm، اگر قلمهای استفادهشده برای نمایش متن متعلق به مجموعهنویسههایی باشند که به پشتیبانی از bidi (دوجهته) نیاز دارند، این کار به صورت خودکار در عنوان پنجرهها، منوها، برچسبهای ماژولها و سایر بخشها انجام میگیرد. به عنوان مثال، این شامل iso8859-6، iso8859-8 و iso10646-1 (یونیکد) میشود، اما دیگر قلمهای *-iso8859 را شامل نمیگردد.
این پشتیبانی از متن دوجهته با استفاده از گزینه زمان کامپایل کتابخانه fribidi انجام میشود، INSTALL.fvwm را ببینید.
میانبرهای صفحهکلید (KEYBOARD SHORTCUTS)
تقریباً تمامی عملیاتهای مدیر پنجره را میتوان از طریق صفحهکلید انجام داد، بنابراین کاربری بدون موش نیز امکانپذیر است. علاوه بر پیمایش در میزکار مجازی از طریق پیوند دادن دستور Scroll به کلیدهای مناسب، میتوان دستورهای Popup، Move، Resize و هر دستور دیگری را نیز به کلیدها پیوند داد. پس از آغاز یک دستور، نشانگر با استفاده از کلیدهای جهتنمای بالا، پایین، چپ و راست حرکت داده میشود و با فشردن کلید return عمل پایان مییابد. نگه داشتن کلید Shift باعث میشود نشانگر با گامهای بزرگتری حرکت کند و نگه داشتن کلید control حرکت نشانگر را در گامهای کوچکتری قرار میدهد. به جای کلیدهای جهتنما میتوان از کنترلهای استاندارد حرکت مکاننما در emacs و vi نیز استفاده کرد.
مدیریت نشست (SESSION MANAGEMENT)
برنامه fvwm از مدیریت نشست مطابق با پروتکل X Session Management Protocol پشتیبانی میکند. این ویژگی موقعیت، اندازه، ترتیب چیدمان (stacking order)، میزکار (desk)، چسبندگی (stickiness)، جمعشدگی (shadiness)، بیشینهبودن (maximizedness) و وضعیت نمادین (iconifiedness) را برای تمام پنجرهها ذخیره و بازیابی میکند. علاوه بر این، برخی از وضعیتهای سراسری نیز ذخیره میشوند.
برنامه fvwm هیچ اطلاعاتی را در رابطه با سبکها (styles)، تزئینات (decors)، توابع (functions) یا منوها ذخیره نمیکند. اگر در طول یک نشست هر یک از این منابع را تغییر دهید (مثلاً با اجرای دستورات Style یا استفاده از ماژولهای گوناگون)، این تغییرات پس از ذخیره و راهاندازی مجدد نشست از بین خواهند رفت. برای دائمی شدن، اینگونه تغییرات باید به فایل پیکربندی افزوده شوند.
آرگومانهای بولی (BOOLEAN ARGUMENTS)
تعدادی از دستورها یک یا چند آرگومان بولی میگیرند. این آرگومانها چند ورودی معادل را میپذیرند: مقادیر "yes" ،"on" ،"true" ،"t" و "y" همگی به عنوان درست (true) ارزیابی میشوند، در حالی که "no" ،"off" ،"false" ،"f" و "n" به عنوان نادرست (false) ارزیابی میگردند. برخی دستورها "toggle" را نیز میپذیرند که به این معناست که اگر قابلیت در حال حاضر فعال باشد غیرفعال میشود و بالعکس.
پیوندهای داخلی کلید و موش (BUILTIN KEY AND MOUSE BINDINGS)
دستورهای زیر به صورت توکار و داخلی در fvwm تعبیه شدهاند:
Key Help R A Popup MenuFvwmRoot Key F1 R A Popup MenuFvwmRoot Key Tab A M WindowList Root c c NoDeskSort Key Escape A MC EscapeFunc Mouse 1 R A Menu MenuFvwmRoot Mouse 1 T A FuncFvwmRaiseLowerX Move Mouse 1 FS A FuncFvwmRaiseLowerX Resize Mouse 2 FST A FuncFvwmRaiseLowerX Move AddToFunc FuncFvwmRaiseLowerX + I Raise + M $0 + D Lower
کلیدهای Help و F1 یک منوی توکار را که fvwm ایجاد میکند فرامیخوانند. این قابلیت در درجه اول برای کاربران جدیدی است که هنوز فایل پیکربندی اختصاصی خود را نساختهاند. فشردن هر یک از این دو کلید بر روی پنجره ریشه (پسزمینه)، منویی را برای کمک به شروع کار باز میکند.
فشردن کلید Tab در هر مکان به همراه پایین نگه داشتن کلید Alt (مشابه همان کلید در صفحهکلیدهای رایانههای شخصی)، فهرستی از پنجرهها را باز میکند.
دکمه ۱ موش بر روی نوار عنوان یا قاب جانبی میتواند پنجره را جابهجا کند، بالا بیاورد یا پایین ببرد.
دکمه ۱ موش بر روی گوشههای پنجره میتواند اندازه پنجره را تغییر دهد، آن را بالا بیاورد یا پایین ببرد.
میتوانید این پیوندها را بازنویسی یا حذف کنید. برای حذف پیوند فهرست پنجرهها، از این دستور استفاده کنید:
Key Tab A M -
دستورات ماژول و تابع (Module and Function Commands)
اگر fvwm با دستوری مواجه شود که آن را تشخیص نمیدهد، بررسی میکند که آیا دستور مشخصشده باید
Function (rest of command)
یا
Module (rest of command)
میبوده است یا خیر. این سازوکار اجازه میدهد توابع پیچیده یا ماژولها به شیوهای فراخوانی شوند که برای فایل پیکربندی کاملاً شفاف باشد.
مثال: فایل config شامل این خط است:
HelpMe
برنامه fvwm ابتدا به دنبال یک دستور fvwm به نام "HelpMe" میگردد و شکست میخورد. سپس به دنبال یک تابع پیچیدهٔ تعریفشده توسط کاربر به نام "HelpMe" میگردد. اگر چنین تابعی وجود نداشته باشد، fvwm تلاش میکند ماژولی به نام "HelpMe" را اجرا کند.
اجرای با تأخیر دستورات (Delayed Execution of Commands)
نکته: دستورات بسیاری وجود دارند که بر ظاهر و رفتار (look and feel) پنجرههای خاص، برخی پنجرهها یا همهٔ آنها اثر میگذارند، مانند Style، Mouse، Colorset، TitleStyle و بسیاری موارد دیگر. به دلایل کارایی، چنین تغییراتی بلافاصله اعمال نمیشوند، بلکه تنها زمانی اعمال میگردند که fvwm بیکار (idle) باشد؛ یعنی هیچ تعامل کاربری یا ورودی ماژولی در حال انتظار نباشد. بهطور خاص، گزینههای جدید Style که درون یک تابع تنظیم میشوند، تا پس از پایان تابع اعمال نمیشوند. این موضوع گاهی اوقات میتواند منجر به اثرات ناخواسته شود.
برای اجبار به اعمال فوری تمام تغییرات معلق، از دستورات UpdateStyles، Refresh یا RefreshWindow استفاده کنید.
نقلقول (QUOTING)
نقلقولها فقط زمانی لازم هستند که لازم باشد fvwm دو یا چند کلمه را یک آرگومان واحد در نظر بگیرد. نقلقولهای غیرضروری نیز مجازند. اگر میخواهید نویسهٔ نقلقول در متن شما وجود داشته باشد، باید با استفاده از نویسهٔ بکاسلش آن را گریزدهی (escape) کنید. به عنوان مثال، اگر یک منوی جهنده (pop-up) به نام "Window-Ops" داشته باشید، نیازی به نقلقول ندارید:
Popup Window-Ops
اما اگر خط تیره را با یک فاصله جایگزین کنید، به نقلقول نیاز خواهید داشت:
Popup "Window Ops"
نویسههای نقلقول پشتیبانیشده عبارتند از نقلقول دوتایی (double quote)، نقلقول تکی (single quote) و نقلقول تکی معکوس (reverse single quote یا backtick). با هر سه نوع نقلقول به شیوهٔ یکسانی برخورد میشود. نویسههای تکی را میتوان با یک بکاسلشِ پیشین نقلقول کرد. نقلقول نویسههای تکی حتی درون دیگر انواع نقلقولها نیز کار میکند.
بسط دستورات (COMMAND EXPANSION)
هر زمان که یک خط فرمان fvwm اجرا میشود، fvwm بسط پارامتر (parameter expansion) را انجام میدهد. یک پارامتر شامل یک '$' است که به دنبال آن کلمهای محصور در براکتها ($[...]) یا یک نویسهٔ خاص تکی میآید. اگر fvwm با پارامتری بدون نقلقول در خط فرمان مواجه شود، آن را به رشتهای که توسط نام پارامتر مشخص شده بسط میدهد. پارامترهای ناشناخته دستنخورده باقی میمانند. بسط پارامتر پیش از بررسی نقلقول انجام میشود. برای استفاده از یک '$' واقعی (تحتاللفظی) از "$$" استفاده کنید.
اگر ابتدای یک دستور پیشوند '-' قرار گیرد، بسط پارامتر انجام نمیشود. این قاعده برای دستوری اعمال میشود که بلافاصله پس از '-' قرار دارد و بسط معمولاً در آن رخ میداد. هنگام استفاده همزمان با سایر دستورات پیشوندی، باید قبل از پیشوند دیگر اضافه شود.
مثال:
Pick -Exec exec xmessage '$[w.name]'
یک کادر گفتگوی xmessage را با "$[w.name]" بدون بسط باز میکند.
متغیرهای طولانیتر ممکن است حاوی متغیرهای دیگری در داخل نام خود باشند که پیش از متغیر بیرونی بسط مییابند.
در نسخههای پیشین fvwm، برخی متغیرهای تکحرفی پشتیبانی میشدند. اکنون استفاده از آنها منسوخ شده است، زیرا مشکلات متعددی ایجاد میکنند. باید به جای آنها از جایگزینهای طولانیتر استفاده کنید.
مثال:
# Print the current desk number, horizontal page number # and the window's class (unexpanded here, no window). Echo $[desk.n] $[page.nx] $[w.class]
نکته: اگر دستور خارج از بافت یک پنجره فراخوانی شود، به جای نام کلاس، مقدار "$[w.class]" را چاپ میکند. معمولاً قرار گرفتن اشارهگر روی یک پنجره برای داشتن بافت پنجره کافی نیست. برای اجبار به استفاده از پنجرهای که فوکوس دارد، میتوان از دستور Current استفاده کرد:
Current Echo $[desk.n] $[page.nx] $[w.class]
پارامترهای شناختهشده توسط fvwm عبارتند از:
$$
$.
$0 to $9
$*
$[n]
$[n-m]
$[n-]
$[*]
$[version.num]
$[version.info]
$[version.line]
$[vp.x] $[vp.y] $[vp.width] $[vp.height]
$[wa.x] $[wa.y] $[wa.width] $[wa.height]
$[dwa.x] $[dwa.y] $[dwa.width] $[dwa.height]
$[desk.count]
$[desk.n]
$[desk.name<n>]
$[desk.width] $[desk.height]
$[desk.pagesx] $[desk.pagesy]
$[page.nx] $[page.ny]
$[w.id]
$[w.name] $[w.iconname] $[w.class] $[w.resource] $[w.visiblename] $[w.iconfile] $[w.miniiconfile] $[w.iconfile.svgopts] $[w.miniiconfile.svgopts]
توجه: ۵ متغیر اول ممکن است شامل هر نوع نویسهای باشند، بنابراین این متغیرها نقلقول میشوند. این بدان معناست که مقدار در نویسههای نقلقول تکی محصور شده و هر نقلقول تکیِ موجود در آن، با یک بکاسلش پیشوند میگیرد. این امر تضمین میکند که دستوراتی مانند:
Style $[w.resource] Icon norm/network.png
صرفنظر از هرگونه نماد خاصی که مقدار ممکن است شامل آن باشد (مانند فاصلهها و انواع مختلف نقلقولها)، به درستی کار کنند.
در مورد نام مرئی پنجره، این مقداری است که از عنوان تحتاللفظی پنجره که در نوار عنوان نمایش داده میشود بازگردانده میشود. معمولاً این مقدار پس از بسط مشابه $[w.name] خواهد بود، هرچند در صورت استفاده از IndexedWindowName این تمایز مفیدتر است و اجازه میدهد برای مواردی مانند دستورات Style، با استفاده از نام مرئی به پنجرهٔ خاصی ارجاع داده شود.
$[w.x] $[w.y] $[w.width] $[w.height]
$[w.pagex] $[w.pagey]
$[w.desk]
$[w.layer]
$[w.screen]
$[cw.x] $[cw.y] $[cw.width] $[cw.height]
$[i.x], $[it.x], $[ip.x] $[i.y], $[it.y], $[ip.y] $[i.width], $[it.width], $[ip.width] $[i.height], $[it.height], $[ip.height]
$[pointer.x] $[pointer.y]
$[pointer.wx] $[pointer.wy]
$[pointer.cx] $[pointer.cy]
$[pointer.screen]
این متغیر منسوخ شده است؛ به جای آن از $[monitor.current] استفاده کنید.
$[monitor.<n>.x], $[monitor.<n>.y], $[monitor.<n>.width], $[monitor.<n>.height], $[monitor.<n>.desk], $[monitor.<n>.pagex], $[monitor.<n>.pagey] $[monitor.primary], $[monitor.prev_primary], $[monitor.current], $[monitor.prev] $[monitor.output], $[monitor.number] $[monitor.count], $[monitor.<n>.prev_desk], $[monitor.<n>.prev_pagex], $[monitor.<n>.prev_pagey]
مقدار <n> باید یک نام خروجی معتبر xrandr(1) باشد.
مقدار "x" موقعیت افقی (x) مانیتور را بازمیگرداند؛ "y" موقعیت عمودی (y) مانیتور را بازمیگرداند؛ "width" عرض مانیتور (به پیکسل) را بازمیگرداند؛ "height" ارتفاع مانیتور (به پیکسل) را بازمیگرداند.
مقدار "number" موقعیت مانیتور را در ساختار درختی بازمیگرداند. بخش RANDR SUPPORT را ببینید.
مقدار "current" همانند متغیر منسوخشدهٔ $[screen.pointer] است؛ مانیتوری که اشارهگر ماوس روی آن قرار دارد.
مقدار "prev" مانیتور دارای فوکوس قبلی را بازمیگرداند، یا اگر وجود نداشته باشد یک رشته خالی بازمیگرداند.
مقدار "count" تعداد مانیتورهای فعال را بازمیگرداند.
مقدار "desk" میزکار فعلی نمایشدادهشده روی مانیتور ارجاعشده را بازمیگرداند.
مقدار "pagex" صفحهٔ X روی مانیتور ارجاعشده را بازمیگرداند.
مقدار "pagey" صفحهٔ Y روی مانیتور ارجاعشده را بازمیگرداند.
مقدار "primary" نام خروجیای است که از طریق xrandr(1) به عنوان مانیتور اصلی تنظیم شده است.
مقدار "prev_primary" نام خروجیای است که مانیتور اصلی پیشین بوده است.
مقدار "prev_desk" میزکار قبلی روی مانیتور ارجاعشده را بازمیگرداند.
مقدار "prev_pagex" صفحهٔ X قبلی روی مانیتور ارجاعشده را بازمیگرداند.
مقدار "prev_pagey" صفحهٔ Y قبلی روی مانیتور ارجاعشده را بازمیگرداند.
$[screen]
$[screen.count]
این متغیر منسوخ شده است؛ به جای آن از $[monitor.count] استفاده کنید.
$[fg.cs<n>] $[bg.cs<n>] $[hilight.cs<n>] $[shadow.cs<n>] $[fgsh.cs<n>]
اگر .lighten<p> یا .darken<p> به انتهای پارامترها اضافه شود، آنها در عوض با رنگی جایگزین میشوند که به اندازهٔ یک مقدار درصدی <p> (بین 0 تا 100) نسبت به رنگ تعریفشده در مجموعهرنگ <n> روشنتر یا تیرهتر است. برای مثال "$[bg.cs3.lighten15]" به رنگ پسزمینهٔ مجموعهرنگ ۳ بسط داده شده و سپس ۱۵٪ روشنتر میشود (در قالب rgb:rrrr/gggg/bbbb).
اگر .hash به انتها افزوده شود، خروجی رنگ از قالب #rrggbb استفاده خواهد کرد (به جای rgb:rrrr/gggg/bbbb). برای مثال، $[bg.cs3.hash] یا $[bg.cs3.lighten15.hash].
لطفاً برای جزئیات مربوط به مجموعهرنگها به بخش Colorsets مراجعه کنید.
$[math.+.<x>,<y>] $[math.-.<x>,<y>] $[math.*.<x>,<y>] $[math./.<x>,<y>] $[math.%.<x>,<y>] $[math.^.<x>,<y>] $[math.<.<x>,<y>] $[math.>.<x>,<y>]
ویرگول در "<x>,<y>" برای فراهم کردن امکان استفاده از اعداد اعشاری در آینده است. تمام عملیاتها از محاسبات اعداد صحیح زبان C استفاده میکنند. حاصل تقسیم اعداد صحیح برابر با خارجقسمت است. از عملگر باقیمانده میتوان برای به دست آوردن باقیماندهٔ تقسیم اعداد صحیح استفاده کرد. توجه داشته باشید که عملگر باقیمانده در C برای مقادیر منفی، باقیماندههای منفی بازمیگرداند. در نهایت، در صورتی که <y> منفی باشد، عملیات توان مقدار 1 را برمیگرداند.
$[schedule.last]
$[schedule.next]
$[cond.rc]
$[func.context]
Mouse 3 FS N WindowShade $$[func.context]
$[debuglog.state]
$[gt.str]
$[infostore.key]
$[...]
چندین مثال را میتوان در بخش توضیحات دستور AddToFunc یافت.
برای دستیابی به جلوههای پیچیدهتر، fvwm دارای چندین دستور است که تواناییهای اسکریپتنویسی آن را بهبود میبخشند. اسکریپتها را میتوان با Read از یک فایل، با PipeRead از خروجی یک دستور، یا با دستور AddToFunc به صورت یک تابع پیچیده خواند یا نوشت. برای علاقهمندان، بخش ۷ از FAQ مربوط به fvwm برخی از کاربردهای واقعی اسکریپتنویسی را نشان میدهد. لطفاً برای جزئیات به بخشهای User Functions and Shell Commands و Conditional Commands مراجعه کنید. یک هشدار: در حین اجرای توابع پیچیده، fvwm نیاز دارد تمام ورودیها را از اشارهگر ماوس دریافت کند (به اصطلاح سامانهٔ X، اشارهگر «grab» یا تسخیر میشود). در زمان اجرای یک تابع، هیچ برنامهٔ دیگری نمیتواند ورودیای از اشارهگر دریافت کند. این امر ممکن است موجب سردرگمی برخی برنامهها شود. برای مثال، برنامهٔ xwd در صورت اجرا از طریق یک تابع پیچیده، از گرفتن تصویر صفحه خودداری میکند. برای دستیابی به عملکردی مشابه، میتوانید در عوض از دستورهای Read یا PipeRead استفاده کنید.
مفاهیم و دستورهای منو (MENU CONCEPTS AND COMMANDS)
لطفاً به صفحهٔ راهنمای fvwm3menus مراجعه کنید.
فهرست دستورهای FVWM (LIST OF FVWM COMMANDS)
لطفاً به صفحات راهنمای fvwm3commands و fvwm3styles مراجعه کنید.
محیط (ENVIRONMENT)
متغیرهای محیطی که بر نحوهٔ عملکرد fvwm تأثیر میگذارند عبارتاند از:
DISPLAY
FVWM_USERDIR
FVWM3_LOGFILE
FVWM_DATADIR
FVWM_MODULEDIR
SESSION_MANAGER
SESSION_MANAGER_NAME
SM_SAVE_DIR
نویسندگان (AUTHORS)
Robert Nation با کمک افراد بسیار، بر پایهٔ کد twm که توسط Tom LaStrange نوشته شده بود. پس از Robert Nation نوبت به Charles Hines رسید و سپس Brady Montz. در حال حاضر fvwm توسط تعدادی از افراد در فهرست پستی fvwm-workers توسعه مییابد.
کپیرایت و تکثیر (COPYRIGHT)
نرمافزار fvwm و تمامی ماژولها، اسکریپتها و فایلهای دیگر ارائهشده همراه با این توزیع، تحت مجوز عمومی همگانی گنو (GPL) منتشر میشوند. لطفاً برای جزئیات به فایل COPYING ارائهشده همراه fvwm مراجعه کنید.
گزارش باگها (BUGS)
گزارشهای اشکال را میتوان به فهرست پستی fvwm-workers به نشانی زیر ارسال کرد: <fvwm-workers@fvwm.org>
صفحهٔ خانگی رسمی fvwm: http://fvwm.org
| 2026-06-28 |