মূল বিষয়ে

টিমাক্সের মক‍্শো: ২

লেখক

বিদেশি

টিমাক্সের কিছু কনফিগারেশনের কথা বলেছিলাম প্রথম পর্বে। সেগুলো লিখে ফেলে এই অধ্যায় শেষ করে ফেলি।

টিমাক্সের ডিফল্ট কনফিগ থাকে $HOME/.tmux.conf এই ফাইলে1। ফাইলটা যদি না থাকে তাহলে ওই নামে একটা ফাঁকা ফাইল তৈরি করে নিন। তারপর আপনার প্রিয় টেক্সট এডিটরে ওপেন করুন।

প্রথমেই শেল ঠিকঠাক করা দরকার। টিমাক্স সাধারণত প্রাথমিকভাবে একটা লগইন শেল চালু করে, যা আপনার শেলের কনফিগ (যেমন .bashrc) নাও পড়তে পারে। তাই প্রথমে এইটা ঠিক করে নেয়া যাক। tmux.conf ফাইলে এই লাইনটা লিখে দিন, যার ফলে আপনার ডিফল্ট শেল সাধারণ ইন্টারঅ্যাক্টিভ মোডে চালু হবে।

set -g default-shell $SHELL
Code language: Bash (bash)

এখন শেলটা হয়ত সাদামাটা লাগতে পারে, হয়ত অনেক কালার দেখা যাচ্ছে না। সেজন্য লিখুন:

set -g default-terminal "screen-256color"
Code language: Bash (bash)

টার্মিনালে ২৫৬ কালারের পরিবর্তে ট্রু-কালার পেতে চাইলে এই সেটিং সাহায্য করতে পারে:

set -ga terminal-overrides ',*256color*:Tc'
Code language: Bash (bash)

এবার, আমরা জানি টিমাক্সে প্রিফিক্স+উইন্ডো নাম্বার চাপলে সেই উইন্ডো একটিভ হয়। কিন্তু টিমাক্সে উইন্ডো (এবং পেন) এর গণনা শুরু হয় ০ থেকে, যা প্রিফিক্স থেকে অনেকটা দূরে। আবার প্রথম উইন্ডোতে ফোকাস করতে প্রিফিক্স,0 প্রেস করা লাগে, আর তার পরের উইন্ডো এর জন্য কিবোর্ডের অপর প্রান্তে প্রিফিক্স,1 এর কাছে যেতে হয়। তাই ইনডেক্সিং 1 থেকে শুরু হলে সুবিধা। এই জন্য:

set -g base-index 1 set -g pane-base-index 1
Code language: AVR Assembler (avrasm)

এবার, ধরা যাক, চারটা উইন্ডো খোলা আছে, মানে ইনডেক্স হচ্ছে 1, 2, 3, 4। এর মধ্যে তৃতীয়টা বন্ধ করলে, আগেকার চতুর্থ উইন্ডোটা তার জায়গা নেয়, কিন্তু তার ইনডেক্স পাল্টায় না, অর্থাৎ ইনডেক্সগুলো 1, 2, 4 এইরকম থেকে যায়। মানে একটা ছেদ তৈরি হয়েছে। এটা দূর করার জন্য:

set -g renumber-windows on
Code language: Bash (bash)

প্রিফিক্স,t কী দিয়ে বর্তমান পেনে বর্তমান সময়টা দেখা যায়। এই সময়টা ২৪ঘন্টা হিসাবে দেখায়। AM/​PM সহ ১২ ঘন্টা হিসেবে দেখতে চাইলে:

set -g clock-mode-style 12
Code language: Bash (bash)

স্ক্রলব্যাক বাফার, অর্থাৎ টার্মিনাল আউটপুটের হিস্টোরি বাড়িয়ে নেয়া যায় নিচের সেটিংটা দিয়ে। এখানে উদাহরণস্বরুপ 50000 দেয়া, মানে স্ক্রল করে আগের ৫০ হাজার লাইন ফিরে দেখা যাবে।

set -g history-limit 50000
Code language: Bash (bash)

প্রিফিক্স,: দিয়ে টিমাক্সের কমান্ডলাইনে বিভিন্ন কমান্ড দেয়া যায়। সাধারণ শেলের কমান্ড হিস্টোরি যেমন .bash_history বা .zsh_history ইত্যাদি ফাইলে সেভ হয়, তেমনি ওই কমান্ডগুলোও একটা ফাইলে সেভ করে রাখতে চাইলে:

set -g history-file "$HOME/.tmux_history"
Code language: Bash (bash)

এবার কিছু কন্ট্রোল কনফিগার করা যাক। প্রথম পর্বে যেমন বলেছিলাম, মাউস কন্ট্রোল চালু করার জন্য:

set -g mouse on
Code language: Bash (bash)

