টিমাক্সে ফলক শিরোনাম


89

আমার লোকাল মেশিনে আমি 3 টি নোড.জেএস এর দৃষ্টান্ত এক সাথে চলমান পেয়েছি। "সার্ভারস" নামে একটি টিএমউক্স উইন্ডোতে প্রত্যেকটির নিজস্ব ফলক রয়েছে। সমস্যাটি হ'ল কোন প্যানে কোন নোডটি চলছে তা বোঝা এত সহজ নয়, 'কারণ তাদের লগগুলি সমান।

আমার যা দরকার তা প্রতিটি ফলকের শিরোনাম। আমি যেমন পেয়েছি, tmux এর নিজস্ব বৈশিষ্ট্য নেই: এটি উইন্ডোগুলির জন্য কেবল শিরোনাম রয়েছে, প্যানগুলির জন্য নয়। প্রতিটি নোড.জেএস ইনস্ট্যান্সের জন্য প্রতিটি ফলকের অভ্যন্তরে পৃথক টিএমক্স সেশন শুরু করা ওভারকিলের মতো দেখাচ্ছে looks

সুতরাং কিছু ছোট প্রোগ্রাম আছে যা একটি কমান্ড আরম্ভ করে একটি নির্দিষ্ট স্ট্যাটাস বারের সাথে তার আউটপুট মোড়ানো?

আগাম ধন্যবাদ


4
সংস্করণ ২.৩ হিসাবে tmux ফলক শিরোনাম সমর্থন করে, দেখুন stackoverflow.com/a/37602055/266453
ডেনিস জি

উত্তর:


80

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

আপনি পালাবার ক্রম চট্টগ্রাম সিটি কর্পোরেশন এর সাথে একটি ফলকে শিরোনাম সেট করতে পারেন ]2;... চট্টগ্রাম সিটি কর্পোরেশন \(যেমন অধ্যায় নামক দেখতে নাম ও নমুনা এ থেকে জেড মধ্যে tmux র manpage)। আপনি শেল থেকে এটির মতো এটি করতে পারেন:

printf '\033]2;%s\033\\' 'title goes here'

প্রতিটি ফলকের শিরোনামটি সিস্টেমের হোস্টনামের ডিফল্ট হয়। ডিফল্টরূপে সক্রিয় ফলকে শিরোনাম ডানদিকে প্রদর্শিত হয় tmux অবস্থা লাইন (অধিবেশন পরিবর্তনশীল এর ডিফল্ট বৈশ্বিক মান status-rightহয় "#22T" %H:%M %d-%b-%y, যা শো ফলকে শিরোনাম, সময়, এবং তারিখ 22 অক্ষর)।

সুতরাং, যতক্ষণ না আপনি সক্রিয় ফলকের শিরোনামটি দেখতে সক্ষম হয়ে সন্তুষ্ট হন (অর্থাত্ একটি নিষ্ক্রিয় ফলকের শিরোনামটি দেখতে প্যানগুলি স্যুইচ করতে ইচ্ছুক), আপনি ডিফল্ট কার্যকারিতাটি পেতে পারেন। প্রতিটি ফলকের জন্য প্রধান কমান্ড শুরু করার আগে যথাযথ শিরোনাম-সেটিং-এড়াক সিকোয়েন্সটি প্রেরণ করুন।


আপনার প্রতি-ফলকের তথ্য প্রদর্শন করার জন্য যদি পুরোপুরি ডেডিকেটেড লাইনের প্রয়োজন হয়, তবে নেস্টেড টিএমউक्स সেশনগুলি আপনার প্রথমে মনে হতে পারে তত বেশি (অপ্রয়োজনীয়) "ওভারকিল" নাও হতে পারে।

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

শেষ লাইনে যান।

অভ্যন্তরীণ টার্মিনালে প্রেরিত হতে হবে

শেষ লাইনের পরের দিকে যান।

যখন অনুবাদ হয় এবং বাইরের টার্মিনালে প্রেরণ করা হয়। একইভাবে, অভ্যন্তরীণ টার্মিনালে প্রেরিত একটি এলএফ অবশ্যই হয়ে উঠবে

যদি কার্সারটি শেষ লাইনের পরের দিকে থাকে, তবে একটি স্পষ্ট পরবর্তী-থেকে-শেষ লাইনটি সরবরাহ করতে (শেষ লাইনের স্থিতি রেখাটি সুরক্ষিত করতে) এই লাইনটি এবং তার উপরে সমস্ত লাইন এক লাইন উপরে স্ক্রোল করুন। অন্যথায়, একটি এলএফ পাঠান।

