Calm Hill My Random Thoughts

Tmux Simple Setup

ကိုယ်တိုင်လည်း အလုပ်မလုပ်တာ နည်းနည်းကြာပြီဆိုတော့ ကိုယ့်စက်မှာကသိပ်ပြီးတော့ ထွေထွေထူးထူး Setup လုပ်ထားတာ မရှိတာလည်းကြာပြီ။ SSH Login လေး ဝင်လို့ရရင် အဆင်ပြေပြီဆိုတဲ့ အခြေအနေလောက်ပဲဆိုတော့ စက်ထဲမှာလည်း Install လုပ်ထားတာ ဘာမှသိပ်မရှိဘူးရယ်။ အခုရက်ပိုင်းတော့ စမ်းစရာတွေ လုပ်စရာတွေနဲ့ များလာတော့ Terminal ကို Tab တွေနဲ့ဖွင့်ထားရတာ တခုနဲ့တခုပြောင်းချင်ရင် သိပ်ပြီးခရီးမတွင်ဘူး နောက်ပြီးတော့ အခုခေတ်မော်နီတာတွေက အနည်းဆုံးတောင် အလျားကတလံလောက် ဖြစ်လာနေပြီဆိုတော့ Screen တခုလုံး နေရာမလပ်သုံးမှပဲ အကျိုးပိုရှိလိမ့်မယ်။ Layout တွေကို စီချင်သလိုစီလိုရတဲ့ Terminal Client App တွေရှိပေမယ့် UI မရှိတဲ့ Platform နဲ့ ဖြစ်ရင်ဆိုတာတခုနဲ့တင် ကိုယ့်အတွက်က အဆင်မပြေပါဘူး။

ကျောင်းသားဘဝကစပြီး GNU Screen သုံးတယ် အရင်သုံးနေကျ အချိန်တုံးကဆိုရင် စိတ်ထဲကနေ ဖွင့်ထားတဲ့ Windows တခုကို သွားမယ်ဆိုရင် စဉ်းစားစရာမလိုဘူး လက်က Key က နှိပ်ပြီးသားဖြစ်နေပြီ အခုကတော့ Hot Key တောင် အတော်ပြန်စဉ်းစားရပြီး မေ့နေပါပြီလေ။ အရင်က Screen မှာ Window ပဲ ခွဲပြီးပြောင်းလို့ရတယ် အခုကြည့်တော့ Window တွေကို Split လုပ်လို့ပါရနေပါပြီ ဒါပေမယ့် အခုနောက်ပိုင်းတော့ screen သုံးတာနည်းသွားပြီး Tmux ကို သုံးကြတာတွေ့တယ်။ Tmux နည်းနည်းစမ်းကြည့်တော့ Screen နဲ့ Hot Key ပဲကွာတာပါ ကျန်တာတွေက အားလုံးအတူတူပဲဆိုတော့ ကိုယ့်အတွက်အလွယ်တူ ပြန်ပြီးတော့ မှတ်မိနိုင်ပါတယ်။ လူသုံးများတော့ တခုခုဆိုလည်း Config တွေလိုအပ်လည်း ရှာရတာလွယ်တာပေါ့ဆိုပြီး Tmux ပဲ ပြောင်းသုံးမယ် စိတ်ကူးဖြစ်တယ်။

Installation on MacOS with Homebrew

brew install tmux

Install လုပ်တာကလွယ်ပါတယ် Mac ပေါ်မှာတော့ Homebrew နဲ့ Install လုပ်လိုက်တယ် တခြား Platform တွေဆိုရင်တော့ Package Manager တွေနဲ့ Install လုပ်လို့ရမှာပါ။ Tmux စသုံးဖို့က သာမန်အားဖြင့် ဘာမှမလိုပါဘူး tmux လို့ command line မှာ ရေးလိုက်ရုံပါပဲ။

Staring Tmux

tmux

