سینا سیادت

سازماندهی پروژه‌ها در ترمینال با استفاده از تیماکس

فردی داخل قایق نشسته و با چندین چوب ماهیگیری، ماهی می‌گیرد

در OS X کنترل پنجره برنامه‌ها توسط ابزارهایی مانند xmonad یا i3 امکان‌پذیر نیست. این باعث شد که به دنبال یک برنامه جایگزین برای مدریت ترمینال‌هایم باشم. در ادامه توضیح می‌دهم که من چطور به روشی برای استفاده از tmux (تیماکس) به عنوان یک tiling window manager برای ترمینال رسیدم.

در روزهای اول تمام کارهایم را در یک session انجام می‌دادم. برای هر پروژه یا هر کار تکرار شونده یک window (پنجره) ایجاد می‌کردم و با استفاده از کلیدهای Alt+h و Alt+l به پنجره بعدی یا قبلی سوئیچ می‌کردم.

برای مدتی کارها پیش می‌رفت و مشکلی بزرگی نداشتم. تنها مشکل این بود که برای ادامه‌ی کار روی یک پروژه باید شماره پنجره‌اش را حفظ می‌کردم، یا تک‌تک پنجره‌ها را مرور می‌کردم تا پنجره مورد نظر پیدا شود. وقتی فهمیدم که پنجره‌ها در تیماکس می‌توانند نام داشته باشند خیلی خوشحال شدم. دیگر می‌توانستم آنها را نامگذاری کنم، ولی نمی‌خواستم هر دفعه این دستورات را تایپ کنم:

tmux new-window -n project1

یا

tmux rename-window project2

برای رفع این مشکل اسکریپتی نوشتم تا با استفاده از آن پنجره‌های جدید ایجاد کنم و پنجره‌های موجود را جست‌وجو کنم، بدون اینکه مجبور باشم دستوری بنویسم یا نام کامل پنجره را حفظ باشم. هر بار که می‌خواستم پنجره‌ای را پیدا کنم کلید Alt+p را می‌زدم و قسمتی از نام پنجره را وارد می‌کردم. برای ایجاد پنجره جدید کافی بود همان Alt+p را بزنم و نام جدیدی وارد کنم.

687474703a2f2f692e696d6775722e636f6d2f63763535462e706e67

این اسکریپت کمک زیادی کرد ولی هنوز هم ایده‌آل نبود. این دفعه مشکل این بود که بعد از چند ساعت در هر پنجره تعداد زیادی pane ایجاد می‌شد. مثلا برای یک پروژه ممکن بود چهار pane وجود داشته باشد (سرور، لاگ، کنسول مشکل یابی و غیره) همه در یک پنجره. بعضی پروژه‌ها هم نیاز به بیش از یک پنجره داشتند.

Screen Shot 2016-02-14 at 16.35.24

در نهایت به روشی رسیدم که امروز هم از آن استفاده می‌کنم. در این روش برای هر پروژه بجای window یک session ایجاد می‌کنم. مثلا هر پروژه سارینا یک session دارد. به ازای هر نفر از اعضای خانواده و دوستان که کمک لازم دارند هم یک session به نام‌شان ایجاد می‌کنم. مزیت session این است که یک لایه طبقه‌بندی جدید اضافه می‌کند. یعنی درون هر session چند window، و درون هر window چند pane وجود دارد. تعداد نام‌هایی که باید انتخاب کنم و به خاطر بسپارم هم کمتر می‌شود، چون دیگر لازم نیست همه windowها نام‌گذاری بشوند.

session-finder

برای اینکه شما هم از این روش استفاده کنید، کارهای زیر را انجام بدهید:

mkdir -p ~/.tmux/
git clone https://github.com/siadat/session-finder.git ~/.tmux/session-finder
~/.tmux/session-finder/install.bash

اسکریپت install.bash چند key binding جدید به انتهای فایل tmux.conf شما اضافه می‌کند.

M-Space new window
M-l select next window
M-h select prev window
M-Tab select last window
M-L move current window to right
M-H move current window to left
M-Return toggle pane fullscreen
M-- scroll up
M-+ scroll down

در این فایل M به معنی کلید Alt یا Meta است. اگر از iTerm و یا از OSX Terminal استفاده می‌کنید باید این کلید را فعال کنید:

Enable Meta key in OSX Terminal: Settings > Keyboard > Use option as meta key
Enable Meta key in iTerm: Your profile > Keys > Left option key acts as __+Esc__

آیا شما هم از تیماکس یا برنامه مشابه‌ای استفاده می‌کنید؟ در قسمت نظر درباره‌ی تجربه و راه‌حل‌های خودتان بنویسید.

سینا سیادت

برنامه‌نویس گو و روبی در شرکت سارینا.