বাইরের টার্মিনালে

Tmux এবং স্ক্রিনের মতো প্রোগ্রামগুলি কেবল এই জাতীয় টার্মিনাল পুনরায় ইমুলেটর। অবশ্যই, টার্মিনাল এমুলেটরটির চারপাশে অন্যান্য অনেক কার্যকারিতা আবৃত রয়েছে তবে কেবলমাত্র নির্ভরযোগ্য স্ট্যাটাস লাইন সরবরাহ করতে আপনার টার্মিনাল এমুলেশন কোডের একটি বৃহত অংশ প্রয়োজন need


তবে যতক্ষণ না একটি হালকা ওজন সমাধান রয়েছে

  1. আপনার প্রোগ্রামগুলির ( নোড.জেএস উদাহরণস্বরূপ) যে প্যানেগুলি চলছে সেগুলির সাথে সীমিত টার্মিনাল মিথস্ক্রিয়া রয়েছে (যেমন কোনও কার্সার অবস্থান নেই), এবং
  2. আপনার প্রোগ্রামগুলি চলাকালীন আপনি ফলকের আকার পরিবর্তন করবেন না।

অনেক টার্মিনাল এমুলেটরগুলির মতো, tmux তার প্যানে একটি "সেট স্ক্রোলিং অঞ্চল" টার্মিনাল নিয়ন্ত্রণ কমান্ড সমর্থন করে supports আপনি এই কমান্ডটি টার্মিনালের শীর্ষে (বা নীচে) এন -1 লাইনে স্ক্রোলিং অঞ্চলটি সীমাবদ্ধ করতে এবং অ-স্ক্রোলিং লাইনে কিছু প্রকারের উদাহরণ-সনাক্তকারী পাঠ্য লিখতে পারেন।

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

আমি একটি স্ক্রিপ্ট লিখেছিলাম tputযা উপযুক্ত নিয়ন্ত্রণ সিক্যুয়েন্সগুলি তৈরি করতে, নন-স্ক্রোলিং লাইনে লিখতে এবং কার্সারটিকে স্ক্রোলিং অঞ্চলে স্থানান্তরিত করার পরে একটি প্রোগ্রাম চালাতে ব্যবহার করে:

#!/bin/sh

# usage: no_scroll_line top|bottom 'non-scrolling line content' command to run with args
#
#     Set up a non-scrolling line at the top (or the bottom) of the
#     terminal, write the given text into it, then (in the scrolling
#     region) run the given command with its arguments. When the
#     command has finished, pause with a prompt and reset the
#     scrolling region.

get_size() {
    set -- $(stty size)
    LINES=$1
    COLUMNS=$2
}
set_nonscrolling_line() {
    get_size
    case "$1" in
        t|to|top)
            non_scroll_line=0
            first_scrolling_line=1
            scroll_region="1 $(($LINES - 1))"
            ;;
        b|bo|bot|bott|botto|bottom)
            first_scrolling_line=0
            scroll_region="0 $(($LINES - 2))"
            non_scroll_line="$(($LINES - 1))"
            ;;
        *)
            echo 'error: first argument must be "top" or "bottom"'
            exit 1
            ;;
    esac
    clear
    tput csr $scroll_region
    tput cup "$non_scroll_line" 0
    printf %s "$2"
    tput cup "$first_scrolling_line" 0
}
reset_scrolling() {
    get_size
    clear
    tput csr 0 $(($LINES - 1))
}

# Set up the scrolling region and write into the non-scrolling line
set_nonscrolling_line "$1" "$2"
shift 2

# Run something that writes into the scolling region
"$@"
ec=$?

# Reset the scrolling region
printf %s 'Press ENTER to reset scrolling (will clear screen)'
read a_line
reset_scrolling

exit "$ec"

আপনি এটি এর মতো ব্যবহার করতে পারেন:

tmux split-window '/path/to/no_scroll_line bottom "Node instance foo" node foo.js'
tmux split-window '/path/to/no_scroll_line bottom "Node instance bar" node bar.js'
tmux split-window '/path/to/no_scroll_line bottom "Node instance quux" node quux.js'

স্ক্রিপ্টটি tmux এর বাইরেও কাজ করা উচিত যতক্ষণ না টার্মিনালটি তার csrএবং cupটার্মিনো ক্ষমতা সমর্থন করে এবং প্রকাশ করে ।