Tmux ထဲ ရောက်သွားရင်သာ Screen တွေကို Manage လုပ်ဖို့အတွက် Key တွေမှတ်မိဖို့ပဲ အဲဒါတွေကလည်း သုံးနေတယ်ဆိုရင် သိပ်မခက်ပါဘူး မှတ်မိပါတယ်။ Terminology အနေနဲ့ သိထားရမှာက Tmux မှာ Container တွေကို အကြီးဆုံးကနေ အသေးဆုံးအထိ တန်းစီပြောရမယ်ဆိုရင် Session ဆိုတာက အကြီးဆုံးဖြစ်ပြီးတော့ Session တခုထဲမှာ Window တွေ တခုထက်မက ပါလို့ရတယ်။ Window ထဲမှာမှ Pane တွေ တခုထက်မက ပါလို့ရတယ် Pane ဆိုတာကို Interactive Shell တခု Run လို့ရတဲ့နေရာ တခုလို့ အလွယ်ယူဆလို့ရတယ်။ tmux လို့ command မှာ စလိုက်တာနဲ့ Session တခု Window တခု Pane တခုနဲ့စထားပေးတယ်။

Tmux မှာ ပထမဆုံး မှတ်ထားရမှာက Hot Key က Ctrl + b ပါ ပြီးတော့မှ ဘာလုပ်ချင်သလဲ မူတည်ပြီးတော့ Key တွေပြောင်းသွားမှာ။ ဥပမာအနေနဲ့ Active ဖြစ်နေတဲ့ Pane ကို Vertical အနေနဲ့ ဘယ်နဲ့ညာ နှစ်ခြမ်းခွဲချင်တယ်ဆိုရင် Ctrl + b ကိုအရင်နှိပ် Vertial split အတွက်က % ကိုနှိပ်လိုက်ရင် Pane နှစ်ခုခွဲပေးမှာပေါ့။ အသုံးများတဲ့ Command တွေကို အောက်မှာ မှတ်ထားပေးတယ်။ Tmux ရဲ့ Documentation မှာ Ctrl + b ကို C-b လို့ပဲရေးပါတယ်။

Action Hot Key (C-b) + Command
Create new window C-b + c
Split window vertically C-b + %
Split window horizontally C-b + ‘
Select pane C-b + Direction Key
Display pane number and select C-b + q + Pane Number
Zoom the active pane C-b + z
Choose a window from a list C-b + w
Select window C-b + Window Number [0-9]
Detech session C-b + d
Help C-b + ?

သုံးရင်နဲ့ မမှတ်မိရင် C-b + ? နဲ့ ကြည့်ရင်ရပါလိမ့်မယ်။ အဲဒါပြီးရင်တော့ ကိုယ်သုံးလို့ပိုပြီးတော့ အဆင်ပြေအောင် Terminal စပြီးဖွင့်လိုက်တာနဲ့ tmux စပြီးသားဖြစ်အောင် နည်းနည်းပါးပါး config ထဲမှာထည့်ပေးရင် ပိုပြီးအဆင်ပြေတယ်။ ကိုယ်ကတော့ Zsh သုံးတော့ .zprofile ထဲမှာ အောက်မှပြထားသလို ထည့်ထားတယ်။ Tmux session ရှိပြီသားလား $TMUX မှာကြည့်တယ် မရှိသေးရင် Session အသစ်တခုစလိုက်တယ် ရှိပြီးသားဖြစ်နေရင်တော့ ရှိပြီးသားကိုပဲ attach လုပ်ပေးလိုက်တယ်။ အဲလို Configure လုပ်ထားတော့ ကောင်းတာတခုက တခါတခါမှားပြီးတော့ Cmd + q နှိပ်လိုက်မိပြီး Terminal ပိတ်သွားလည်း ပြန်ဖွင့်လိုက်ရင် tmux session က attach ပြန်ဖြစ်သွားတော့ ဘာမှမဖြစ်သလိုပဲ ပြန်သုံးလို့ရပါလိမ့်မယ်။ မကောင်းတာတခုကတော့ Terminal App မှာ Tab တွေ တခုထက် ပိုဖွင့်လို့ရတယ်ဆိုလည်း အကျိုးမထူးတော့ဘူး tmux session အတူတူဖြစ်နေလိမ့်မယ်။

