জিএনইউ স্ক্রিনে জোর শিরোনাম


9

ডিফল্টরূপে, স্ক্রিন সেশনের শিরোনামটি প্রবেশ করা শেষ কমান্ডের নাম, যা আমার পক্ষে ঠিক আছে, তবে কিছু ক্ষেত্রে আমি এটি পরিবর্তন করতে চাই। আমি কমান্ডটি জানি Ctrl- A Aতবে এটি পরবর্তী কমান্ড না হওয়া পর্যন্ত শিরোনাম পরিবর্তন করে এবং আমি অন্যথায় সিদ্ধান্ত না দেওয়া পর্যন্ত এটি সেখানেই থাকতে চাই।

সম্পাদনা: এখানে আমার যে preexecফাংশনটি পেয়েছি তা এখানে.zshrc

if [[ "$TERM" == "screen" ]]; then
   local CMD=${1[(wr)^(*=*|sudo|-*)]}
   echo -n "\ek$CMD\e\\"
fi

উত্তর:


9

কীভাবে জিনিসগুলি সেট আপ করা হয় তা নির্ভর করে, কিন্তু ডিফল্টরূপে, এর মতো কিছু কাজ করা উচিত।

settitle() {
    printf "\033k$1\033\\"
}

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

settitle NEWTITLE

দেখুন পর্দা শিরোনাম ডক্স এবং গনুহ পর্দা FAQ আরো বিস্তারিত জানার জন্য।

প্রদত্ত Ctrl+ A Aকেবল পরবর্তী কমান্ড না হওয়া পর্যন্ত এটি পরিবর্তন করছে, সম্ভবত এটি $PS1(সমস্ত শেল), বা $PROMPT_COMMAND/ DEBUG trap(কেবলমাত্র ব্যাশ) বা precmd/ preexec(কেবলমাত্র zsh) দ্বারা সেট করা হচ্ছে ।

আপনি যে কোনো জায়গা যে জন্য হওয়া উচিত \eবা \033সঙ্গে প্রদর্শিত হয় kবা \\মূলত আমার মত পরে, settitleউপরোক্ত উদাহরণে।

হালনাগাদ

তুমি বলেছিলে তোমার একটা রীতি আছে preexec

এটি এটিকে কেন পরিবর্তন করবেন না:

if [[ "$TERM" == "screen" ]]; then
   local CMD=${1[(wr)^(*=*|sudo|-*)]}
   echo -n "\ek${TITLE:-$CMD}\e\\"
fi

তারপরে আপনি চালিয়ে একটি কাস্টম শিরোনাম সেট করতে পারেন:

TITLE="my title"

এবং দৌড়ে শিরোনামটি আনসেট করুন

TITLE=

পরিবর্তন করতে ভুলবেন না precmdএবং $PS1পাশাপাশি প্রয়োজন হয়।

সরাইয়া

এমনকি আপনি সব টার্মিনাল (যেমন এই প্রসারিত করতে পারে xterm, gnome-terminalহার্ড কোডিং না করে, ইত্যাদি) \ekএবং \e\\

আমি এটি এইভাবে করি:

terminit()
{
    # determine the window title escape sequences
    case "$TERM" in
    aixterm|dtterm|putty|rxvt|xterm*)
        titlestart='\033]0;'
        titlefinish='\007'
        ;;
    cygwin)
        titlestart='\033];'
        titlefinish='\007'
        ;;
    konsole)
        titlestart='\033]30;'
        titlefinish='\007'
        ;;
    screen*)
        # status line
        #titlestart='\033_'
        #titlefinish='\033\'
        # window title
        titlestart='\033k'
        titlefinish='\033\'
        ;;
    *)
        if type tput >/dev/null 2>&1
        then
            if tput longname >/dev/null 2>&1
            then
                titlestart="$(tput tsl)"
                titlefinish="$(tput fsl)"
            fi
        else
            titlestart=''
            titlefinish=''
        fi
        ;;
    esac
}


# or put it inside a case $- in *i* guard
if test -t 0; then
    terminit
fi

# set the xterm/screen/etc. title
settitle()
{
    test -z "${titlestart}" && return 0

    printf "${titlestart}$*${titlefinish}"
}

তারপরে আপনি এতে পরিবর্তন করতে preexecপারেন:

if [[ "$TERM" == "screen" ]]; then
   local CMD=${1[(wr)^(*=*|sudo|-*)]}
   settitle "${TITLE:-$CMD}"
fi

আপনি যে কমান্ডটি দিচ্ছেন ঠিক তেমন একই কাজ করে Ctrl-A A। এবং প্রম্পট সম্পর্কে, আপনার মানে আমি $PS1যখনই শিরোনামটি পরিবর্তন না করতে চাই তখন আমাকে সংশোধন করতে হবে?
গ্রেগসেইথ