আপনার লিপিটি যেমনটি প্রত্যাশা করেছিল ঠিক তেমন কাজ করে; একমাত্র প্রশ্ন: "নন_স্ক্রোল_লাইন" এর রঙটি কাস্টমাইজ করার জন্য আমার কী গুগল করা উচিত?
আন্দ্রে লুশনিকভ

4
হতে পারে "টার্মিনফো সক্ষমতার অগ্রভাগের পটভূমি রঙ" (অর্থাত্ টার্মিনফো ম্যানপেজে রঙ সম্পর্কে পড়ুন)। আপনি tput"লাইন সামগ্রী" যুক্তিতে উপযুক্ত নিয়ন্ত্রণ সিকোয়েন্স অন্তর্ভুক্ত করতে ব্যবহার করতে পারেন । বেশিরভাগ টার্মিনাল সহ, আপনি লাইনটি "সায়ান (6) এবং ম্যাজেন্টায় (5) এর উপর সবুজ (3)" দিয়ে যেতে পারেন no_scroll_line top "$(tput setaf 6; tput setab 5)Node: $(tput setaf 3)foo$(tput op)" node foo.jssetafঅগ্রভাগ setabসেট করে, পটভূমি opসেট করে, টার্মিনালের ডিফল্ট রঙগুলিতে পুনরায় সেট করে । রঙের ক্ষমতাগুলি আপনার টার্মিনাল অনুকরণের উপর নির্ভর করে 0-7, 0–15, 0–87 বা 0-255 থেকে একটি সংখ্যা নেয়।
ক্রিস জনসন

আমরা এখন পাইমাক্স প্রকাশ করেছি। এটি ফলকের শিরোনাম বারগুলি প্রদর্শন করে: github.com/jonathanslenders/pymux
জোনাথন স্লেন্ডারস

মনে হচ্ছে আচরণটি হ'ল পেন শিরোনামটি শেলটিতে চালিত কমান্ডটি সেট করা আছে। সুতরাং আমরা "দীর্ঘস্থায়ী" হই না যদি না আমরা একটি দীর্ঘকালীন প্রক্রিয়া চালিয়ে যাচ্ছি (যা শিরোনাম-সেটিং এড়ানোর ক্রমটি কীভাবে আউটপুট করতে হয় তাও জানে)।
স্টিভেন লু

4
দয়া করে নীচের উত্তরটি আরও একবার দেখুন: স্ট্যাকওভারফ্লো. com/ a/ 37602055 / 266453 tmux সংস্করণ ২.৩ হিসাবে ফলক সীমানায় শিরোনাম সমর্থন করে।
ডেনিস জি

78

এই প্রতিশ্রুতিতে tmux এ এই কার্যকারিতা যুক্ত করা হয়েছে । এটি সংস্করণ ২.২ এ নয় তবে দেখে মনে হচ্ছে এটি ২.৩-এ থাকবে।

এটি সক্ষম করতে:

tmux set -g pane-border-status top

বা আপনি যদি পছন্দ করেন:

tmux set -g pane-border-status bottom

আপনার ফলক সীমানা স্থিতি রেখা হিসাবে একটি কাস্টম পাঠ্য সেট করতে আপনি pane-border-formatযেমন ব্যবহার করতে পারেন :

tmux set -g pane-border-format "#{pane_index} #{pane_current_command}"

4
এটি ফলকের সংখ্যা এবং একটি ডিফল্ট শিরোনাম দেখায়। আপনি কীভাবে এটি পরিবর্তন করবেন?
এডন

আমি ফলকের সংখ্যাগুলি সম্পর্কে নিশ্চিত নই, তবে এটি ক্রমগুলি এড়াতে এক্সটার্ম উইন্ডো শিরোনামের মতো প্রতিক্রিয়া জানায়। উদাহরণস্বরূপ, বাশ সহ আমি PS1 = '[\ e] 0; 0 u @ \ h: \ w \ a] $' "ব্যবহারকারী @ হোস্ট: ওয়ার্কিং দির /" পেতে
23

আমি যতদূর বুঝতে পেরেছি, আপনি সেই সিকোয়েন্সটি হাতের সামনে রেখে দিয়েছেন। তবে কোনও শর্টকাট বা কী সংমিশ্রণ নেই যা সেগুলি পরিবর্তন করে। সুতরাং, এটি পরিবর্তন করার জন্য আপনার tmuxবাইরে কিছু কমান্ডের প্রয়োজন tmux। ঠিক? বা এর ভিতরে এমন কোনও ক্রম রয়েছে যা এটি আপডেট করতে পারে?
adn