# Start tmux with ZSH
if [ -z "$TMUX" ]
then
    tmux attach -t TMUX || tmux new -s TMUX
fi

တချို့ကတော့ Keyboard ပဲသုံးရင် ပိုမြန်တယ်လို့ ယူဆတာရှိတယ် ကိုယ်ကတော့ အဲလိုလည်းသိပ် အယုံအကြည်မရှိပါဘူး Mouse သုံးလို့ အဆင်ပြေတဲ့နေရာ Mouse သုံးပါတယ်။ Tmux ထဲက Text တွေကို Select လုပ်ဖို့နဲ့ Copy ကူးဖို့အတွက် Mouse သုံးလို့ရအောင်လည်း Config နည်းနည်းပြင်ပေးရင် အဆင်ပိုပြေတယ်။ Tmux အတွက် ~/.config/tmux/tmux.conf ထဲမှာ အောက်မှာပြထားသလို ရေးထားလိုက်တယ်။ ပထမတကြောင်းက Mouse ကို Enable လုပ်ထားတာ နောက်တခုကတော့ Mouse နဲ့ Drag လုပ်ပြီး Select လုပ်တာနဲ့ Copy အော်တိုကူးလိုက်တာ။ တခုတော့ရှိတယ် Mac ဖြစ်နေလို့ pbcopy နဲ့သုံးထားတာ Linux တို့လို တခြားဟာဖြစ်နေရင်တော့ သက်ဆိုင်ရာ Platform အလိုက် xclip လိုမျိုး Clipboard ပေါ် ကူးတဲ့ Command ကို ပြောင်းသုံးဖို့လိုလိမ့်မယ်။ Mouse လုံးဝမရှိတဲ့ Terminal ကနေ သုံးဖို့အတွက်ဆိုရင်တော့ Copy Mode ပြောင်း Select လုပ် Copy ကူး စတာတွေက Vi or Emacs သုံးတတ်ရင်မခက်ပါဘူး အဲဒါအတွက်ကတော့ ဖြတ်လမ်းမရှိပါဘူး အလေ့အကျင့်လိုပါလိမ့်မယ်။

set -g mouse on
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"

ဒါပဲထိုင်လုပ်နေတော့လည်း ခတ်ကွင်းပြင်တာနဲ့ ရွာသစ်ကြီးရောက်ဆိုသလို အလုပ်မလုပ်ရပဲဖြစ်တော့မယ် ဒီအတိုင်းပဲသုံးနေတာ လပိုင်းတော့ဖြစ်နေပါပြီ ဘာမှတော့ထပ်ပြီး ပြင်ဖို့လိုတယ်မထင်မိသေးဘူး အဆင်ပြေနေတာပါပဲ။ Key binding တွေပဲ အစပိုင်းမှာ နည်းနည်းမေ့တော့ C-b ? မကြာမကြာ ကြည့်ရပေမယ့် သုံးတာများလာတာနဲ့ အဆင်ပြေသွားပါတယ် တကယ်ကတော့ အလေ့အကျင့်ပါပဲ။ စက်တလုံးထဲမှာ Multi-users ဖြစ်နေရင် Session Share လုပ်တာတို့ အသုံးတည့်မယ်ဆိုရင် လုပ်လို့ရတဲ့အတွက် စမ်းကြည့်လို့ရပါတယ်။ Key binding တွေက ရှုပ်လွန်းတယ်ထင်ရင် Byobu လို Window manager နဲ့လည်း တွဲသုံးလို့ရတယ် စိတ်ဝင်စားရင် စမ်းသုံးကြည့်ပေါ့ ကိုယ့်အတွက်တော့ အဲဒါတွေက ပိုပြီးရှုပ်တယ် ထင်မိသလို မလိုအပ်တာနဲ့ မသုံးဖြစ်ပါဘူး။