টিমাক্সের শর্টকাটগুলো প্রেস করার পর কিবোর্ড কন্ট্রোল ফেরত দিতে টিমাক্স একটু দেরি করে, এজন্য দ্রুত কাজ করতে একটু সমস্যা হতে পারে। এই দেরি হ্রাস করার জন্য:

set -g repeat-time 350 set -g escape-time 0
Code language: Bash (bash)

এখানে 02 আর 350 এগুলো মিলিসেকেন্ডের হিসাব। রিপিটেবল শর্টকাট যেমন পেন রিসাইজের জন্য প্রিফিক্স, ctrl+arrow এতে যদি সমস্যা হয়, তাহলে repeat-time এ 350 এর পরিবর্তে ক্রমাগত বৃদ্ধি করে উপযুক্ত ভ্যালু বসিয়ে নিন (যেমন 450, 500 ইত্যাদি)।

টার্মিনালে মাউসের স্ক্রলহুইল যদি কাজ না করে, তাহলে এই ওভাররাইড সাহায্য করতে পারে:

set -ga terminal-overrides ',*256color*:smcup@:rmcup@'
Code language: Bash (bash)


এখন একটু ওপিনিয়নেটেড কনফিগ।

টিমাক্সের ডিফল্ট প্রিফিক্স হচ্ছে ctrl+bকন্ট্রোল আর b একসথে প্রেস করা বেশ অস্বস্তিকর, এজন্য সাধারণত অনেকেই k]ctrl[/k]+a কে প্রিফিক্স হিসেবে সেট করে নেয়। এটা করার জন্য:

bind C-a send-prefix set -g prefix C-a unbind C-b
Code language: Bash (bash)

নতুন পেন খোলার জন্য প্রিফিক্স+"/​প্রিফিক্স+% ব্যবহার করা হয়, যা মনে রাখা কষ্টকর। তারচেয়ে হরাইজন্টাল স্প্লিট মানে আনুভুমিকভাবে ভাগ করে পেন খোলার জন্য _ আর অপরপক্ষে ভার্টিকাল স্প্লিটের জন্য | ব্যবহার করা যায়; এতে সুবিধা হচ্ছে বাটনগুলির সাথে স্প্লিটের ধরণ সাদৃশ্যপূর্ণ হয়:

unbind '"' unbind '|' bind _ split-window -v bind | split-window -v
Code language: Bash (bash)

অর্থাৎ এবার প্রিফিক্স,|/​_ প্রেস করলে স্প্লিট হবে। বাই দা ওয়ে, একই পদ্ধতিতে অন্যান্য যেকোন কমান্ডের শর্টকাট আনসেট এবং নতুন কোন পছন্দমত শর্টকাট সেট করে নেয়া যায় সহজেই। সব কমান্ডের বর্ণনা আছে টিমাক্সের ম্যানুয়ালে।

চলমান পেনগুলোর মধ্যে ফোকাস পরিবর্তন করা নিয়মিত কাজ। সাধারণত ফোকাস পরিবর্তনের শর্টকাট হচ্ছে প্রিফিক্স,অ্যারো। পাশাপাশি ভিমের মত h/​j/​k/​l কী গুলোও নিতে পারি। আর যেহেতু বারবার প্রিফিক্স প্রেস করা বিরক্তিকর, তাই এগুলো রুট হিসেবে সেট করছি, মানে সরাসরি ctrl+h/​j/​k/​l দিয়েই পেন পরিবর্তন হবে।

bind -r -T root C-h select-pane -L bind -r -T root C-j select-pane -D bind -r -T root C-k select-pane -U bind -r -T root C-l select-pane -R
Code language: Bash (bash)

কিন্তু এখন তো ctrl+h/​j/​k/​l কী গুলো টিমাক্স খেয়ে ফেলবে, যদি টার্মিনালে চলমান প্রোগ্রামে এই শর্টকাটগুলো পাঠাতে চাই? তখন আগে প্রিফিক্স প্রেস করতে হবে।

bind -T prefix C-h send-keys C-h bind -T prefix C-j send-keys C-j bind -T prefix C-k send-keys C-k bind -T prefix C-l send-keys C-l
Code language: Bash (bash)

পেন বন্ধ করার শর্টকাট হচ্ছে প্রিফিক্স,x। উইন্ডো আর সেশন বন্ধ করার শর্টকাটও সমতুল্য করে নিতে পারি:

bind x confirm-before -p 'kill-pane #P? (y/n)" kill-pane bind X confirm-before -p 'kill-window #W? (y/n)" kill-window bind M-x confirm-before -p 'kill-session #S? (y/n)" kill-session
Code language: Bash (bash)

ফলে এখন:

প্রিফিক্স,x: পেন বন্ধ করা
প্রিফিক্স,shift+x: উইন্ডো বন্ধ করা
প্রিফিক্স,alt+x: সেশন বন্ধ করা।

সবশেষে কনফিগ রিলোড করার জন্য একটি শর্টকাট প্রিফিক্স,shift+r সেট করে নিই। (এখানে টিমাক্স যে কনফিগ ফাইল ব্যবহার করছে সেটার পাথ বসাতে হবে)