হ্যাঁ, আপনি কেবল চলমান শেলের মধ্যে পরিবর্তনশীল সেট করেছেন এবং পরবর্তী প্রম্পটটি আঁকলে এটি আপডেট হয়। আমার কাছে মনে হচ্ছে tmux একটি সামান্য স্কেচিযুক্ত এবং যখন আপনি অন্য ফলকে স্যুইচ করেন কেবল তখনই এটি আপডেট করে।
কেভিমিচ

আপনি আসলে ব্যবহার করতে পারেন pane-border-formatপ্রদর্শনে পেন জন্য একটি কাস্টম ফরম্যাট স্ট্রিং (চলিত সেট করতে #{...}ফরম্যাট)। এটি অন্তর্ভুক্ত করার জন্য আমি আপনার উত্তর সম্পাদনা করেছি।
ডেনিস জি

35

যেহেতু tmux 2.6আপনি এটি করতে পারেন:

$ tmux select-pane -t {pane} -T {title}

# Examples:
$ tmux select-pane -T title1          # Change title of current pane
$ tmux select-pane -t 1 -T title2     # Change title of pane 1 in current window
$ tmux select-pane -t 2.1 -T title3   # Change title of pane 1 in window 2

আপনি স্ট্যাটাস বারে প্রতি ফলকটিতে শিরোনাম দেখতে পাবেন:

$ tmux set pane-border-status bottom      # For current window
$ tmux set -g pane-border-status bottom   # For all windows

এর সাথে স্থিতি দণ্ডটি অক্ষম করুন:

$ tmux set pane-border-status off       # For current window
$ tmux set -g pane-border-status off    # For all windows

আপনি কি জানেন যে tmux কে আপনার অধীনে থেকে শিরোনাম পরিবর্তন করতে বাধা দেওয়ার কোনও উপায় আছে কিনা? উদাহরণস্বরূপ, যদি আমি একটি ফলকের শিরোনাম সেট করি এবং তারপরে সেই ফলকে কিছু করি, যেমন cd $HOME, শিরোনামটির মানতে পরিবর্তন করা হয় $HOME। (এটি আমি tmux 2.8 এ দেখছি))
pdoherty926

4
@ pdoherty926 হয়তো উত্তর ইতিমধ্যে আপনি পেয়েছেন তবে চেক আউট করুন set-window-option automatic-rename off
ননাম

set-option -g allow-rename offআমার .tmux.confফাইলে আছে
আইয়াল লেভিন

4
পরামর্শের জন্য ধন্যবাদ। আমি কী ব্যবহার করেছি তা ব্যবহার করেছি pane-border-formatএবং কোনও ব্যবহারকারী ভেরিয়েবল সরবরাহ করেছে (আমি নিশ্চিত না যে এই বৈশিষ্ট্যের কোনও অফিসিয়াল নাম আছে কিনা) যা প্রদর্শিত হয়েছে তা নিয়ন্ত্রণ করতে। এখানে একটি উদাহরণ।
pdoherty926

14

আমি tmux - টিকিটের জন্য ফলক স্থিতি বারে কাজ করছি। আমার উন্নয়ন শাখাটি এখানে গিথুবে পাওয়া যাবে: https://github.com/jonathanslenders/tmux

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


আপনি সেখানে থাকাকালীন, আপনি কী এটিকে তৈরি করতে পারেন যাতে বিরতি-ফলকের সময় ফলকের শিরোনামটি ডিফল্ট উইন্ডো শিরোনাম হয়?
ডিজেডাডনফ

এই শাখাটি কখনই tmux- এ একীভূত হয়নি। তবে আমি এর পরিবর্তে পাইমাক্স তৈরি করেছি, যার ফলক শিরোনাম বার রয়েছে: github.com/jonathanslenders/pymux
জোনাথন স্লেন্ডারস

এই কমান্ডটি সর্বশেষ বিল্ডেও কাজ করে না (কমিট এ 24260)।
adn

14

আমি tmux সংস্করণ ২.৩ ব্যবহার করছি, আমার মনে হয় পূর্ববর্তী সংস্করণগুলিতে সীমানা শৈলী সমর্থিত নয়। এটিই আমার পক্ষে কাজ করেছে:

প্রতিটি ফলকের জন্য শিরোনাম সেট করুন:

printf '\033]2;My Pane Title\033\\'

তারপরে:

tmux set -g pane-border-format "#{pane_index} #T"

9
কমপক্ষে tmux 2.6 হিসাবে সাম্প্রতিক হিসাবে, আপনি tmux এর মধ্যে ফলকের শিরোনামটি পরিবর্তন করতে পারেন: এটি select-pane -T "my title"করে। এমনকি আপনি একটি মূল বাঁধাই সেট আপ করতে পারেন যাতে আপনার কেবল শিরোনাম সরবরাহ করতে হবে:bind-key T command-prompt -p "New title:" 'select-pane -T "%%"'
লুকাসেম

4
@ লুকাসেম সম্ভবত আমি এই থ্রেডটি অনুসরণ করি নি, তবে এটি উত্তরটির মতো মনে হচ্ছে।
আইসিকেলিং

@ লুকাসেম আমি ১০০% নিশ্চিত নই তবে আমি বিশ্বাস করি যে আপনার পদ্ধতিটি (যে আইএমও এই পুরো থ্রেডের সেরা এবং সহজতম, টেমাক্সের সাম্প্রতিক সংস্করণগুলির জন্য) কেবল তখনই কাজ করে যদি pane-border-statusবিকল্পটি কোনও কিছুতে সেট করা থাকে ( topবা bottom)।
সিজউভিন

11

একটি জিআইফ হাজার শব্দের মূল্যবান। ( উত্স )

tmux-xpanes একটি tmux- ভিত্তিক টার্মিনাল বিভাজক, যা নতুন যুক্ত হওয়া -tবিকল্পের মাধ্যমে প্রতিটি ফলকের জন্য শিরোনাম প্রদর্শন সমর্থন করে ।


4
একটি জিআইএফ হাজার শব্দের মূল্যবান তবে এটি যদি কখনও শিংগুলিতে লিঙ্ক করে তবে এটির কোনও মূল্য নেই।
তহবিল মনিকার লসুইট

7

হ্যাঁ যেমন একটি কমান্ড: tmux। আপনার অধিবেশনটিকে একটি নাম দিন এবং এটি একটি অভ্যন্তরীণ স্থিতি বারে প্রদর্শিত হবে:

TMUX=0 tmux new-session -s my-new-session

4
হ্যাঁ, আপনার উত্তরের জন্য আপনাকে ধন্যবাদ! তবে এইভাবে আমি প্রতিটি প্যানে একটি নতুন টিএমক্স সেশন শুরু করব কেবল তার নীচে একটি শিরোনামের জন্য - ওভারকিল ধরণের, তাই না?
অ্যান্ড্রে লুশনিকভ

আমি জানি না। তাই কি? আপনি কি এটা চেষ্টা করেছেন? অতিরিক্ত সেশনটি কত অতিরিক্ত মেমরি ব্যবহার করছে?
ইভেন্ট_জেআর

হ্যাঁ, আমি আজ অবধি নেস্টেড tmux সেশন ব্যবহার করে আসছি। আমি মেমরির গ্রহণ এবং এই জাতীয় জিনিস সম্পর্কে নিশ্চিত নই - আমি কেবল ধারণাটি অপছন্দ করি 'কারণ এটি শুদ্ধ নয়।
আন্দ্রে লুশনিকভ

4

এটি স্বল্প-মেয়াদে সহায়ক নয়, তবে tmux- তে প্রতি-পেন শিরোনামগুলির জন্য একটি বৈশিষ্ট্য অনুরোধ রয়েছে: http://sourceforge.net/tracker/?func=detail&aid=3495916&group_id=200378&atid=973265#

ইতিমধ্যে, অন্যরা যেমন উল্লেখ করেছেন, tmux বাসা বাঁধে শালীনভাবে কাজ করে।


0

টিএল; ডিআর

আপনার tmux কনফিগারেশন ফাইলে নিম্নলিখিত কনফিগারেশন যুক্ত করুন (আমার ক্ষেত্রে এটি ~/.tmux.conf.local)

# dispaly pane_current_path as the pane title
set -g pane-border-status top
set -g pane-border-format "#{pane_index} #{pane_current_path}"

তারপরে চালান:

tmux source-file ~/.tmux.con

উপভোগ কর

আপনাকে https://stackoverflow.com/a/37602055/5121972 ধন্যবাদ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.