| FVWM3COMMANDS(1) | FVWM3COMMANDS(1) |
نام (NAME)
fvwm3commands - دستورات توکار fvwm
فهرست دستورات FVWM (LIST OF FVWM COMMANDS)
توضیحات دستورات زیر در بخشهای زیر گروهبندی شدهاند. این بخشها بر اساس میزان کاربرد و فایده برای کاربران تازهکار مرتب شدهاند.
دستورات متفرقه (Miscellaneous Commands)
BugOpts [option [bool]], ...
گزینه DebugRandR پیامهای اشکالزدایی چیدمان مانیتور را فعال میکند.
گزینه FlickeringMoveWorkaround رویدادهای ConfigureNotify را که معمولاً هنگام جابجایی پنجره به برنامه ارسال میشوند، غیرفعال میکند. اگر برخی از پنجرهها هنگام جابجا شدن بهطور آزاردهندهای چشمک میزنند یا پرش دارند، این گزینه ممکن است کمککننده باشد. توجه داشته باشید که وقوع این مشکل خطای fvwm نیست، بلکه اشکال از خود برنامه است.
گزینه MixedVisualWorkaround باعث میشود fvwm پیش از انجام برخی عملیات با استفاده از جلوههای بصری پنجره ریشه، نقشه رنگ (colormap) ریشه را نصب کند. این گزینه فقط زمانی مفید است که از گزینه -visual برای راهاندازی fvwm استفاده شده باشد و آن هم فقط با برخی پیکربندیهای سرورهای خاص (مانند Exceed 6.0 با یک ریشه ۸ بیتی PseudoColor و fvwm که از یک جلوه بصری ۲۴ بیتی TrueColor استفاده میکند).
گزینه ModalityIsEvil کنترل میکند که آیا برنامههای Motif امکان داشتن پنجرههای گفتگوی مدال (کادرهای محاورهای که شما را مجبور میکنند ابتدا آنها را ببندید تا بتوانید کار دیگری انجام دهید) را دارند یا خیر. حالت پیشفرض این است که به برنامهها اجازه داشتن کادرهای گفتگوی مدال داده نشود. از این گزینه با احتیاط استفاده کنید. پس از روشن شدن این گزینه، برای خاموش کردن آن باید fvwm را مجدداً راهاندازی کنید.
گزینه RaiseOverNativeWindows باعث میشود fvwm تلاش کند پنجرههای تحت مدیریت خود را بالاتر از پنجرههای بومی سیستم میزبان سرور X قرار دهد. این ویژگی برای برخی سرورهای X که تحت ویندوز، ویندوز NT یا Mac OS X اجرا میشوند مورد نیاز است. fvwm تلاش میکند تشخیص دهد که آیا تحت چنین سرور X اجرا میشود یا خیر و پرچم را متناسب با آن مقداردهی اولیه میکند.
گزینه RaiseOverUnmanaged باعث میشود fvwm پنجرههای تحت مدیریت خود را بالاتر از پنجرههای override_redirect بالا بیاورد. این گزینه برای مقابله با برنامههای ناسازگاری استفاده میشود که برخلاف قراردادهای ICCCM از پنجرههای طولانیمدت از این نوع استفاده میکنند. این گزینه همچنین همراه با گزینه سبک Unmanaged مفید است.
گزینه FlickeringQtDialogsWorkaround پرش پنجره دارای تمرکز را در برخی ماژولها هنگام استفاده از برنامههای KDE یا Qt با پنجرههای گفتگوی مدال سرکوب میکند. این گزینه بهطور پیشفرض فعال است. ممکن است این گزینه برای سایر برنامههایی که از پنجرههای مدیریتنشده توسط fvwm استفاده میکنند از نظر بصری مزاحمت ایجاد کند. از آنجا که چنین برنامههایی نادر هستند، احتمالاً امن است که این گزینه در حالت پیشفرض خود باقی بماند.
گزینه QtDragnDropWorkaround ارسال پیامهای ناشناخته ClientEvent به پنجرهها را متوقف میکند؛ این کار معمولاً بیضرر است، اما Qt در مدیریت پیامهای ناشناخته ClientEvent مشکلاتی دارد. بنابراین فعال کردن این گزینه ممکن است برای برنامههای Qt که از کشیدن و رها کردن (DragnDrop) استفاده میکنند مفید باشد. این گزینه بهطور پیشفرض غیرفعال است.
گزینه EWMHIconicStateWorkaround برای پیجرها یا نوارهای وظیفه سازگار با EWMH مورد نیاز است که پنجرههای موجود در میزکارهای دیگر را بهصورت آیکونشده نمایش میدهند. این پیجرها و نوارهای وظیفه از نسخهای از مشخصات EWMH قبل از نسخه 1.2 (نسخههای کنونی KDE 2 و 3) استفاده میکنند. این ابزارها از وضعیت IconicState WM_STATE برای تعیین اینکه آیا یک برنامه آیکون شده است یا خیر استفاده میکنند. این وضعیت، بر اساس ICCCM، لزوماً به این معنی نیست که پنجره آیکون شده است (به معنای معمول). روشن کردن این گزینه fvwm را مجبور میکند بین وضعیت IconicState WM_STATE و پنجره آیکونشده یکسانی برقرار کند. این کار انطباق با ICCCM را نقض میکند اما نباید مشکلات بزرگی ایجاد کند. این گزینه بهطور پیشفرض غیرفعال است.
با فعال بودن گزینه DisplayNewWindowNames، fvwm نام، نام آیکون (در صورت وجود)، منبع (resource) و کلاس پنجرههای جدید را در کنسول چاپ میکند. این کار میتواند به یافتن رشتههای صحیح برای استفاده در دستور Style کمک کند.
هنگامی که گزینه ExplainWindowPlacement فعال است، هر زمان که پنجره جدیدی جایگذاری میشود یا از PlaceAgain استفاده میشود، fvwm پیامی را در کنسول چاپ میکند. این پیام توضیح میدهد که پنجره در کدام میزکار، صفحه، نمایشگر و موقعیت قرار گرفته و چرا. این گزینه میتواند برای درک اینکه چرا یک پنجره خاص در جایی که انتظار دارید ظاهر نمیشود، استفاده شود.
گزینه DebugCRMotionMethod برخی کدهای اشکالزدایی را در روالهای مدیریت ConfigureRequest در fvwm فعال میکند. این گزینه برای کاربر معمولی مفید نیست، اما اگر اشکالی را به تیم fvwm گزارش دهید ممکن است از شما خواسته شود این گزینه را فعال کنید.
گزینه TransliterateUtf8 نویسهگردانی را در حین تبدیل از رشتههای utf-8 فعال میکند. بهطور پیشفرض fvwm در حین تبدیل نویسهگردانی نمیکند، اما اگر تبدیل از utf-8 به دلیل وجود نویسههایی که معادل مستقیمی در مجموعه نویسه مقصد ندارند با شکست مواجه شود، به رشتههای جایگزین ارائهشده توسط کلاینتها رجوع میکند. با این حال برخی کلاینتها مشخصههای غیر utf-8 را بهدرستی تنظیم نمیکنند که در این صورت این گزینه میتواند کمککننده باشد.
BusyCursor [Option bool], ...
BusyCursor DynamicMenu False, ModuleSynchronous False, \ Read False, Wait False
گزینه * به تمام گزینههای موجود اشاره دارد.
گزینه Read دستور PipeRead را کنترل میکند.
گزینه DynamicMenu بر گزینههای DynamicPopupAction و MissingSubmenuFunction از دستور AddToMenu تأثیر میگذارد. اگر این گزینه روی "False" تنظیم شود، نشانگر مشغول در حین اجرای دستور منوی پویا نمایش داده نمیشود، حتی اگر این دستور یک دستور Read یا PipeRead باشد و گزینه Read روی "True" تنظیم شده باشد.
گزینه ModuleSynchronous بر دستور ModuleSynchronous تأثیر میگذارد. اگر این گزینه روی "False" تنظیم شود، هنگامی که fvwm منتظر است تا ماژولی که توسط ModuleSynchronous راهاندازی شده مراحل شروع خود را تکمیل کند، نشانگر مشغول نمایش داده نمیشود.
گزینه Wait فقط بر نشانگر پنجره ریشه تأثیر میگذارد. در طول توقف wait، نشانگر ریشه با نشانگر مشغول جایگزین میشود و fvwm همچنان کاملاً فعال و پاسخگو باقی میماند (میتوانید از مکث خارج شوید، به دستور EscapeFunc مراجعه کنید). اگر میخواهید از این گزینه استفاده کنید و از نشانگر پیشفرض ریشه استفاده نمیکنید، باید نشانگر ریشه خود را با دستور CursorStyle تنظیم کنید.
ClickTime [delay]
دستور ClickTime همچنین تاخیر بین دو کلیک را که باید به عنوان دوبار کلیک (دابل کلیک) تفسیر شود، مشخص میکند.
ColormapFocus FollowsMouse | FollowsFocus
ColormapFocus FollowsFocus
در این صورت نقشه رنگ نصبشده متعلق به پنجرهای خواهد بود که در حال حاضر تمرکز صفحهکلید را در اختیار دارد.
CursorStyle context [num | name | None | Tiny | file [x y] [fg bg]]
POSITION (top_left_corner)
TITLE (top_left_arrow)
DEFAULT (top_left_arrow)
SYS (hand2)
MOVE (fleur)
RESIZE (sizing)
WAIT (watch)
MENU (top_left_arrow)
SELECT (crosshair)
DESTROY (pirate)
TOP (top_side)
RIGHT (right_side)
BOTTOM (bottom_side)
LEFT (left_side)
TOP_LEFT (top_left_corner)
TOP_RIGHT (top_right_corner)
BOTTOM_LEFT (bottom_left_corner)
BOTTOM_RIGHT (bottom_right_corner)
TOP_EDGE (top_side)
RIGHT_EDGE (right_side)
BOTTOM_EDGE (bottom_side)
LEFT_EDGE (left_side)
ROOT (left_ptr)
مقادیر پیشفرض در پرانتزهای بالا نشان داده شدهاند. اگر مایل باشید نشانگر پیشفرض را برای یک زمینه خاص بازیابی کنید، میتوانید آرگومان دوم را حذف نمایید.
آرگومان دوم یا مقدار عددی نشانگر است همانطور که در فایل هدر X11/cursorfont.h تعریف شده، یا نام آن (بدون پیشوند XC_). از طرف دیگر، میتوان نام فایل xpm را نیز مشخص کرد. این نام همچنین میتواند None (بدون نشانگر) یا Tiny (یک تکپیکسل به عنوان نشانگر) باشد.
# تنظیم نشانگر نابودی روی XC_gumby (هر دو فرمت معتبرند): CursorStyle DESTROY 56 CursorStyle DESTROY gumby
همچنین نشانگر را میتوان از یک فایل تصویر (XPM، PNG یا SVG) بارگذاری کرد. اگر fvwm با پشتیبانی از Xcursor کامپایل شده باشد، از فرمت کامل ARGB استفاده میشود و فایلهای نشانگر (احتمالاً متحرک) ساختهشده با برنامه xcursorgen قابل بارگذاری هستند. در غیر این صورت، نشانگر به حالت تکرنگ (monochrome) تبدیل میشود.
آرگومانهای اختیاری x و y (پس از آرگومان file) مختصات نقطه حساس (hot-spot) را تعیین میکنند که در آن 0 0 گوشه بالا و سمت چپ تصویر است. مختصات درون محدوده تصویر معتبر بوده و بر هر نقطه حساسی که در فایل تصویر (XPM/Xcursor) تعریف شده اولویت دارد. یک نقطه حساس نامعتبر یا تعریفنشده در مرکز تصویر قرار میگیرد.
CursorStyle ROOT cursor_image.png 0 0
آرگومانهای اختیاری fg و bg رنگهای پیشزمینه و پسزمینه نشانگر را تعیین میکنند که پیشفرض آنها سیاه و سفید است. این رنگها تنها با نشانگرهای تکرنگ استفاده میشوند و در غیر این صورت نادیده گرفته خواهند شد.
CursorStyle ROOT nice_arrow.xpm yellow black
DefaultFont [fontname]
DefaultIcon filename
DefaultLayers bottom put top
Deschedule [command_id]
Emulate Fvwm | Mwm | Win
EscapeFunc
Key Escape A MC - Key Escape A S EscapeFunc
توالی کلیدهای Ctrl-Alt-Escape را با Shift-Escape برای لغو توقف دستور Wait و دستور ModuleSynchronous جایگزین میکند. دستور EscapeFunc اگر خارج از دستور Key استفاده شود کاری انجام نمیدهد.
FakeClick [command value] ...
FakeClick depth 2 press 1 wait 250 release 1
این دستور یک کلیک با دکمه ۱ را در پنجره والد (عمق ۲) با تاخیر ۲۵۰ میلیثانیه بین فشردن و رها کردن شبیهسازی میکند. توجه: تمام نامهای دستورات را میتوان با حرف اول آنها خلاصه کرد.
FakeKeypress [command value] ...
ذخیره تمامی نشستهای GVim با: "Esc:w\n"
All (gvim) FakeKeypress press Escape \
press colon \
press w \
press Return
ذخیره و خروج از تمامی نشستهای GVim با: "Esc:wq\n"
All (gvim) FakeKeypress press Escape \
press colon \
press w \
press q \
press Return
ارسال A به یک پنجره مشخص:
WindowId 0x3800002 FakeKeypress press A
توجه: تمامی نامهای دستورات را میتوان با حرف اول آنها خلاصه کرد.
ImagePath path
اگر دایرکتوری به صورت "/some/dir;.ext" مشخص شود، به این معنی است که تمامی تصاویر در این دایرکتوری دارای پسوند ".ext" هستند که باید اجبار شود. نام تصویر اصلی (که ممکن است پسوند دیگری داشته باشد یا اصلاً پسوندی نداشته باشد) بررسی نمیشود، بلکه ".ext" اضافه شده یا جایگزین پسوند اصلی میگردد. این قابلیت به عنوان مثال زمانی مفید است که کاربر دایرکتوریهایی از تصاویر با پسوند ".xpm" و دایرکتوریهای دیگری با همان نامها اما تصاویر ".png" داشته باشد.
مسیر path میتواند حاوی متغیرهای محیطی مانند $HOME (یا ${HOME}) باشد. علاوه بر این، علامت '+' در مسیر به مقدار قبلی مسیر گسترش مییابد و امکان افزودن آسان به انتها یا ابتدای مسیر را فراهم میکند.
به عنوان مثال:
ImagePath $HOME/icons:+:/usr/include/X11/bitmaps
LocalePath path
/install_prefix/share/locale;fvwm
که در آن install_prefix دایرکتوری نصب fvwm است. با چنین مسیر محلی، ترجمهها در مسیر زیر جستجو میشوند:
/install_prefix/share/locale/lang/LC_MESSAGES/fvwm.mo
که در آن lang به پیکربندی محلی (locale) بستگی دارد. اگر هیچ دایرکتوری مشخص نشود، مسیر دایرکتوری پیشفرض در نظر گرفته میشود. اگر دامنه متنی مشخص نشود، fvwm فرض میگردد. بدون آرگومان، مسیر محلی پیشفرض بازیابی میشود.
همانند دستور ImagePath، مقدار path میتواند شامل متغیرهای محیطی و علامت '+' برای الحاق آسان به ابتدا یا انتهای مسیر محلی باشد.
به عنوان مثال، بسته fvwm-themes از دستور زیر برای افزودن کاتالوگهای محلی استفاده میکند:
LocalePath ";fvwm-themes:+"
کاتالوگ پیشفرض fvwm شامل چند رشته است که توسط خود فایل اجرایی fvwm استفاده میشوند (Desk و Geometry) و رشتههایی که در برخی فایلهای پیکربندی پیشفرض و پیکربندی FvwmForm به کار میروند. برای مشاهده فهرست رشتهها با ترجمه احتمالی به زبانهای گوناگون میتوانید به زیردایرکتوری po/ در سورسکد fvwm نگاهی بیندازید. در حال حاضر زبانهای بسیار کمی پشتیبانی میشوند.
کاربرد اصلی کاتالوگهای محلی از طریق پارامتر "$[gt.string]" است:
DestroyMenu MenuFvwmWindowOps AddToMenu MenuFvwmWindowOps "$[gt.Window Ops]" Title + "$[gt.&Move]" Move + "$[gt.&Resize]" Resize + "$[gt.R&aise]" Raise + "$[gt.&Lower]" Lower + "$[gt.(De)&Iconify]" Iconify + "$[gt.(Un)&Stick]" Stick + "$[gt.(Un)Ma&ximize]" Maximize + "" Nop + "$[gt.&Close]" Close + "$[gt.&Destroy]" Destroy
اگر ترجمهها در دسترس باشند، منویی را به زبانهای محلی ارائه میدهد.
توجه داشته باشید که ماژول FvwmScript مجموعهای از دستورالعملهای ویژه برای ترجمه رشتهها دارد. توضیح نحوه ساخت کاتالوگهای محلی خارج از محدوده این بحث است. لطفاً به مستندات GNU gettext مراجعه کنید.
PrintInfo subject [verbose]
آرگومان عدد صحیح اختیاری verbose سطح جزئیات اطلاعات ارائهشده را مشخص میکند. موضوعات معتبر فعلی عبارتند از:
موضوع Colors که اطلاعاتی را درباره رنگهای استفادهشده توسط fvwm چاپ میکند. این مورد در نمایشگرهایی که تنها میتوانند ۲۵۶ رنگ (یا کمتر) را همزمان نمایش دهند مفید است. اگر مقدار verbose برابر یک یا بیشتر باشد، پالت استفادهشده توسط fvwm چاپ میشود. اگر پالت رنگ محدودی دارید و رنگهایتان تمام شده است، این دستور ممکن است مفید باشد.
موضوع ImageCache که اطلاعات مربوط به تصاویر بارگذاریشده توسط fvwm را چاپ میکند. اگر مقدار verbose برابر یک یا بیشتر باشد، تمام تصاویر موجود در حافظه پنهان همراه با دفعات استفاده مجدد از آنها فهرست میشوند.
موضوع Locale که اطلاعات مربوط به تنظیمات محلی و فونتهای استفادهشده توسط fvwm را چاپ میکند. مقدار verbose میتواند ۱ یا ۲ باشد.
موضوع nls که اطلاعات مربوط به کاتالوگهای محلی استفادهشده توسط fvwm را چاپ میکند.
موضوع bindings که اطلاعات مربوط به تمامی کلیدهای میانبر و اتصالات ماوس تعریفشده در fvwm را چاپ میکند. مقدار verbose با این گزینه تأثیری ندارد.
موضوع infostore که اطلاعات مربوط به تمامی مدخلهای موجود در infostore را چاپ کرده و کلید و مقدار آن را فهرست میکند. مقدار verbose با این گزینه تأثیری ندارد.
Schedule [Periodic] delay_ms [command_id] command
توجه: شناسه یک پنجره همانطور که با $[w.id] برگردانده میشود میتواند به عنوان command_id استفاده شود. مثال:
Current Schedule 1000 $[w.id] WindowShade
دستور Schedule همچنین از کلیدواژه اختیاری Periodic پشتیبانی میکند که نشان میدهد دستور command باید هر delay_ms یکبار اجرا شود. مثال:
Schedule Periodic 10000 PipeRead '[ -N "$MAIL" ] && echo \ Echo You have mail'
برای توقف دستورات دورهای از دستور Deschedule استفاده کنید.
State state [bool]
WindowList [(conditions)] [position] [options] [double-click-action]
قالب بخش هندسه به این صورت است: desk(layer): x-geometry sticky، که در آن desk و layer شمارههای مربوطه هستند و sticky خالی یا حرف بزرگ S است. هندسه پنجرههای آیکونشده داخل پرانتز نشان داده میشود. انتخاب یک مورد از منوی بازشوی فهرست پنجرهها باعث میشود تابع تفسیری "WindowListFunc" با شناسه آن پنجره که به صورت $0 ارسال میشود، اجرا گردد. تابع پیشفرض "WindowListFunc" به این صورت است:
AddToFunc WindowListFunc + I Iconify off + I FlipFocus + I Raise + I WarpToWindow 5p 5p
اگر این پیشفرضها برای شما مناسب نیستند، میتوانید "WindowListFunc" توکار را حذف کرده و تابع اختصاصی خود را بسازید.
منوی فهرست پنجرهها از سبک منوی "WindowList" در صورت تعریف شدن استفاده میکند (به دستور MenuStyle مراجعه کنید). در غیر این صورت سبک منوی پیشفرض به کار گرفته میشود. برای بازگشت به سبک پیشفرض منو، دستور زیر را اجرا کنید:
DestroyMenuStyle WindowList
مثال:
MenuStyle WindowList SelectOnRelease Meta_L
پارامتر conditions میتواند برای حذف پنجرههای خاصی از فهرست پنجرهها استفاده شود. برای جزئیات به دستور Current مراجعه کنید. فقط پنجرههایی که با شرایط دادهشده مطابقت دارند در فهرست پنجرهها نمایش داده میشوند. گزینههای options زیر برعکس عمل میکنند: پنجرههایی که در غیر این صورت در فهرست پنجرهها قرار نمیگیرند، با آنها قابل انتخاب هستند. پارامتر conditions همواره بر options اولویت دارد.
آرگومانهای position همانند دستور Menu هستند. دستور double-click-action در صورتی فراخوانی میشود که کاربر هنگام باز کردن فهرست پنجرهها دوبار کلیک کند (یا اگر منو به یک کلید متصل است، آن کلید را سریعاً دوبار فشار دهد). اگر double-click-action از بیش از یک کلمه تشکیل شده باشد، باید داخل علامت نقلقول قرار گیرد.
دستور double-click-action برای تعریف یک پنجره پیشفرض زمانی که فهرست پنجرهها را مانند زیر به یک کلید (یا دکمه) متصل کردهاید مفید است:
# در اینجا یک تابع موجود را فراخوانی میکنیم، # اما میتواند متفاوت باشد. AddToFunc SwitchToWindow + I WindowListFunc Key Tab A M WindowList "Prev SwitchToWindow"
با فشردن کلید Alt-Tab یک بار فهرست پنجرهها باز میشود و با دو بار فشردن آن، تمرکز بین پنجره فعلی و پنجره قبلی جابجا میگردد. با سبک منوی مناسب SelectOnRelease (به مثال بالا نگاه کنید)، به محض رها کردن کلید Alt پنجره انتخاب میشود.
گزینههای ارسالشده به WindowList با کاما از هم جدا میشوند و میتوانند موارد زیر باشند: Geometry / NoGeometry / NoGeometryWithInfo، NoDeskNum، NoLayer، NoNumInDeskTitle، NoCurrentDeskTitle، MaxLabelWidth width، TitleForAllDesks، Function funcname، Desk desknum، CurrentDesk، NoIcons / Icons / OnlyIcons، NoNormal / Normal / OnlyNormal، NoSticky / Sticky / OnlySticky، NoStickyAcrossPages / StickyAcrossPages / OnlyStickyAcrossPages، NoStickyAcrossDesks / StickyAcrossDesks / OnlyStickyAcrossDesks، NoOnTop / OnTop / OnlyOnTop، NoOnBottom / OnBottom / OnlyOnBottom، Layer m [n]، UseSkipList / OnlySkipList، NoDeskSort، ReverseOrder، CurrentAtEnd، IconifiedAtEnd، UseIconName، Alphabetic / NotAlphabetic، SortByResource، SortByClass، NoHotkeys، SelectOnRelease، ShowPage، ShowPageX، ShowPageY، ShowScreen.
(توجه: normal به معنی غیرآیکونشده، غیرچسبان یا غیر در بالا بودن است)
با گزینه SortByResource پنجرهها ابتدا بر اساس کلاس منبع، سپس نام منبع و سپس نام پنجره (یا نام آیکون در صورت مشخص شدن UseIconName) به صورت الفبایی مرتب میشوند. گزینه ReverseOrder نیز ترتیب را برعکس میکند.
با گزینه SortByClass پنجرهها درست مانند SortByResource مرتب میشوند، اما نام منبع در نظر گرفته نمیشود و فقط کلاس منبع لحاظ میگردد.
گزینه SelectOnRelease دقیقاً مانند گزینه همنام در MenuStyle عمل میکند، اما بر گزینه تعیینشده در سبک منو اولویت دارد. به طور پیشفرض، این گزینه روی کلید چپ تنظیم شده است. برای خاموش کردن آن، از SelectOnRelease بدون نام کلید استفاده کنید.
اگر تابعی را از طریق Function funcname ارسال کنید، در زمینه پنجره انتخابشده فراخوانی میشود:
AddToFunc IFunc I Iconify toggle WindowList Function IFunc, NoSticky, CurrentDesk, NoIcons
اگر از گزینه Layer m [n] استفاده کنید، تنها پنجرههای موجود در لایههای بین m و n نمایش داده میشوند. مقدار n به طور پیشفرض m است. با گزینه ReverseOrder ترتیب پنجرهها در فهرست معکوس میشود.
با گزینه CurrentAtEnd پنجره دارای تمرکز فعلی (در صورت وجود) در انتهای فهرست نشان داده میشود. این ویژگی عمدتاً برای شبیهسازی رفتار Alt-Tab در رابطهای گرافیکی دیگر کاربرد دارد.
گزینه IconifiedAtEnd باعث میشود پنجرههای آیکونشده به انتهای فهرست منتقل شوند.
گزینه NoGeometry باعث میشود fvwm ابعاد هندسی و جداکنندههای نشاندهنده میزکارهای مختلف را نمایش ندهد. گزینه NoGeometryWithInfo ابعاد هندسی را حذف کرده اما اطلاعات میزکار را نگه میدارد و پنجرههای آیکونشده را مشخص میکند. NoDeskNum مانع نمایش شماره میزکار در ابعاد هندسی یا قبل از عنوان پنجره با گزینه NoGeometryWithInfo میشود. NoNumInDeskTitle تنها در صورتی مفید است که نام میزکار با دستور DesktopName تعریف شده باشد و مانع نمایش شماره میزکار قبل از نام آن میشود. به طور پیشفرض، منوی WindowList دارای عنوانی است که میزکار فعلی یا میزکار انتخابشده را در صورت استفاده از شرط Desk نشان میدهد. گزینه NoCurrentDeskTitle این عنوان را حذف میکند. گزینه TitleForAllDesks باعث میشود fvwm یک عنوان منو با نام و/یا شماره میزکار قبل از هر گروه پنجره روی همان میزکار اضافه کند. با NoLayer لایه پنجره نمایش داده نمیشود. گزینههای ShowPage، ShowPageX و ShowPageY نمایش صفحه پنجره را فعال میکنند. با ShowScreen نام نمایشگر پنجره نشان داده میشود.
گزینه MaxLabelWidth تعداد کاراکترهای قابل چاپ را به عنوان آرگومان دریافت میکند. بیش از این تعداد کاراکتر از نام پنجره قابل مشاهده نخواهد بود.
اگر بخواهید از WindowList به عنوان یک مدیریتکننده آیکون استفاده کنید، میتوانید دستور زیر را فراخوانی کنید:
WindowList OnlyIcons, Sticky, OnTop, Geometry
(توجه: گزینههای Only اساساً همه گزینههای دیگر را خنثی میکنند، به جز OnlyListSkip که باعث میشود WindowList فقط پنجرههای دارای سبک WindowListSkip را در نظر بگیرد.)
XSync
XSynchronize [bool]
+
جابجایی و جایگذاری پنجره (Window Movement and Placement)
AnimatedMove x y [Warp]
GeometryWindow Hide | Show | Colorset n | Position x y | Screen S
GeometryWindow Hide [Never | Move | Resize]
پنجره ابعاد هندسی را پنهان یا خاموش میکند. اگر پارامترهای اختیاری Move یا Resize داده شوند، پنجره ابعاد هندسی تنها در حین عملیات مربوطه پنهان میشود. پارامتر Never نمایش پنجره ابعاد را مجدداً فعال میکند (معادل با Show).
GeometryWindow Show [Never | Move | Resize]
پنجره ابعاد هندسی را نمایش داده یا روشن میکند (معادل با Hide Never). اگر پارامترهای اختیاری Move یا Resize مشخص شوند، تنها در طول عملیات مربوطه پنجره ابعاد را نشان میدهد. پارامتر Never پنجره ابعاد را خاموش میکند (معادل با Hide).
GeometryWindow Colorset _cset_
مجموعه رنگ پنجره ابعاد را روی cset تنظیم میکند. از گزینه دقیق default برای cset استفاده کنید تا از مجموعه رنگ پیشفرض استفاده شود.
GeometryWindow Position [+|-]_x_[p] [+|-]_y_[p]
موقعیتی را که پنجره ابعاد در آن ظاهر میشود پیکربندی میکند. x و y مختصات نسبی به عنوان درصدی از اندازه صفحه نمایش هستند. اگر یک علامت '-' در ابتدا قرار گیرد، مختصات به ترتیب از سمت راست/پایین صفحه نمایش محاسبه میشوند. اگر یک 'p' به انتهای مختصات اضافه شود، به عنوان تعداد پیکسلها از لبه مربوطه صفحه تفسیر میشوند. اگر هیچ آرگومان موقعیتی داده نشود، موقعیت پنجره ابعاد به حالت پیشفرض خود یعنی گوشه بالا سمت چپ یا در صورت شبیهسازی MWM به مرکز صفحه بازمیگردد.
GeometryWindow Screen _RANDRNAME_
پیکربندی میکند که پنجره ابعاد در کدام نمایشگر نشان داده شود. به طور پیشفرض پنجره ابعاد در نمایشگر فعلی نشان داده میشود. اگر یک RANDRNAME معتبر ارائه شود، پنجره ابعاد همیشه در آن نمایشگر نشان داده خواهد شد. از current به عنوان RANDRNAME برای بازگشت به حالت پیشفرض استفاده کنید.
مثالها:
# قرار دادن پنجره ابعاد در مرکز صفحه GeometryWindow Position 50 50 # قرار دادن پنجره ابعاد کنار پنل سمت راست GeometryWindow Position -120p 0 # استفاده از مجموعه رنگ ۲ برای پنجره ابعاد GeometryWindow Colorset 2 # نمایش پنجره ابعاد فقط در مانیتور اصلی GeometryWindow Screen $[monitor.primary] # مخفی کردن پنجره ابعاد GeometryWindow Hide
Layer [arg1 arg2] | [default]
به عنوان یک حالت خاص، default پنجره را در لایه پیشفرض آن، یعنی لایهای که در ابتدا در آن قرار داشت، قرار میدهد. در صورت عدم تعیین آرگومان یا مشخص کردن آرگومانهای نامعتبر نیز همین اتفاق میافتد.
Lower
AddToFunc lower-to-bottom + I Layer 0 0 + I Lower
Move [options]
دستور Move بدون گزینه، یک جابجایی تعاملی را آغاز میکند. پنجره ممکن است به پنجرههای دیگر و لبههای صفحه بچسبد (snap)، که این رفتار با سبک SnapAttraction قابل تنظیم است. جابجا کردن پنجره به لبه صفحه میتواند برای کشیدن پنجره به صفحات دیگر استفاده شود (برای اطلاعات بیشتر به EdgeScroll و سبک EdgeMoveDelay مراجعه کنید).
نگه داشتن کلید Alt چسبندگی را غیرفعال کرده و اجازه میدهد بدون هیچ تاخیری صفحات جابجا شوند. جابجایی تعاملی را میتوان با کلید Escape یا هر دکمه ماوسی که برای قرار دادن پنجره تنظیم نشده لغو کرد. به طور پیشفرض دکمه ۲ ماوس برای لغو عملیات جابجایی تنظیم شده است. برای تغییر این مورد میتوانید از دستور Mouse با زمینه ویژه 'P' برای Placement استفاده کنید.
شرط پنجره PlacedByButton میتواند برای بررسی اینکه آیا دکمه خاصی برای جایگذاری پنجره فشرده شده است یا خیر استفاده شود (به دستور Current مراجعه کنید).
اگر تکآرگومان pointer داده شود، گوشه بالا سمت چپ پنجره پیش از شروع جابجایی تعاملی به موقعیت نشانگر ماوس منتقل میشود؛ این قابلیت عمدتاً برای استفاده داخلی توسط ماژولهایی مانند FvwmPager در نظر گرفته شده است.
Move pointer
برای جابجایی پنجره در یک جهت مشخص تا زمانی که به پنجره، آیکون یا مرز صفحه نمایش دیگری برخورد کند، از دستور زیر استفاده کنید:
Move shuffle [options] _direction_(s)
جهت direction میتواند North/N/Up/U، East/E/Right/R، South/S/Down/D یا West/W/Left/L باشد. پنجره در جهت دادهشده حرکت میکند تا زمانی که به پنجره دیگر یا مرز EwmhBaseStruts/صفحه نمایش برخورد کند. هنگامی که پنجره در مرز صفحه نمایش یا EwmhBaseStruts قرار دارد، در صورت وجود به مانیتور بعدی در جهت دادهشده منتقل میشود. اگر پنجره خارج از ناحیه کاری فعلی باشد (بخشی از آن خارج از صفحه باشد)، به لبه ناحیه کاری حرکت میکند. پنجرهها به ناحیه کاری EWMH احترام میگذارند و در EwmhBaseStruts متوقف میشوند مگر اینکه گزینه ewmhiwa مشخص شده باشد. اگر چندین جهت داده شود، پنجره به ترتیب توالی ذکرشده در آن جهات حرکت میکند.
گزینه دقیق Warp نشانگر ماوس را به پنجره منتقل میکند. گزینه دقیق all_windows تمامی پنجرههای روی همان مانیتور را به جای فقط پنجرههای در مسیر حرکت در نظر میگیرد. این امکان جابجایی به مرز پنجرهای که در کنار آن قرار دارد را فراهم میکند. گزینه دقیق both_sides هم سمت نزدیک و هم سمت دور پنجره را در نظر میگیرد (به طور پیشفرض فقط سمت نزدیک در نظر گرفته میشود).
اگر گزینه دقیق snap همراه با نوع چسبندگی windows، icons یا same داده شود، پنجره تنها در صورت برخورد با پنجره دیگر، آیکون یا همان نوع متوقف میشود. اگر گزینه دقیق layers به همراه دو عدد صحیح برای مشخص کردن لایه min و لایه max داده شود، تنها پنجرههای موجود در لایههای بین حداقل و حداکثر پنجره را متوقف میکنند. به عنوان مثال:
# لغزش پنجره به راست Move shuffle Right # لغزش به بالا، فقط در نظر گرفتن پنجرههای لایه ۳ Move shuffle layers 3 3 Up # لغزش به چپ سپس به بالا Move shuffle Left Up # لغزش به بالا سپس به چپ Move shuffle Up Left
از Move میتوان برای انتقال پنجره به یک موقعیت مشخص استفاده کرد:
Move [screen _S_] [desk _N_] [w | m | v]_x_[p | w] \
[w | m | v]_y_[p | w] [Warp] [ewmhiwa]
این دستور پنجره را به موقعیت x و y منتقل میکند. به طور پیشفرض، ناحیه کاری EWMH هر مانیتور رعایت میشود. این بدان معناست که اگر پنجرهای خارج از ناحیه کاری قرار گیرد، موقعیت پنجره به گونهای تنظیم میشود که در ناحیه کاری صفحهای که مرکز پنجره روی آن قرار دارد جای گیرد. اگر گزینه ewmhiwa داده شود، موقعیت پنجره ناحیه کاری را نادیده گرفته و تنظیم نخواهد شد (این گزینه برای خارج کردن پنجرهها از صفحه و کنترل کامل روی محل قرارگیری آنها لازم است). اگر گزینه Warp داده شود، نشانگر به پنجره منتقل میگردد.
اگر گزینه screen به همراه نام صفحه RandR به نام S مشخص شود، مختصات به عنوان مختصات نسبی به صفحه دادهشده تفسیر میشوند. عرض و ارتفاع آن صفحه به جای ابعاد کل نمایشگر در محاسبات استفاده میشوند. پارامتر screen همانند دستور MoveToScreen تفسیر میشود.
اگر گزینه desk به همراه شماره میزکار N مشخص شود، پنجره پس از جابجایی روی میزکار مشخصشده قرار میگیرد. این کار دو هدف دارد: اول اینکه میتوانید موقعیت و میزکار یک پنجره را در یک دستور جابجا کنید. دوم، هنگامی که پنجرهای بین مانیتورها جابجا میشود، میزکار آن بهروزرسانی میشود تا مشابه مانیتور جدید باشد. این گزینه میتواند با تعیین میزکار نهایی، آن رفتار را بازنویسی کند.
آرگومانهای موقعیتی x و y میتوانند موقعیت مطلق یا نسبی را از چپ/بالا (مقادیر مثبت) یا راست/پایین (مقادیر منفی) کل صفحه یا صفحه مشخصشده تعیین کنند. به طور پیشفرض، مقدار عددی به عنوان درصدی از عرض/ارتفاع صفحه تفسیر میشود، اما پسوند 'p' تفسیر را به پیکسل تغییر میدهد و پسوند 'w' به معنای درصد عرض/ارتفاع پنجره است. برای جابجایی پنجره نسبت به موقعیت فعلی آن، پیشوند 'w' (مخفف window) را قبل از مقدار x و/یا y اضافه کنید. برای جابجایی پنجره نسبت به مکان فعلی نشانگر ماوس، پیشوند 'm' (مخفف mouse) را اضافه کنید. برای جابجایی نسبت به مختصات صفحه مجازی، پیشوند 'v' (مخفف virtual) را اضافه کنید. برای دستنخورده باقی ماندن هر یک از مختصات، میتوان "keep" را به جای x یا y مشخص کرد.
برای کاربردهای پیشرفته، آرگومانهای x و y را میتوان چندین بار استفاده کرد، اما بدون پیشوند 'm' یا 'w'.
مثالهای ساده:
# جابجایی تعاملی Mouse 1 T A Move # انتقال پنجره به نحوی که گوشه بالا چپ در (10%,10%) باشد Mouse 2 T A Move 10 10 # انتقال گوشه بالا چپ به (10px, 10px) Mouse 3 T A Move 10p 10p
مثالهای پیچیدهتر:
# انتقال پنجره به گونهای که گوشه پایین راست در پایین راست صفحه باشد Move -0 -0 # انتقال پنجره به نحوی که گوشه بالا چپ ۱۰ پیکسل از لبه بالا چپ فاصله داشته باشد Move +-10 +-10 # انتقال پنجره ۵٪ به راست و در وسط به صورت عمودی Move w+5 50 # انتقال پنجره ۱۰ پیکسل به بالا و لبه چپ در x=40 پیکسل Move 40p w-10p # انتقال پنجره به مکان نشانگر ماوس Move m+0 m+0 # انتقال پنجره به مرکز صفحه Move 50-50w 50-50w
همچنین به دستور AnimatedMove مراجعه کنید.
MoveToDesk [prev | arg1 [arg2] [min max]]
MoveThreshold [pixels]
در نسخههای قبلی fvwm مقدار pixels روی ۳ پیکسل ثابت بود که اکنون نیز مقدار پیشفرض است. اگر مقدار pixels منفی باشد یا حذف شود، مقدار پیشفرض بازیابی میشود.
MoveToPage [options] [x[p | w] y[p | w]] | [prev]
پنجرهها معمولاً فراتر از مرزهای میزکار جابجا نمیشوند.
گزینههای احتمالی wrapx و wrapy برای چرخش به دور مختصات x یا y هنگام جابجایی پنجره فراتر از مرز میزکار هستند. به عنوان مثال، با wrapx، وقتی پنجره از لبه سمت راست میزکار عبور میکند، در لبه سمت چپ دوباره ظاهر میشود. گزینههای nodesklimitx و nodesklimity امکان جابجایی پنجرهها فراتر از مرزهای میزکار در جهت x و y را فراهم میکنند (که گزینههای wrapx و wrapy را غیرفعال میسازد).
مثالها:
# انتقال پنجره به صفحه (2,3) MoveToPage 2 3 # انتقال پنجره به پایینترین و راستترین صفحه MoveToPage -1 -1 # انتقال پنجره به آخرین صفحه بازدیدشده MoveToPage prev # انتقال پنجره دو صفحه به راست و یک صفحه به بالا، با چرخش در مرزهای میزکار MoveToPage wrapx wrapy +2p -1p
MoveToScreen [screen]
OpaqueMoveSize [percentage]
OpaqueMoveSize 0
تمام پنجرهها با استفاده از طرح خطی سیمی (rubber-band) سنتی جابجا میشوند. با دستور:
OpaqueMoveSize unlimited
یا اگر درصد منفی داده شود، تمام پنجرهها به صورت توپر و مات جابجا میشوند. حالت پیشفرض:
OpaqueMoveSize 5
است که اجازه میدهد پنجرههای کوچک به صورت مات جابجا شوند اما پنجرههای بزرگ به صورت کادر سیمی حرکت کنند. اگر percentage حذف شود یا نامعتبر باشد، مقدار پیشفرض تنظیم میشود. برای تغییر اندازه پنجرهها به صورت مات میتوانید از سبک ResizeOpaque استفاده کنید. به دستور Style مراجعه کنید.
PlaceAgain [Anim] [Icon]
Raise
AddToFunc raise-to-top + I Layer 0 ontop + I Raise
که در آن ontop بالاترین لایه استفادهشده در تنظیمات شما است.
RaiseLower
Resize [[frame] [direction dir] [warptoborder automatic] [fixeddirection] width[p | c | wa | da] height[p | c]]
دستور Resize بدون گزینه، یک تغییر اندازه تعاملی را آغاز میکند.
اگر سبک EdgeResizeDelay تنظیم شده باشد یا کلید Alt فشرده نگه داشته شود، اندازه پنجره میتواند فراتر از لبه صفحه تغییر کند.
عملیات را میتوان با کلید Escape یا فشردن هر دکمه ماوس (به جز دکمه ۱ که آن را تایید میکند) لغو کرد.
اگر آرگومانهای اختیاری width و height ارائه شوند، اندازه پنجره به ابعاد width در height تغییر مییابد. واحدهای width و height به صورت درصد صفحه هستند، مگر اینکه حرف 'p' به یک یا هر دو مختصات اضافه شود که در این صورت بر حسب پیکسل مشخص میشوند. با پسوند 'c' واحد تعریفشده توسط برنامه کلاینت استفاده میشود. با پسوند 'wa' مقدار درصدی از عرض یا ارتفاع ناحیه کاری EWMH است و با پسوند 'da' درصدی از عرض یا ارتفاع ناحیه کاری پویای EWMH است. بنابراین میتوانید بنویسید:
Resize 80c 24c
تا یک پنجره ترمینال را دقیقاً به اندازه ۸۰ در ۲۴ کاراکتر تنظیم کنید.
اگر قبل از width یا height پیشوند حرف 'w' قرار گیرد، اندازه به عنوان یک مقدار مطلق در نظر گرفته نمیشود بلکه به اندازه فعلی پنجره اضافه میگردد. مثال:
# بزرگ کردن پنجره به اندازه یک خط Resize keep w+1c
هر دو مقدار width و height میتوانند منفی باشند. در این حالت اندازه جدید برابر با اندازه صفحه منهای مقدار دادهشده خواهد بود. اگر هر یک از مقادیر "keep" باشد، بعد متناظر پنجره دستنخورده باقی میماند. اندازه جدید اندازه پنجره کلاینت است، بنابراین دستور:
Resize 100 100
ممکن است پنجره را بزرگتر از صفحه نمایش کند. برای اینکه اندازه جدید بر اساس اندازه کل پنجره fvwm باشد، گزینه frame را پس از دستور اضافه کنید. گزینههای fixeddirection، direction و warptoborder تنها در عملیات جابجایی تعاملی استفاده میشوند. با fixeddirection همان حاشیه جابجا میشود حتی اگر نشانگر از حاشیه مخالف عبور کند. گزینه direction باید با نام یک جهت مانند "NorthWest"، "South" یا "East" دنبال شود. تغییر اندازه بلافاصله شروع میشود، حتی اگر نشانگر روی حاشیه نباشد. اگر گزینه ویژه automatic به عنوان آرگومان جهت داده شود، جهت تغییر اندازه بر اساس موقعیت نشانگر در پنجره محاسبه میشود. اگر نشانگر در وسط پنجره باشد، هیچ جهتی محاسبه نمیشود. گزینه warptoborder میتواند برای انتقال نشانگر به جهت مشخصشده استفاده شود. همچنین اگر تغییر اندازه با کلیک روی حاشیه پنجره آغاز شود، نشانگر به لبه بیرونی حاشیه منتقل میشود.
AddToFunc ResizeSE I Resize Direction SE Mouse 3 A M ResizeSE
Resize [bottomright | br x y]
ResizeMaximize [resize-arguments]
ResizeMove resize-arguments move-arguments
مثالها:
# انتقال پنجره به گوشه بالا سمت چپ و پوشش بیشتر صفحه ResizeMove -10p -20p 0 0 # گسترش پنجره دارای تمرکز به سمت بالای صفحه Current Resize keep w+$[w.y]p keep 0
توجه: اگر از گزینه bottomright از دستور Resize استفاده شود، ممکن است fvwm نتواند دستور را به درستی تجزیه کند.
ResizeMoveMaximize resize-arguments move-arguments
RestackTransients
SetAnimation milliseconds-delay [fractions-to-move-list]
SetAnimation 10 -.01 0 .01 .03 .08 .18 .3 \ .45 .6 .75 .85 .90 .94 .97 .99 1.0
تاخیر بین فریمها را روی ۱۰ میلیثانیه تنظیم میکند و موقعیتهای ۱۶ فریم حرکت انیمیشن را تعیین مینماید. مقادیر منفی مجاز هستند و به ویژه میتوان از آنها برای ایجاد حرکتی شبیه به کارتون استفاده کرد، به این صورت که پنجره ابتدا کمی در جهت مخالف حرکت اصلی جابجا شود. تنظیمات بالا حالت پیشفرض هستند.
XorPixmap [pixmap]
XorValue [number]
تمرکز و حرکت ماوس (Focus & Mouse Movement)
CursorBarrier [destroy] [options] [left top right bottom]
با فراخوانی مکرر CursorBarrier میتوان چندین مانع ایجاد کرد. این کار امکان ایجاد چندین ناحیه برای محدود کردن نشانگر (مانند هر مانیتور در یک چیدمان چندمانیتوره) را فراهم میکند، سپس با استفاده از CursorMove یا WarpToWindow نشانگر را بین موانع جابجا کنید. اگر دستور destroy گنجانده شود، تمام موانع از بین میروند و حرکت آزادانه ماوس مجدداً امکانپذیر میشود. اگر بعد از destroy یک عدد صحیح N بیاید، تنها همان مانع حذف میشود (موانع به ترتیب ایجادشان از 0 شمارهگذاری میشوند). اگر عدد صحیح منفی باشد، به صورت معکوس شمارش میشود، مثلاً "-1" جدیدترین مانع ایجادشده، "-2" دومین مانع جدید و غیره است. هنگامی که یک مانع حذف میشود، تمام موانع پس از آن مجدداً شمارهگذاری میشوند. در عمل بهتر است از destroy -1 برای حذف جدیدترین مانع بدون تأثیر بر موانع قبلی استفاده شود.
به طور پیشفرض، کلید میانبر ctrl+shift+D تمام موانع نشانگر را با فراخوانی CursorBarrier destroy از بین میبرد.
چند نمونه مثال:
# مانعی با ۱۵٪ فاصله از چپ/راست و ۱۰٪ از بالا/پایین
CursorBarrier 15 10 15 10
# مانعی برای محدود کردن ماوس به مانیتور فعلی
CursorBarrier screen c
# مانعی برای محدود کردن ماوس به یک پنجره انتخابشده
Pick CursorBarrier coords $[w.x]p $[w.y]p \
$[math.+.$[w.x],$[w.width]]p $[math.+.$[w.y],$[w.height]]p
# حذف تمامی موانع
CursorBarrier destroy
توجه داشته باشید که اگر به محدودیت CURSOR_BARRIER برسید، تمام موانع تعریفشده حذف میشوند. در عمل بعید است چنین اتفاقی بیفتد. اگر رخ دهد، پیامی در لاگهای اشکالزدایی fvwm3 چاپ میشود.
دستور CursorBarrier تنها در صورتی کار میکند که fvwm با افزونه XFixes کامپایل شده باشد.
CursorMove [screen RANDRNAME] horizontal[p] vertical[p]
# جابجایی به اندازه یک صفحه کامل به پایین و راست CursorMove 100 100 # جابجایی دو صفحه کامل به پایین CursorMove 0 200 # جابجایی نیم صفحه به راست و یکچهارم صفحه به بالا CursorMove 50 -25 # جابجایی ۱۰۰ پیکسل به چپ و ۵۰ پیکسل به پایین CursorMove -100p 50p
اگر گزینه screen به همراه یک نام معتبر مانیتور RandR اضافه شود، CursorMove نشانگر را به موقعیت مطلقی که با آرگومانها مشخص شده منتقل میکند (شروع از گوشه بالا سمت چپ)، که این مقادیر یا درصدی از اندازه مانیتور هستند یا مکانی مطلق با پسوند 'p'. به عنوان مثال:
# جابجایی نشانگر به مرکز مانیتور DP-1 CursorMove screen DP-1 50 50 # جابجایی نشانگر به مکان دقیق (400, 200) در مانیتور DP-2 CursorMove screen DP-2 400p 200p
هنگام جابجایی به یک screen مشخص، مقادیر horizontal و vertical همیشه به گونهای منتقل میشوند که درون صفحه فعلی مانیتور مشخصشده قرار گیرند. برای مثال '50'، '150' و '-150' همگی در مرکز مانیتور خواهند بود و صفحه مانیتور را تغییر نخواهند داد. از GotoPage برای تغییر صفحه یک مانیتور مشخص استفاده کنید. از مقادیر منفی میتوان برای تعیین فاصله از گوشه راست/پایین مانیتور استفاده کرد.
دستور CursorMove تنها میتواند نشانگر را نسبت به موقعیت فعلیاش یا به یک موقعیت مطلق روی یک مانیتور مشخص جابجا کند. برای جابجایی نشانگر نسبت به یک پنجره، از WarpToWindow استفاده کنید.
FlipFocus [NoWarp]
Focus [NoWarp]
هنگامی که آرگومان NoWarp داده شود، دستور Focus نمیتواند تمرکز صفحهکلید را به پنجرههای موجود روی میزکارهای دیگر منتقل کند.
برای بالا آوردن و/یا پرش نشانگر به یک پنجره همراه با Focus یا FlipFocus، از یک تابع مانند زیر استفاده کنید:
AddToFunc SelectWindow + I Focus + I Iconify false + I Raise + I WarpToWindow 50 8p
WarpToWindow [!raise | raise] x[p] y[p]
WindowId root WarpToWindow 50 50
وضعیت پنجره (Window State)
Close
Delete
Destroy
Iconify [bool]
چندین گزینه در دستور Style وجود دارند که بر ظاهر و رفتار آیکونها تأثیر میگذارند (مانند StickyIcon و NoIcon).
برای سازگاری با گذشته، آرگومان اختیاری میتواند به جای "True" یک عدد مثبت یا به جای "False" یک عدد منفی باشد. توجه داشته باشید که این نحو منسوخ شده است و در آینده حذف خواهد شد.
Maximize [flags] [bool | forget] [horizontal[p]] [vertical[p]]
تنها با پارامتر "forget"، پنجره بیشینهشده به وضعیت عادی بازمیگردد اما اندازه بیشینهشده فعلی خود را حفظ میکند. این ویژگی در ترکیب با دستورات ResizeMaximize و ResizeMoveMaximize مفید است. اگر پنجره بیشینه نباشد، هیچ اتفاقی نمیافتد.
با آرگومانهای اختیاری horizontal و vertical که بر حسب درصدی از تمامصفحه بیان میشوند، کاربر میتواند اندازه جدید پنجره را کنترل کند. پسوند اختیاری 'p' میتواند برای نشان دادن پیکسل به جای درصد استفاده شود. اگر horizontal بزرگتر از 0 باشد، بعد افقی پنجره روی horizontal*عرض_صفحه/100 تنظیم میشود. اگر مقدار کوچکتر از 0 باشد، از عرض صفحه کسر میشود، یعنی -25 همان 75 است. اگر horizontal برابر با "grow" باشد، پنجره تا رسیدن به هر مانعی در فضای موجود افقی گسترش مییابد. تغییر اندازه عمودی نیز به همین صورت است. اگر هر دو مقدار افقی و عمودی "grow" باشند، پنجره ابتدا به صورت عمودی و سپس به صورت افقی گسترش مییابد. به جای آرگومان "grow" افقی، میتوان از "growleft" یا "growright" و به جای مقدار عمودی از "growup" یا "growdown" استفاده کرد.
آرگومان اختیاری flags فهرستی از کلیدواژههای جداشده با فاصله است: fullscreen، ewmhiwa، growonwindowlayer، growonlayers، keepgrowing، all_windows، both_sides و screen. پرچم fullscreen در صورت تنظیم بودن نشانه مناسب EWMH باعث تمامصفحه شدن پنجره میشود. گزینه ewmhiwa باعث میشود fvwm ناحیه کاری EWMH را نادیده بگیرد. گزینه growonwindowlayer باعث میشود روشهای مختلف گسترش پنجره، پنجرههای موجود در لایهای غیر از لایه پنجره بیشینهشده را نادیده بگیرند. گزینه growonlayers باید دو آرگومان عدد صحیح داشته باشد: اولی حداقل لایه و دومی حداکثر لایه مورد استفاده است. پنجرههای خارج از این محدوده نادیده گرفته میشوند. مقدار منفی به عنوان آرگومان اول یا دوم به معنای عدم وجود حداقل یا حداکثر لایه است. گزینه all_windows تمامی پنجرههای روی همان مانیتور را در جهتی که پنجره در حال گسترش است در نظر میگیرد. گزینه both_sides هر دو سمت پنجرههای دیگر را لحاظ میکند. گزینه keepgrowing به پنجره اجازه میدهد تا فراتر از هر مرز پنجرهای که در حال حاضر با آن در تماس است رشد کند تا زمانی که به مرز پنجره نزدیک بعدی برسد. گزینه screen باید آرگومانی داشته باشد که صفحه نمایش مورد نظر را مشخص کند.
چند مثال: افزودن یک دکمه در نوار عنوان برای تغییر اندازه پنجره به ارتفاع کامل عمودی صفحه:
Mouse 0 4 A Maximize 0 100
دستور زیر باعث میشود پنجرهها به عرض کامل کشیده شوند:
Mouse 0 4 A Maximize 100 0
دستور زیر پنجرهای با اندازه نصف صفحه در هر دو جهت ایجاد میکند:
Mouse 0 4 A Maximize 50 50
برای گسترش افقی پنجره تا برخورد با پنجرهای دیگر:
Mouse 0 4 A Maximize 0 grow
برای گسترش پنجره تا برخورد با هر پنجره دیگری در همان لایه یا لایهای بالاتر:
Mouse 0 4 A Maximize growonlayers $[w.layer] -1 grow grow
برای گسترش پنجره به گونهای که ۶۰ پیکسل پایین صفحه خالی بماند:
Mouse 0 4 A Maximize 100 -60p
از مقادیر بزرگتر از ۱۰۰ باید با احتیاط استفاده شود.
Refresh
RefreshWindow
Stick [bool]
StickAcrossPages [bool]
StickAcrossDesks [bool]
WindowShade [bool] | [[ShadeAgain] direction]
Style * WindowShadeShrinks, WindowShadeSteps 20, \ WindowShadeLazy Mouse 1 - S WindowShade North Mouse 1 [ S WindowShade West Mouse 1 ] S WindowShade E Mouse 1 _ S WindowShade S
توجه: هنگامی که پنجرهای با یک آرگومان direction جمع شده باشد و جهت عنوان پنجره تغییر کند (به گزینه TitleAtTop از دستور Style مراجعه کنید)، جهت جمع شدن تغییر نمیکند. پنجرههایی که بدون جهت جمع شدهاند، در جهت نوار عنوان جمع باقی میمانند.
برای سازگاری با گذشته، آرگومان اختیاری میتواند ۱ برای روشن و ۲ برای خاموش باشد. این نحو منسوخ شده است.
کلیدهای میانبر و ماوس (Mouse & Key Bindings)
IgnoreModifiers [Modifiers]
پارامتر Modifiers همان نحو اتصالات Mouse یا Key را دارد، به اضافه اینکه 'L' به معنای کلید Caps Lock است. حالت پیشفرض "L" است. پارامتر Modifiers میتواند حذف شود که به معنای نادیده نگرفتن هیچ کلید تغییردهندهای است. این دستور زمانی کاربرد دارد که کلیدهای Num Lock و Scroll Lock با میانبرهای شما تداخل داشته باشند. در XFree86 کلید '2' معمولاً تغییردهنده Num Lock است و '5' به کلید Scroll Lock اشاره دارد. برای خاموش کردن این کلیدهای مزاحم میتوانید از دستور زیر استفاده کنید:
IgnoreModifiers L25
اگر آرگومان Modifiers رشته "default" باشد، fvwm به مقدار پیشفرض "L" بازمیگردد.
مهم: این دستور ترافیک شبکه اضافی زیادی ایجاد میکند، که این امر به پردازنده شما، ارتباط شبکه، تعداد دستورات Key یا Mouse در فایل پیکربندی شما و تعداد تغییردهندههایی که میخواهید نادیده بگیرید بستگی دارد. اگر سیستم بسیار سریعی ندارید یا اتصالات میانبر شما اندک نیستند، نباید بیش از دو تغییردهنده را نادیده بگیرید. یعنی اگر مشکلی با آن ندارید نادیدهاش نگیرید. در بخش پرسشهای متداول (FAQ) میتوانید راهحل بهتری برای این مشکل بیابید.
EdgeCommand [screen RANDRNAME] [direction [Function]]
دستور Function هنگامی اجرا میشود که نشانگر ماوس وارد قابهای پیمایش نامرئی (pan frames) که صفحه نمایش قابل مشاهده را احاطه کردهاند شود. این اتصال تنها زمانی کار میکند که EdgeThickness روی مقداری بزرگتر از 0 تنظیم شده باشد. اگر تابعی به یک لبه متصل باشد، پیمایش تعیینشده توسط EdgeScroll برای آن لبه غیرفعال میشود. میتوان یک تابع را تنها به برخی لبهها متصل کرد و از لبههای دیگر برای پیمایش استفاده نمود. این دستور برای بالا یا پایین بردن پنجرههای خاصی هنگام ورود نشانگر ماوس به لبه کاربرد دارد. از FvwmAuto میتوان برای ایجاد تاخیر هنگام بالا یا پایین بردن پنجرهها استفاده کرد. مثال زیر در صورتی که نشانگر ماوس وارد لبه بالایی صفحه شود، FvwmButtons را بالا میآورد:
# غیرفعال کردن EdgeScrolling اما امکان حرکت پنجرهها روی لبه صفحه EdgeResistance -1 Style * EdgeMoveDelay 250 Style * EdgeMoveResistance 20 # تنظیم ضخامت لبه صفحه روی ۱ EdgeThickness 1 # دادن فوکوس به FvwmButtons در صورت برخورد ماوس با لبه بالا EdgeCommand Top Next (FvwmButtons) Focus # اطمینان از تطابق دستور Next با پنجره Style FvwmButtons CirculateHit Module FvwmButtons Module FvwmAuto 100 "Silent AutoRaiseFunction" \ "Silent AutoLowerFunction" # اگر هر پنجرهای به جز FvwmButtons فوکوس داشته باشد، FvwmButtons پایین برود DestroyFunc AutoLowerFunction AddToFunc AutoLowerFunction + I Current (!FvwmButtons) All (FvwmButtons) Lower # اگر FvwmButtons فوکوس داشته باشد، بالا آورده شود DestroyFunc AutoRaiseFunction AddToFunc AutoRaiseFunction + I Current (FvwmButtons) Raise
به طور معمول، قابهای پیمایش نامرئی تنها روی لبههایی از صفحه هستند که با صفحات مجازی هممرزند. اگر لبهای از صفحه دستوری به آن متصل باشد، قاب پیمایش همیشه روی آن لبه ایجاد میشود.
EdgeLeaveCommand [screen RANDRNAME] [direction [Function]]
دستور Function هنگامی اجرا میشود که نشانگر ماوس قابهای پیمایش نامرئی را ترک کند. این ویژگی نیازمند EdgeThickness بزرگتر از 0 است. به مثال EdgeCommand مراجعه کنید.
Key [(window)] Keyname Context Modifiers Function
زمینه ویژه 'M' برای منوها میتواند برای تعریف مجدد کنترلهای منو استفاده شود. برای جزئیات به بخش اتصالات منو مراجعه کنید.
مثال زیر فهرست پنجرههای توکار را بدون توجه به مکان نشانگر ماوس متصل میکند:
Key F11 A SCM WindowList
اتصال یک کلید به دکمه نوار عنوان باعث ظاهر شدن آن دکمه میشود. برای جزئیات به دستور Mouse مراجعه کنید.
Mouse [(window)] Button Context Modifiers Function
زمینه Context محل اعمال اتصال را توصیف میکند. زمینههای معتبر عبارتند از: 'R' برای پنجره ریشه، 'W' برای پنجره برنامه، 'D' برای برنامه میزکار (مانند kdesktop یا Nautilus)، 'T' برای نوار عنوان، 'S' برای نوارهای کناری، بالایی یا پایینی پنجره، '[', ']', '-' و '_' برای سمت چپ، راست، بالا یا پایین به تنهایی، 'F' برای قاب پنجره (گوشهها)، '<', '^', '>' و 'v' برای گوشههای بالا-چپ، بالا-راست، پایین-راست و پایین-چپ، 'I' برای پنجره آیکون، '0' تا '9' برای دکمههای نوار عنوان، یا هر ترکیبی از این حروف. حرف 'A' برای هر زمینهای است. برای مثال، زمینه "FST" هنگامی اعمال میشود که ماوس در هر نقطه از حاشیه پنجره به جز دکمههای نوار عنوان قرار داشته باشد.
زمینه ویژه 'M' برای منوها جهت تعریف مجدد کنترلهای منو استفاده میشود.
زمینه ویژه 'P' دکمههایی را که میتوان برای قرار دادن پنجره استفاده کرد کنترل میکند. هنگام استفاده از این زمینه هیچ کلید تغییردهندهای مجاز نیست (Modifiers باید N باشد)، هیچ پنجرهای (window) مجاز نیست و تابع Function باید یکی از مقادیر PlaceWindow، PlaceWindowDrag، PlaceWindowInteractive، CancelPlacement، CancelPlacementDrag، CancelPlacementInteractive یا '-' باشد.
تابع PlaceWindow دکمه Button را برای قرار دادن پنجره در هر دو حالت تعاملی و کشیدن فعال میکند. تابع CancelPlacement عمل معکوس را انجام میدهد و جابجایی را لغو میکند.
مثال زیر همه دکمهها به جز دکمه ۳ را برای جایگذاری تعاملی فعال میکند:
Mouse 0 P N PlaceWindow Mouse 3 P N CancelPlacement Mouse 1 P N CancelPlacementDrag
به طور پیشفرض اتصال به تمام پنجرهها اعمال میشود. با تعیین نام پنجره داخل کروشه میتوانید آن را به پنجرههای خاصی محدود کنید. نام پنجره یک الگوی عمومی است که کلاس، منبع یا نام پنجره مورد نظر را مشخص میسازد.
مثال زیر نشان میدهد چگونه یک کلید میتواند بسته به پنجره دارای تمرکز کارهای متفاوتی انجام دهد:
Key (rxvt) V A C Echo ctrl-V-in-RXVT Key (*term) V A C Echo ctrl-V-in-Term Key (*vim) V A C -- Key V A C Echo ctrl-V-elsewhere
عمل '--' نشان میدهد که رویداد باید برای رسیدگی به خود پنجره مشخصشده ارسال شود.
این مثال نحوه نمایش WindowList هنگام فشردن دکمه ۳ روی پنجره rxvt را نشان میدهد:
Mouse (rxvt) 3 A A WindowList
توجه داشته باشید که fvwm تمام رویدادها را برای اتصالات مختص پنجره دریافت کرده و در صورت عدم تطابق یک نسخه شبیهسازیشده به پنجره میفرستد. برای فعالسازی پردازش این رویدادها در xterm، خط زیر را به ~/.Xdefaults اضافه کنید:
XTerm*allowSendEvents: true
پارامتر Modifiers هر ترکیبی از 'N' برای بدون تغییردهنده، 'C' برای Control، 'S' برای Shift، 'M' برای Meta/Alt، 'L' برای Caps-Lock یا 'A' برای هر تغییری است. مقادیر mod1 تا mod5 سرور X با ارقام '1' تا '5' نمایش داده میشوند.
دکمههای نوار عنوان شمارهگذاری شدهاند: اعداد فرد در سمت چپ نوار عنوان و اعداد زوج در سمت راست. دکمههای با شماره کمتر در قسمت بیرونیتر و دکمههای با شماره بیشتر به سمت وسط پنجره قرار میگیرند (0 مخفف 10 است):
1 3 5 7 9 0 8 6 4 2
بالاترین شماره فرد که عملی به آن متصل است، تعداد دکمههای ترسیمشده در سمت چپ را تعیین میکند و بالاترین شماره زوج تعداد دکمههای سمت راست را تعیین میکند.
PointerKey [(window)] Keyname Context Modifiers Function
مثال:
Style * SloppyFocus PointerKey f1 a m Menu MainMenu
کنترل میزکار مجازی (Controlling the Virtual Desktop)
DesktopName desk name
DesktopConfiguration global | per-monitor | shared
با گزینه per-monitor، هر مانیتور RandR یک نسخه مستقل از میزکارها دارد و بنابراین هنگام تغییر میزکارها یا صفحات، مستقل از یکدیگر عمل میکنند.
هنگامی که shared تنظیم شود، میزکارها بین تمامی مانیتورها به اشتراک گذاشته میشوند. به عنوان مثال، با تعریف میزکارها برای دو مانیتور ([] مانیتور ۱ و <> مانیتور ۲ است):
[0] 1 2 <3> 4
حرکت بین میزکارها همچنان مانیتوری را که درخواست روی آن داده شده رعایت میکند. اگر مانیتور ۱ بخواهد به میزکار ۳ برود، آن میزکار با مانیتور ۲ مبادله میشود:
<0> 1 2 [3] 4
این مفهوم شبیه به نحوه مدیریت میزکارها در spectrwm یا xmonad است.
توجه: هر حالت DesktopConfiguration را میتوان در حین اجرا و به صورت بلادرنگ تغییر داد.
DesktopSize HorizontalxVertical
EdgeResistance delay, EdgeResistance scrolling moving [screen-scrolling]
EdgeScroll 100 100
استفاده میکنند اما متوجه میشوند که تصادفاً هنگام عدم تمایل، صفحات عوض میشوند. اگر مقدار تاخیر -1 داده شود، پیمایش لبهها به طور کامل غیرفعال میشود.
شکل دوم فراخوانی با دو یا سه آرگومان منسوخ شده است و در صورت نیاز باید با دستورات جداگانه زیر جایگزین شود:
EdgeResistance scrolling Style * EdgeMoveDelay scrolling Style * EdgeMoveResistance moving یا Style * EdgeMoveResistance moving screen-scrolling
برنامه fvwm این جایگزینی را به طور خودکار انجام داده و یک پیام هشدار چاپ میکند.
EdgeScroll [screen RANDRNAME] horizontal[p] vertical[p] [wrap | wrapx | wrapy]
EdgeScroll 0 0
را در فایل config خود قرار دهید، یا بهتر از آن، EdgeThickness را روی صفر تنظیم کنید. اگر میخواهید صفحات کامل پیمایش شوند از:
EdgeScroll 100 100
استفاده کنید. هر دو مقدار افقی و عمودی باید اعداد مثبت باشند.
اگر درصدهای افقی و عمودی در ۱۰۰۰ ضرب شوند یا یکی از کلیدواژههای wrap، wrapx و wrapy داده شود، پیمایش در لبه میزکار دور میزند (wrap).
EdgeThickness [screen RANDRNAME] 0 | 1 | 2
گزینه اختیاری 'screen RANDRNAME' مانیتور مورد نظر را مشخص میکند.
به منظور فعالسازی پیمایش صفحه از طریق ماوس، چهار پنجره به نام "قابهای پیمایش" (pan frames) در لبه بیرونی صفحه قرار داده میشوند. fvwm از این طریق حضور ماوس در لبه را تشخیص میدهد. این قابها باید در بالای پشته قرار گیرند و رویدادهای ماوس را دریافت کنند، بنابراین اگر با مشکلی مانند "کلیکهای ماوس در لبه صفحه کار اشتباهی انجام میدهند" مواجه شدید، میتوانید EdgeThickness را روی 0 تنظیم کنید.
مقدار 0 پیمایش لبهای ماوس را به طور کامل غیرفعال میکند، حتی هنگام کشیدن پنجره. مقدار 1 کوچکترین قابها را ایجاد میکند و مقدار 2 حالت پیشفرض است.
EwmhBaseStruts screen RANDRNAME left right top bottom
EwmhNumberOfDesktops num [max]
GotoDesk [screen RANDRNAME] [prev | arg1 [arg2] [min max]]
این دستور ۱، ۲، ۳ یا ۴ آرگومان میپذیرد. یک آرگومان به عنوان شماره نسبی میزکار تفسیر میشود. دو آرگومان به عنوان شماره نسبی و مطلق فهمیده میشوند. سه آرگومان یک میزکار نسبی و حداقل و حداکثر محدوده مجاز را مشخص میکنند. چهار آرگومان مقادیر نسبی، مطلق، حداقل و حداکثر را تعیین مینمایند. اگر کلمه دقیق prev به عنوان تکآرگومان داده شود، آخرین شماره میزکار بازدیدشده استفاده خواهد شد.
اگر arg1 غیر صفر باشد، شماره میزکار بعدی برابر شماره میزکار فعلی به علاوه arg1 خواهد بود.
اگر arg1 صفر باشد، شماره میزکار جدید برابر با arg2 خواهد بود.
نحو دستور همانند دستور MoveToDesk است.
تعداد میزکارهای فعال به صورت پویا تعیین میشود. شمارههای میزکار باید بین 0 تا 2147483647 باشند. شمارههای منفی در fvwm پشتیبانی نمیشوند.
GotoDeskAndPage screen | prev | desk xpage ypage
GotoPage screen | prev | [options] x[p] y[p]
گزینههای احتمالی شامل wrapx و wrapy برای چرخش دورانی در مرزهای میزکار هستند.
برای رفتن به آخرین صفحه بازدیدشده از prev استفاده کنید.
مثالها:
# رفتن به صفحه (2,3) GotoPage 2 3 # رفتن به پایینترین و راستترین صفحه GotoPage -1 -1 # رفتن به آخرین صفحه بازدیدشده GotoPage prev # رفتن دو صفحه به راست و یک صفحه به بالا GotoPage +2p -1p
Scroll [screen RANDRNAME] [horizonal[p] vertical[p] | reverse]
Scroll 100 100
به معنای یک صفحه کامل به پایین و راست است.
اگر حرف 'p' به هر مختصات اضافه شود، میزان پیمایش با پیکسل سنجیده میشود.
بدون آرگومان یا در صورت تعیین گزینه reverse، پیمایش تعاملی انجام میشود و درگاه دید همگام با حرکت ماوس پیمایش میگردد. با گزینه reverse پیمایش در جهت مخالف حرکت ماوس انجام میشود.
اتصال زیر:
Mouse 1 A CM Scroll reverse
اثر گرفتن و کشیدن درگاه دید را با دکمه ۱ ماوس در صورت فشرده بودن کلیدهای Control و Meta ایجاد میکند.
توابع کاربری و دستورات شل (User Functions and Shell Commands)
AddToFunc [name [I | J | M | C | H | D action]]
AddToFunc Move-or-Raise I Raise + M Move + D Lower
نام تابع "Move-or-Raise" است و میتواند از یک منو یا اتصال ماوس یا کلید فراخوانی شود:
Mouse 1 TS A Move-or-Raise
نام تابع name نباید حاوی فاصلههای تعبیهشده باشد. حرف قبل از action مشخص میکند که چه نوع کنشی باعث تحریک دستوری میشود که پس از آن میآید: 'I' مخفف "Immediate" است و به محض فراخوانی تابع اجرا میشود. 'J' مشابه Immediate است اما تا زمانی که دکمهای فشرده یا رها شود، نشانگر ماوس حرکت کند یا تابع تکمیل شود به تعویق میافتد. 'M' مخفف "Motion" (حرکت ماوس) است. 'C' مخفف "Click" (کلیک ماوس) است. 'H' مخفف "Hold" (نگه داشتن کلید بیش از ClickTime میلیثانیه) است. 'D' مخفف "Double-click" (دوبار کلیک) است. عمل 'I' در صورت فراخوانی تابع با آگاهی قبلی از پنجره هدف، بلافاصله پس از فشردن دکمه اجرا میشود.
مجموعهای از نمادهای از پیش تعریفشده وجود دارند که در صورت ظاهر شدن در خط فرمان با مقادیر خاصی جایگزین میشوند. برای جزئیات به بخش بسط دستورات (Command Expansion) مراجعه کنید.
هشدار: لطفاً نظرات مربوط به اجرای توابع پیچیده در بخش اسکریپتنویسی و توابع پیچیده را مطالعه کنید.
مثالها: اگر دستور زیر را فراخوانی کنید:
Key F10 R A Function MailFunction xmh "-font fixed"
و "MailFunction" به صورت زیر تعریف شده باشد:
AddToFunc MailFunction + I Next ($0) Iconify off + I Next (AcceptsFocus, $0) Focus + I None ($0) Exec exec $0 $1
در این صورت خط آخر تابع به این شکل تبدیل میشود:
+ I None (xmh) Exec exec xmh -font fixed
این بسط در هنگام اجرای تابع انجام میشود، بنابراین میتوانید از همان تابع با آرگومانهای گوناگون استفاده کنید. به عنوان مثال دیگر، اتصال دکمه ۳ ماوس درون دکمه شماره ۶ پنجره برای آیکون کردن تمامی پنجرههای دارای همان منبع:
AddToFunc FuncIconifySameResource "I" All ($0) Iconify on Mouse 3 6 A FuncIconifySameResource $[w.resource]
Beep
DestroyFunc function
DestroyFunc PrintFunction
Echo string
Echo Beginning style definitions... Echo Current desk $[desk.n].
EchoFuncDefinition function
Exec command
مثال زیر کلید تابعی F1 را در پنجره ریشه به تابع exec متصل میکند:
Key F1 R N Exec exec rxvt -fg yellow -bg blue \ -e /bin/tcsh
توجه داشته باشید که این تابع منتظر اتمام command نمیماند (به دستور PipeRead مراجعه کنید).
ExecUseShell [shell]
ExecUseShell ExecUseShell /usr/local/bin/tcsh
Function FunctionName
Mouse 1 T A Function Move-or-Raise
کلیدواژه Function در صورتی که نام تابع با یکی از دستورات fvwm تداخل نداشته باشد، میتواند حذف شود.
InfoStoreAdd key value
هدف از این دستور ذخیره اطلاعات داخلی در fvwm است که توابع fvwm میتوانند از آن استفاده کنند، بدون اینکه مانند SetEnv محیط را آلوده کرده و اطلاعات را سراسری سازد.
بازیابی مقدار یک کلید مشخص از طریق سازوکار معمول بسط در fvwm انجام میشود:
InfoStoreAdd teddybearprog xteddy # چاپ مقدار teddybearprog Echo $[infostore.teddybearprog]
حذف یک مدخل از InfoStore با دستور InfoStoreRemove انجام میشود.
InfoStoreRemove key
InfoStoreRemove teddybearprog
Nop
AddToMenu MyMenu " " Nop
یک خط خالی درج میکند. در حالی که:
+ "" Nop
یک خط جداکننده افقی درج مینماید. همچنین میتواند به عنوان عمل دوبار کلیک برای Menu یا Popup استفاده شود.
PipeRead command [quiet]
مثال:
AddToMenu HomeDirMenu PipeRead 'for i in $HOME/*; \ do echo "+ $i Exec xterm -e vi $i"; done'
دستور PipeRead به صورت همگام (synchronous) اجرا میشود. اگر دستوری را اجرا میکنید که خروجی آن به جای دستورات fvwm باید نادیده گرفته شود، میتوانید آن را تغییر مسیر دهید:
PipeRead 'command 1>&2'
دستور PipeRead در صورت اجرای موفقیتآمیز مقدار ۱ و در غیر این صورت -۱ را برمیگرداند.
Read filename [quiet]
SetEnv variable value
SetEnv height HEIGHT
Silent command
مثالها:
Silent Move 0 0 Silent User_defined_function Silent Key Help R A Popup HelpMenu
UnsetEnv [variable]
Wait window
AddToFunc InitFunction + I Exec exec xterm -geometry 80x64+0+0 + I Wait xterm + I GotoDesk 0 2 + I Exec exec xmh -font fixed -geometry \ 507x750+0+0 + I Wait xmh + I GotoDesk 0 0
تابع بالا xterm را در میزکار فعلی شروع میکند، منتظر نگاشت آن میماند، سپس به میزکار ۲ رفته و xmh را اجرا میکند و پس از ظاهر شدن آن به میزکار ۰ بازمیگردد.
میتوانید با فشردن Ctrl-Alt-Escape از توقف Wait خارج شوید (به EscapeFunc مراجعه کنید).
Status On | Off
قالب داده JSON به این صورت است:
{
"version": 3,
"current_screen": "HDMI2",
"screens": {
"HDMI2": {
"randr_order": 0,
"current_client": "n6tadam@shuttle: ~",
"desktops": {
"0": {
"number": 0,
"is_urgent": false,
"is_current": true,
"number_of_clients": 5
},
},
},
},
}
این بخشها برای تمامی صفحات، گروهها و غیره بر اساس تعداد موجود تکرار میشوند.
دستورات شرطی (Conditional Commands)
دستورات شرطی دستوراتی هستند که تنها در صورت برآورده شدن شرایط خاصی اجرا میشوند. بیشتر دستورات شرطی روی پنجرهها عمل میکنند، مانند Next، ThisWindow یا All. یک دستور شرطی به نام Test نیز وجود دارد که روی شرایط سراسری و غیرمرتبط با پنجرهها عمل میکند. نحو شرایط در زیر شرح داده شده است.
کدهای بازگشتی (Return Codes)
حلقه پنجرهها (The Ring of Windows)
فهرست دستورات شرطی (List of Conditional Commands)
All [options] [(conditions)] command
این دستور به طور ضمنی شرایط CirculateHit، CirculateHitIcon و CirculateHitShaded را فعال میکند.
Any [(conditions)] command
Break [levels]
AddToFunc PickWindowRaiseAndDeiconify + I Pick + I TestRc (Error) Break + I Raise + I Iconify off
Current [(conditions)] command
Direction [FromPointer] direction [(conditions)] command
KeepRc command
Next [(conditions)] command
None [(conditions)] command
NoWindow command
Pick [(conditions)] command
PointerWindow [(conditions)] command
Prev [(conditions)] command
ScanForWindow [FromPointer] dir1 dir2 [(conditions)] command
Test [(test-conditions)] command
شرط Version با عملگرهای >=، >، <=، <، == و != نسخه fvwm را میسنجد:
Test (Version >= 2.5.11) Echo 2.5.11 or later.
شرط EnvIsSet تنظیم بودن متغیر محیطی و EnvMatch تطابق متغیر محیطی یا infostore با یک الگو را بررسی میکند.
شرط StrMatch تطابق رشته با یک الگو را بررسی مینماید:
Test (StrMatch $[monitor.current] DP-2) Echo True
شرایط F، R، W، X و I به ترتیب وجود فایل، مجوز خواندن، مجوز نوشتن، فایل اجرایی در مسیر PATH و تصویر در ImagePath را بررسی میکنند.
TestRc [([!]returncode)] command
AddToFunc ToggleXterm + I All (my_xtermwindow) Close + I TestRc (NoMatch) Exec xterm -T my_xtermwindow
ThisWindow [(conditions)] command
WindowId [id] [(conditions)] | [root] command
مثالها:
WindowId 0x34567890 Raise WindowId root 1 WarpToWindow 50 50 WindowId $0 (Silly_Popup) Delete
شرایط (Conditions)
علاوه بر این، شرایط میتوانند شامل یک یا چند نام پنجره برای تطابق باشند. نام، نام آیکون، کلاس و منبع پنجره همگی در نظر گرفته میشوند. الگوهای عمومی '*' و '?' و عملگر OR با کاراکتر '|' پشتیبانی میشوند. پیشوند '!' شرط یا گروه را نفی میکند.
مثالها:
Next ("Netscape|konqueror|Mozilla*") WarpToWindow 99 90
Next ("Mozilla*", "Bookmark*") WarpToWindow 99 90
All ("XTerm|rxvt", !console) Iconify
Next (!"FvwmPager|FvwmForm*|FvwmButtons") Raise
هر شرطی را میتوان با یک علامت تعجب ('!') مستقیماً قبل از نام آن نفی کرد.
شرایط معتبر عبارتند از: AcceptsFocus، AnyScreen، CirculateHit، CirculateHitIcon، CirculateHitShaded، Closable، CurrentDesk، CurrentGlobalPage، CurrentGlobalPageAnyDesk، CurrentPage، CurrentPageAnyDesk، CurrentScreen، Desk، FixedPosition، FixedSize، Focused، HasBorders، HasHandles، HasPointer، HasTitle، TitleAtTop، TitleAtBottom، TitleAtLeft، TitleAtRight، Iconic، Iconifiable، Layer [n]، Maximizable، Maximized، Overlapped، PlacedByButton n، PlacedByButton3، PlacedByFvwm، Raised، Shaded، State n، Sticky، StickyAcrossDesks، StickyAcrossPages، StickyIcon، StickyAcrossDesksIcon، StickyAcrossPagesIcon، Transient، Visible.
شرط AcceptsFocus پنجرههایی را که فوکوس ورودی را نمیپذیرند حذف میکند.
شرط AnyScreen همراه با شرایط Current... اجازه میدهد پنجرهها روی هر صفحهای در نظر گرفته شوند.
شرط Closable تنها با پنجرههایی که مجاز به بسته شدن هستند تطابق دارد.
شرط CurrentDesk تنها با پنجرههای روی میزکار فعلی مطابقت دارد.
شرط CurrentPage پنجرههای روی صفحه فعلی از میزکار فعلی را انتخاب میکند.
شرط FixedPosition پنجرههای با موقعیت ثابت را انتخاب میکند.
شرط FixedSize پنجرههای با اندازه ثابت را تطبیق میدهد.
شرط Focused پنجرهای را که در حال حاضر تمرکز صفحهکلید را دارد مطابقت میدهد.
شرط HasBorders پنجرههای دارای حاشیه را انتخاب میکند.
شرط HasTitle پنجرههای دارای نوار عنوان را انتخاب میکند.
شرط Iconic پنجرههای آیکونشده را تطبیق میدهد.
شرط Maximized پنجرههای بیشینهشده را انتخاب میکند.
شرط Overlapped پنجرههایی را که توسط پنجرههای دیگر در همان لایه پوشانده شدهاند انتخاب میکند.
شرط Raised پنجرههایی را که کاملاً قابل مشاهده بوده و روی آنها پوشانده نشده تطبیق میدهد.
شرط Shaded پنجرههای کرکرهای جمعشده را انتخاب میکند.
شرط Transient پنجرههای گذرا (دیالوگها و پاپآپها) را انتخاب میکند.
شرط Visible پنجرههایی را که حداقل تا حدی قابل مشاهده هستند انتخاب مینماید.
دستورات ماژول (Module Commands)
برنامه fvwm پایگاهدادهای از خطوط پیکربندی ماژولها را در قالب زیر نگهداری میکند:
*<ModuleName>: <Config-Resource>
که در آن <ModuleName> نام واقعی یک ماژول یا نام مستعار (alias) آن است.
این پایگاهداده در ابتدا از فایل پیکربندی (یا از خروجی دستور -cmd) پر میشود و بعداً میتواند توسط کاربر یا توسط ماژولها اصلاح گردد.
دستورات مدیریت پایگاهداده پیکربندی ماژولها در ادامه شرح داده شدهاند.
* module_config_line
*FvwmPager: WindowBorderWidth 1 *FvwmButtons-TopRight: Geometry 100x100-0+0 *FvwmButtons-Bottom: Geometry +0-0
DestroyModuleConfig module_config
DestroyModuleConfig FvwmButtons* DestroyModuleConfig FvwmForm: Fore DestroyModuleConfig FvwmIconMan: Tips*
KillModule modulename [modulealias]
# بستن تمامی پیجرها KillModule FvwmPager Module FvwmEvent SoundEvent KillModule FvwmEvent SoundEvent
Module modulename [moduleparams]
Module FvwmForm MyForm
در حال حاضر ماژولهای موجود عبارتند از: FvwmAnimate، FvwmAuto، FvwmBacker، FvwmBanner، FvwmButtons، FvwmPrompt، FvwmEvent، FvwmForm، FvwmIconMan، FvwmIdent، FvwmPager، FvwmPerl، FvwmProxy، FvwmRearrange و FvwmScript. این ماژولها صفحات راهنمای اختصاصی خود را دارند.
ModuleListenOnly modulename [moduleparams]
ModulePath path
علامت '+' در مسیر به مقدار قبلی مسیر بسط مییابد:
ModulePath ${HOME}/lib/fvwm/modules:+
دایرکتوری ماژولهای استاندارد از طریق متغیر محیطی $FVWM_MODULEDIR در دسترس است.
ModuleSynchronous [Expect string] [Timeout secs] modulename
هشدار: قفل کردن fvwm با این دستور بسیار آسان است. برای خروج از حالت قفل میتوانید از کلیدهای خروج استفاده کنید (به EscapeFunc مراجعه کنید).
ModuleTimeout timeout
SendToModule modulename string
دستورات مدیریت نشست (Session Management Commands)
Quit
Restart [window_manager [params]]
این دستور نباید علامت '&' در انتها داشته باشد. میتواند شامل پارامترهای اختیاری با نحو ساده شبیه به شل باشد:
Key F1 R N Restart Key F1 R N Restart fvwm1 -f .fvwmrc Key F1 R N Restart xterm -n '"X console"' -T \"X\ console\" -e fvwm
در نمایشگرهای چندگانه، راهاندازی مجدد fvwm روی صفحههای مختلف به طور مستقل عمل میکند.
Restart --pass-args window_manager
Restart --dont-preserve-state [other-params]
Restart [other-params]
اما هیچیک از وضعیتهای پنجره را در طول راهاندازی مجدد ذخیره نمیکند.
بدون این گزینه، دستور Restart بیشتر وضعیتهای هر پنجره را با نوشتن در فایلی به نام .fs-restart-$HOSTDISPLAY در دایرکتوری خانگی کاربر حفظ میکند.
SaveSession
SaveQuitSession
مجموعههای رنگی (Colorsets)
مجموعههای رنگی روشی قدرتمند برای کنترل رنگها هستند. آنها منابع ظاهری مشترکی را ایجاد میکنند که بین fvwm و ماژولهای آن به اشتراک گذاشته میشوند. هنگامی که یک مجموعه رنگ تغییر میکند، تمامی بخشهای fvwm به آن واکنش نشان میدهند. یک مجموعه رنگ شامل رنگ پیشزمینه، پسزمینه، سایه و برجستگی (اغلب بر اساس رنگ پسزمینه) و نمای پسزمینه (شامل تصاویر و انواع گرادیانها) است.
Colorset num [options]
هشدار: بالاترین شماره مجموعه رنگ استفادهشده میزان مصرف حافظه را تعیین میکند؛ بنابراین اگر Colorset 100000 را تعریف کنید، حافظه برای ۱۰۰۰۰۱ مجموعه رنگ اختصاص مییابد. شمارهها را تا حد امکان کوچک نگه دارید.
طبق قرارداد، مجموعههای رنگی معمولاً به این صورت شمارهگذاری میشوند:
# 0 = رنگهای پیشفرض # 1 = پنجرههای غیرفعال # 2 = پنجرههای فعال # 3 = مدخل غیرفعال منو و پسزمینه منو # 4 = مدخل فعال منو # 5 = مدخل کمرنگشده منو (فقط پسزمینه) # 6 = پیشزمینه و پسزمینه ماژول # 7 = رنگهای برجستهسازی
اگر به رنگهای بیشتری نیاز دارید، میتوانید از قرارداد موجود در fvwm-themes استفاده کنید:
http://fvwm-themes.sourceforge.net/doc/colorsets
هر مجموعه رنگ دارای چهار رنگ، یک تصویر پیکسلی اختیاری و یک ماسک شکل اختیاری است. این چهار رنگ توسط ماژولها به عنوان رنگهای پیشزمینه، پسزمینه، برجستگی و سایه استفاده میشوند.
گزینههای options فهرستی جداشده با کاما از کلیدواژههای زیر است: fg، Fore، Foreground، bg، Back، Background، hi، Hilite، Hilight، sh، Shade، Shadow، fgsh، Pixmap، TiledPixmap، AspectPixmap، Transparent، RootTransparent، Shape، TiledShape، AspectShape، NoShape، ?Gradient، Tint، fgTint، bgTint، Alpha، fgAlpha، Dither، NoDither، IconTint، IconAlpha، Plain.
گزینههای fg، Fore و Foreground یک نام رنگ دریافت کرده و رنگ پیشزمینه را تنظیم میکنند. نام ویژه Contrast میتواند برای انتخاب رنگی که کنتراست خوبی با پسزمینه دارد استفاده شود. برای بازگرداندن رنگ به پیشفرض نام رنگ را حذف کنید.
گزینههای bg، Back و Background رنگ پسزمینه را تنظیم میکنند. همچنین رنگهای برجستگی و سایه را روی مقادیری تنظیم مینمایند که جلوه سهبعدی ایجاد کنند. نام ویژه Average میتواند برای انتخاب میانگین رنگهای تصویر پیکسلی استفاده شود.
گزینههای hi، Hilite و Hilight رنگ برجستگی را تنظیم میکنند. در صورت عدم تعیین، از رنگ پسزمینه محاسبه میشود.
گزینههای sh، Shade و Shadow رنگ سایه را تنظیم میکنند. در صورت عدم تعیین، از رنگ پسزمینه محاسبه میشود.
گزینه fgsh رنگ استفادهشده در جلوه سایه فونت را تنظیم میکند.
گزینههای Pixmap، TiledPixmap و AspectPixmap یک نام فایل دریافت کرده، در ImagePath جستجو نموده و آن را به عنوان تصویر پسزمینه استفاده میکنند. TiledPixmap تصویر را بدون مقیاسبندی تکرار میکند، Pixmap تصویر را میکشد تا اندازه شیء شود، و AspectPixmap تصویر را با حفظ نسبت ابعاد مقیاسبندی میکند.
گزینه Transparent یک تصویر پسزمینه شفاف ایجاد میکند. این تصویر به عنوان پسزمینه پنجره برای دستیابی به شفافیت ریشه استفاده میشود. برای این کار باید از گزینه ParentalRelativity در دستور Style استفاده کنید.
xv -root -quit mybg.png; fvwm-root -d
شفافیت بهدستآمده با Transparent به این بستگی دارد که آیا مجموعه رنگ به پیشزمینه یا پسزمینه پنجره اعمال شده باشد:
Colorset 12 VGradient 200 grey30 grey60 Colorset 17 Transparent *FvwmIconMan: Colorset 12 *FvwmIconMan: PlainColorset 17
برای دستیابی به شفافیت ریشه بهتر است از گزینه RootTransparent استفاده شود.
گزینه RootTransparent [ buffer ] یک پسزمینه شفاف نسبت به ریشه ایجاد میکند. برای کارکرد این گزینه باید از برنامهای سازگار با Esetroot یا fvwm-root با گزینه --retain-pixmap استفاده کنید. کلیدواژه buffer تنها زمانی مفید است که از گزینه Tint نیز استفاده شود.
گزینههای Shape، TiledShape و AspectShape یک نام فایل دریافت کرده و آن را به عنوان بیتمپ شکل ماسک استفاده میکنند.
هشدار: به دلیل نحوه پیادهسازی شکلها در X11، نمیتوان شکلدار شدن پنجرهها را لغو کرد و ممکن است نیاز به راهاندازی مجدد fvwm باشد.
گزینه ?Gradient ... یک تصویر پیکسلی گرادیان ایجاد کرده و آن را به اندازه پنجره میکشد. نوع آن میتواند یکی از مقادیر HGradient، VGradient، DGradient، BGradient، SGradient، CGradient، RGradient یا YGradient باشد.
گزینه Tint دو آرگومان شامل یک رنگ و یک درصد بین 0 تا 100 دریافت میکند و تصویر را با آن رنگ ترکیب مینماید.
گزینه fgTint رنگ پیشزمینه را با رنگ و درصد مشخصشده ترکیب میکند.
گزینه bgTint رنگ پسزمینه را با رنگ و درصد مشخصشده ترکیب میکند.
گزینه Alpha درصدی بین 0 تا 100 دریافت کرده و تصویر را با رنگ پسزمینه ترکیب میکند.
گزینه fgAlpha درصدی بین 0 تا 100 دریافت کرده و متن را با پسزمینه مجموعه رنگ ترکیب مینماید (برای فونتهای Xft).
گزینه Dither خطای تصویری (dither) را برای نمایشگرهای با عمق رنگ ۱۶ یا کمتر فعال میکند. NoDither آن را غیرفعال میسازد.
گزینههای IconTint و IconAlpha رنگ و شفافیت آیکونهای رندرشده در پسزمینه مجموعه رنگ را کنترل میکنند.
گزینه NoShape ماسک شکل را حذف میکند و Plain تصویر یا گرادیان پسزمینه را حذف مینماید.
مثالها:
Colorset 3 fg tan, bg navy
رنگ پیشزمینه مجموعه رنگ ۳ را به tan و پسزمینه را به navy تغییر میدهد.
Colorset 3 bg "navy blue"
رنگ پسزمینه را به navy blue تغییر میدهد.
Colorset 3 AspectPixmap large_murky_dungeon.xpm
تصویر پسزمینه را تنظیم میکند.
Colorset 3 bg Average
رنگ پسزمینه و رنگهای برجستگی را مطابق با میانگین تصویر پسزمینه تنظیم میکند.
Colorset 3 YGradient 200 3 blue 1000 navy 1 blue 1000 navy
یک تصویر گرادیان یین و یانگ به مجموعه رنگ ۳ اضافه میکند.
#!/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
باعث چشمک زدن مجموعه رنگ ۷ میشود.
نام رنگهای استفادهشده در مجموعههای رنگی به صورت متغیرهای fvwm ذخیره میشوند که میتوانند در دستورات جایگزین شوند:
AddToFunc InitFunction + I Exec exec xterm -fg $[fg.cs0] -bg $[bg.cs0]
CleanupColorsets
گرادیانهای رنگ (Color Gradients)
نحو گرادیان رنگ دو شکل دارد:
?Gradient colors start-color end-color
این شکل یک گرادیان خطی را مشخص میکند. آرگومانها شامل تعداد کل رنگها برای تخصیص (بین ۲ تا ۱۰۰۰)، رنگ اولیه و رنگ نهایی هستند.
مثال:
TitleStyle VGradient 20 rgb:b8/ce/bc rgb:5b/85/d0
?Gradient colors segments color length color [length color] ...
شکل دوم یک گرادیان غیرخطی را مشخص میکند. آرگومانها عبارتند از: تعداد کل رنگها (بین ۲ تا ۱۰۰۰)، سپس تعداد بخشها (segments). برای هر بخش، رنگ شروع، طول نسبی و رنگ پایان مشخص میشود.
مثالها:
Colorset 0 DGradient 128 2 lightgrey 50 blue 50 white # ۲۰٪ گرادیان از قرمز به آبی، # ۳۰٪ از آبی به سیاه، # ۵۰٪ از سیاه به خاکستری Colorset 0 DGradient 100 3 Red 20 Blue 30 Black 50 Grey # ۵۰٪ از آبی به سبز، سپس # ۵۰٪ از زرد به قرمز Colorset 0 HGradient 128 3 Blue 1000 Green 1 Yellow 1000 Red
توجه: برخی سبکهای گرادیان ممکن است کند بوده و حافظه زیادی مصرف کنند. برای بهبود کارایی میتوانید موارد زیر را امتحان کنید:
خاموش کردن برجستهسازی مدخل فعال منو به جز رنگ پیشزمینه:
MenuStyle <style> Hilight3DOff, !HilightBack
اطمینان از اینکه زیرمنوها روی منوی والد همپوشانی نداشته باشند:
MenuStyle <style> PopupOffset 1 100
اجرای سرور X با قابلیت backing storage:
startx -- -wm +bs
ممکن است لازم باشد این مثال را با سیستم خود تطبیق دهید.
| 2026-06-28 |