আমি বুঝি এটিতে ESC k কিছু ESC doesn't নেই check Ditto PROMPT_COMMAND।
মাইকেল

ESC লেখা যেতে পারে \eবা \033
মাইকেল

স্ক্রিন শিরোনাম ডক্স লিঙ্কগুলিতে প্রয়োজনীয় তথ্য থাকা উচিত
মাইকেল

5

যদি আপনার উইন্ডো শিরোনামটি বর্তমানে উইন্ডোটিতে চলমান অ্যাপ্লিকেশনটি প্রতিবিম্বিত করে তবে এটি আপনার শেলটি করছে। যদি এটি এটি করে থাকে তবে এটি আপনার বিতরণ, আপনার সিস্টেম প্রশাসক বা আপনি এটিকে কনফিগার করেছেন।

কমান্ডটি চলমান চলাকালীন যদি কমান্ডটি উইন্ডো শিরোনাম হিসাবে উপস্থিত হয়, এটি preexecফাংশন (zsh এ) দ্বারা বা ব্যাশের অধীনে এর একটি অনুকরণ দ্বারা সম্পন্ন হয় ।

প্রতিটি কমান্ড শেষ হলে শিরোনাম পরিবর্তিত হয় precmd, এটি zsh এ ফাংশন, ব্যাশের PROMPT_COMMANDপরামিতি বা PS1কোনও শেলের প্রম্পট ( পরামিতি) এর অংশ হিসাবে সম্পন্ন হবে । (শিরোনাম পরিবর্তন করার কমান্ডটি কোনও অ্যাপ্লিকেশন দ্বারা টার্মিনালের আউটপুট স্ট্রিমের অংশ হিসাবে নির্গত একটি পালানোর ক্রম, তাই এটি একটি প্রম্পটে এম্বেড করা যেতে পারে))

মত এস্কেপ সিকোয়েন্সের জন্য দেখুন \e]0;new title\a, \e]2;new title\aবা \eknew title\e\\আপনার শেল আরম্ভের ফাইলে ( ~/.bashrc, ~/.zshrc, ...)। যদি প্রাসঙ্গিক কিছু না থাকে তবে সেটিংসটি কোনও সিস্টেমে থাকতে পারে ফাইল (যেমন /etc/bash.bashrc, /etc/zsh/zshrc); তারপরে সেই পরামিতিটি ওভাররাইট করুন বা আপনার নিজের আরম্ভের ফাইলটিতে ফাংশন করুন।

ওভারড্রিয়েবল শিরোনাম সেটিংয়ের জন্য মাইকেলের উত্তর দেখুন preexec


ধন্যবাদ, আপনি এটিকে খুব পরিষ্কার করে দিয়েছিলেন। আমি preexecআমার .zshrc- এ সংজ্ঞায়িত একটি ফাংশন পেয়েছি। কথাটি হ'ল, বেশিরভাগ সময়ই আমার এমন আচরণ। আমি একটি নির্দিষ্ট স্ক্রিনের ফ্লাইতে এটিকে অক্ষম করতে সক্ষম হতে চাই। preexecআমি নিজেই শিরোনাম সেট করার সময় ফাংশনটিতে পেতে পারি এমন একটি পরিবর্তনশীল থাকতে পারে , বা এরকম কিছু?
গ্রেগসেট

@ গ্রেগসেট: সাধারণভাবে ব্যাখ্যা করা কিছুটা শক্ত, তবে আপনি যদি আপনার preexecফাংশন পোস্ট করেন তবে আমি বা অন্য কেউ সম্ভবত একটি সাধারণ পরিবর্তন প্রস্তাব করতে পারি।
গিলস 'অশুভ হওয়া বন্ধ করুন'

আমি উল্লেখ করতে যাচ্ছি preexec, কিন্তু গ্রেগ বলেন নি যে তিনি ব্যবহার করছেন zsh। ও আমাকে শিখিয়ে দেবে। ;-)
মাইকেল

@ মাইকেল: আমার ব্যাখ্যা আপনার চেয়ে ভাল ছিল, তবে আপনার নতুন preexecডিজাইনটি আমার চেয়ে ভাল।
গিলস 'অশুভ হওয়া বন্ধ করুন'

আমি রাজী. :-) আমার আসল উত্তরটি নিজের জন্য উত্তর খুঁজতে ওপি শেখানোর চেষ্টা করছিল। আপনার আরও অবিলম্বে সহায়ক ছিল। যেভাবেই হোক না কেন, আমরা সবাই জিতেছি।
মাইকেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.