bind R source-file -q ~/.tmux.conf\; display-message "config reloaded."
Code language: Bash (bash)

কিবোর্ড শর্টকাটের বিষয়ে বিস্তারিত লেখা আছে টিমাক্স ম্যানুয়ালের KEYBINDINGS সেকশনে।

এবার স্টাইলিং নিয়ে দুটো কথা বলি (এইটা আমার স্ট্রং পয়েন্ট না, আমি খুবই সামান্য মিনিমাল চেহারায় রেখেছি)।

বর্তমান পেন চিহ্নিত করার জন্য টিমাক্স শুধু বর্ডারের রঙ পাল্টে দেয়। এর সঙ্গে পেনের নাম আর ইনডেক্স নাম্বারটাও দেখতে পেলে ভালো হয়।

set -g pane-border-status top set -g status-position bottom
Code language: Bash (bash)

এবার সার্বিক বর্ডার আর স্ট্যাটাসবার একই রঙের করে ফেলতে পারি। তারপর পেন টাইটেলের সাহায্যে বর্তমান পেন চিহ্নিত করবো।

set -g pane-border-style 'fg=colour26' set -g pane-active-border-style 'fg=colour26' set -g status-style 'bg=colour26'
Code language: Bash (bash)

এবার পেন টাইটেল সেট করি।

set -g pane-border-format '#[fg=colour12,bold]#{?pane_active,#[bg=colour26],}#{?pane_active,#[fg=colour11],} #P:#T #[fg=default,nobold,bg=default]'
Code language: Bash (bash)

এখানে colourXX অংশগুলো পরিবর্তন করে পছন্দমত রঙ সেট করে নিতে পারেন। এই colourXX অংশগুলো টার্মিনালের কালারস্কিম অনুসারে রঙ বাছাই করে। স্কিমের প্রাইমারি ১৬টি কালার, colour00 থেকে colour15 এ রয়েছে। আর প্রাইমারি কালারগুলোর গ্রাডিয়েন্টসমূহ colour16 থেকে colour255 পর্যন্ত বিস্তৃত। এই সেটিংটা যথেষ্ট জটিল, এখানে টিমাক্সের টেমপ্লেট সিনট্যাক্স ব্যবহার করা হচ্ছে। এ বিষয়ে টিমাক্স ম্যানুয়ালের FORMATS সেকশনে বিস্তারিত লেখা আছে। একই ফরম্যাট ব্যবহার করে স্ট্যাটাসবারের টেক্সট, উইন্ডো টাইটেল ইত্যাদিও কাস্টমাইজ করা যাবে।

ব্যাস এবার কনফিগ ফাইলটা সেভ করে ফেলুন।

এই হল মোটামুটি টিমাক্সের প্রাথমিক কাস্টমাইজেশন, যা সবার কাজে লাগতে পারে। তারপর স্বভাবতই প্রোগ্রামটা চালাতে চালাতে ব্যক্তিগত প্রয়োজনমাফিক আরও অনেক ধরনের কাস্টমাইজেশন করা হয়েছে, হচ্ছে এবং হবে, যার জন্য একটা সদা-উপকারী কমান্ড:

$ man tmux
Code language: Shell Session (shell)

  1. টিমাক্স ৩.২ সংস্করণ থেকে $XDG_CONFIG_HOME/tmux/tmux.conf এই ফাইলটাও পড়তে পারে
  2. একটু ব্যাখ্যা করা যায়: টার্মিনালে esc কী টা alt (বা মেটা কী) এর কাজ করতে পারে, তবে একটু পার্থক্য থাকে। উদাহরণস্বরূপ alt+a শর্টকাটটা নেই। alt এবং a একসাথে প্রেস করে শর্টকাটটা ব্যবহার করা যায়, কিন্তু এসকেপ কী কে alt এর বিকল্প হিসাবে ব্যবহার করে শর্টকাটটা চালাতে চাইলে, প্রথমে এসকেপ প্রেস করে, ছেড়ে দিয়ে, তারপর a প্রেস করা লাগে। তাই টিমাক্স যখন একটা esc কী প্রেস শনাক্ত করে, তারপরে কিছু সময় অপেক্ষা করে, পরবর্তী কী টা এসকেপের সাথে কোন শর্টকাট তৈরি করতে পার কীনা তা যাচাই করার জন্য। আমরা যেহেতু সাধারণত alt কী সম্পন্ন কীবোর্ডই ব্যবহার করছি, তাই আমাদের তো এসকেপ কীকে অল্টের বিকল্প হিসাবে ব্যবহারের দরকার নাই, তাই টিমাক্সের ওই অপেক্ষা করারও দরকার নাই। তাই escape-time কে শুন্য করে দিচ্ছি।

অবস্থান:

আগের লেখা

টিমাক্সের মক‍্শো: ১

পরের লেখা

ভিম এলো কোথা থেকে