ترمینال dropdown (مثل quake) در مدیر پنجرهٔ i3
گذشت تا امروز که دیدم Arch بازها یک [کلکی سوار](downloads.sourceforge.net/tilda "HOWTO: get a quake-like urxvt terminal in openbox") کردهاند و توانستهاند urxvt را به صورت quake در OpenBox (یک راهنمای عالی برای کار با این مدیرپنجره را دوست خوبم [ایمان](emanlog.com "وبلاگ ایمان امینی!") در [ویکی لینوکس ریویو](wiki.linuxreview.ir/OpenBox "Openbox on linuxreview wiki") فراهم کرده) اجرا کنند. بماند که کلی ژانگولر بازی در آوردم که پیادهاش کنم و اخرش نتوانستم در i3 اجرایش کنم.
این شد که طبق معمول دست به [دامن i3](faq.i3wm.org/question/671/kuake-like-behavi.. "problem on i3 faq site") بازها شدم و با کمال تعجب دیدم که نوشابه در کوزه و ما دنبال آب میگردیم! قضیه از این قرار است که i3 با تمام کوچکیاش یک قابلیت خیلی ماه دارد به اسم scratchpad. که یعنی میتوانید با آن هر موقع خواستید هر پنجرهای را غیب کنید و هر وقت دیگر خواستید ظاهر کنید. این است که برای مثال ما که مصادف شده با مهاجرتم به ترمینال urxvt، این چنین i3 را کانفیگ میکنیم تا به نتیجهٔ دلخواهمان برسیم:
for_window [instance="dropdown_urxvt"] move to scratchpad, border 1pixel
for_window [instance="dropdown_urxvt"] focus; resize grow width 300px
bindsym F12 [instance="dropdown_urxvt"] scratchpad show, move position 110px 0px
آن بخش instance را داشته باشید تا در آخر کار بهش برگردیم. در خط اول میگوییم که اگر پنجرهٔ مورد نظرمان صدا شد، بفرستش به scratchpad و کلا آن بردارش را (که دور تمام پنجرهها در i3 وجود دارد) را حذف کن. در خط دوم هم همان پنجرهٔ مورد نظر را کمی عریضتر میکنیم. و در آخر کار هم در خط سوم میگوییم که هر وقت کلید F12 را زدیم، پنجرهٔ موردنظرمان را که بردهای آن پشت مشتها، در فلان مختصات صفحه ظاهر کن.
در مورد این توضیحات بالا میتوانید به راحتی در [راهنمای کاربران i3](i3wm.org/docs/userguide.html "i3 user guide") اطلاعات به درد بخوری پیدا کنید. و اما میماند نکات کنکوری:
تا اینجای کار، ما گفتیم که اگه پنجرهٔ مورد نظرمان را دیدی، چه کار کن. اما حالا مسئله اینجاست که این پنجره را چطور ایجاد کنیم. طوری که منحصر به فرد باشد. هر چه باشد نمیخواهم هر بار که urxvt را صدا زدم همان بالا باز شود. گاهی به یک ترمینال گنده نیاز دارم!
urxvt یک قابلیت خیلی به درد بخور دارد و آن هم این که میتوان آن را به صورت daemon اجرا کرد. بعد هم هر وقت خواستیم ترمینالی باز کنیم، یک کلاینت از همان daemon باز میشود که مزیتش سرعت بالای در دسترس قرار گرفتن پنجره است.
این است که اول از همه ترتیبی میدهیم که با باز شده i3 به صورت خودکار این daemon هم اجرا شود:
exec urxvtd
حالا هم نوبت به ساخت پنجرهمان میرسد. ظاهر خوشی ندارد که هر بار به صورت دستی بازش کنم، چون بلافاصله غیب میشود و باید با F12 صدایش کرد. این است که این را هم میگذارم خود i3 موقع بالا آمدن اجرا کند. به هر حال ما که یک نمونه از این کلاینت بیشتر نمیخواهیم:
exec urxvtc -name dropdown_urxvt
ها، همینجاست که به i3 میفهمانیم که کدام پنجره منظورمان است. حالا کافیست که یک بار i3 را ریست کنیم و F12 را بزنیم. نتیجهٔ کار عالیست:
پینوشت: درست است که طی حل این ماجرا راههای عجیب و غریبی را غیر از آسانترین راهی که جلوی رویم بود انتخاب کردم، ولی چیزهای جالبی یاد گرفتم که در پستهای آینده در موردشان خواهم گفت ;-)
پینوشت۲: ممکن است روی نسخهٔ استیبل i3 (در این تاریخ) با دستور focus که در این آموزش استفاده شده مشکل دارین. آخرین نسخهٔ git این مشکل را بر طرف کرده!