मैं स्वचालित रूप से xterm रनिंग स्क्रीन में शीर्षक कैसे अपडेट कर सकता हूं?


14

यह इस सवाल का एक सा है । मैं एक xterm में GNU स्क्रीन के भीतर tcsh में काम कर रहा हूँ ।

मेरे पास .cshrc में निम्नलिखित हैं:

alias res_t 'xtset -t %h:%d "(%u:%g)" %e'       # reset titlebar
res_t                                           # reset title right now
alias precmd res_t

और यह ठीक काम करता है!

हालाँकि, जब मैं स्क्रीन चलाता हूं तो देखता हूं कि शीर्षक वर्तमान निर्देशिका से अपडेट नहीं हुआ है। मैं xterm शीर्षक को स्क्रीन अपडेट कैसे कर सकता हूं?


क्या आपने कोई समाधान ढूंढ लिया है जो आपके लिए अभी तक काम कर रहा है?
ट्रे हंटर

नहीं। मैंने सुझाए गए उत्तरों की कोशिश की, लेकिन वे काम नहीं किए। इसलिए मैंने न तो उन्हें स्वीकार किया और न ही उनका उत्थान किया।
नाथन फ़ेलमैन

जवाबों:


4

आप इसे अपने .tcshrcया .cshrcअपने वर्तमान precmdउपनाम को बदलकर xterm विंडो शीर्षक सेट कर सकते हैं :

alias precmd 'echo -n "\033]0;${PWD}\a"'

यह सुनिश्चित करें कि यह प्रयोग करते समय आपके .cshrcऔर .tcshrcफाइलों में केवल प्रीलिमेड उपनाम है । यह विधि वर्तमान निर्देशिका को मेरे लिए विंडो शीर्षक के रूप में दर्शाती है कि दोनों में एक गनोम-टर्मिनल है, भले ही एक GNU स्क्रीन सत्र खुला हो।

मेरा जवाब पर आधारित था इस


3

मैं समझता हूं कि आप tcsh का उपयोग कर रहे हैं, इसलिए यह शायद काम नहीं करेगा ... बस अगर कोई भी ऐसा करने के लिए बैश रास्ता ढूंढ रहा है।

यदि आपके सिस्टम (स्थानीय / रिमोट) बैश चल रहे हैं तो आप विंडो शीर्षक सेट करने के लिए "PROMPT_COMMAND" पर्यावरण चर का उपयोग कर सकते हैं। प्रॉम्प्ट प्रदर्शित होने से पहले PROMPT_COMMAND का उद्भव है।

(आपके .bashrc में):

export PROMPT_COMMAND='history -a && echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007'

स्पष्टीकरण:

'history -a'

यह शेल को हर बार एक कमांड पूरा होने पर इतिहास फ़ाइल में संलग्न करने के लिए सेट करता है, बजाय जब पूरा शेल पूरा हो जाता है। (यह इस उदाहरण से संबंधित नहीं है)।

'echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'

यह एस्केप कोड "\ 033] 0;" जो "यूजर" @ "होस्ट" वेरिएबल्स के साथ विंडो टाइटल सेट करता है (राइट से फर्स्ट में सबसे लंबे मैच को हटाते हुए। ") और फिर वर्किंग डायरेक्टरी ('$ HOME' के लिए '~' को प्रतिस्थापित करता है)।

उपरोक्त चाल किसी भी टर्मिनल एप्लिकेशन के साथ काम करेगी जो विंडो टाइटल (जो iTerm, Terminal.app, urxvt, aterm, eTerm। Xterm आदि सभी करते हैं) के गतिशील परिवर्तन का समर्थन करता है। आप बैश प्रलेखन में शेल चर "TITLEBAR" में भी देख सकते हैं, यह समान है।


1
जब gnuscreen के अंदर यह काम नहीं करेगा। कम से कम यह मेरे लिए काम नहीं कर रहा है। यही कारण है कि यहाँ im :)
gcb

क्या यह मदद करता है? aperiodic.net/screen/faq#how_can_screen_use_xterm_s_title_bar
wawawawa

2

यह किसी भी शेल में काम करना चाहिए, लेकिन यह एक गंदा स्क्रीन है। यह आपके हार्डस्टैटस लाइन को काम करने के लिए लेता है, जो कुछ उपयोगकर्ताओं के लिए अस्वीकार्य हो सकता है। लेकिन यह नवीनतम Ubuntu पर सूक्ति-टर्मिनल में काम करता है , यहां तक ​​कि नीचे termcapinfo लाइन के बिना भी । कुछ स्थितियों में गहरी चोटियों की आवश्यकता हो सकती है (उदाहरण के लिए, मैंने पुट्टी पर परीक्षण नहीं किया है)।

# enable xterm title setting; may not be necessary on some platforms
termcapinfo xterm*|rxvt* 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

# dirty hack: put xterm title escapes in the hardstatus
# this example will yield "user@host || screen Win#:(windowtitle)
defhstatus "$USER@^EH || screen ^E:(^Et)"
# now turn it off so it doesn't print in the hardstatus line
hardstatus off

# and finally, use caption as a replacement hardstatus
caption always '%{= kG}[%{G}%H%{G}][%= %{= kw}%?%-Lw%?%{R}(%{W}%n*%f%t%?(%u)%?%{R})%{w}%?%+Lw%?%?%= %{G}][%{B}%C%a %M.%d%{G}]'

पर मिले इस लिंक


2
setenv TITLE "%{\033]0;%n@%m:%~\007%}"
set prompt = "${TITLE}%n@%m:%~%#"

1
लेकिन क्या यह शीर्षक को अद्यतन करेगाscreen
नथन फेलमैन

1
यह स्क्रीन के साथ ठीक काम करता है 4.00.02 + tcsh 6.12.00। यह मानता है कि आपके पास hardstatusउचित रूप से स्क्रीन वेरिएबल सेट है और टर्मकैप / टर्मफो का समर्थन करता है hs|ts|fs|ds
डैरेन हॉल

हार्डस्टैट यहाँ क्या खेलता है?
गकब

2

यह पृष्ठ (जो ऊपर लिंक किया गया है) समाधान है, हालांकि आपको यह सुनिश्चित करने की आवश्यकता है कि आपके टर्मिनल के आईडी स्ट्रिंग के साथ प्रविष्टि की टर्मिनल स्ट्रिंग लाइनें (यानी, चर अवधि क्या सेट है) अन्यथा इसका कोई प्रभाव नहीं होगा।

यहां मैंने जो कुछ किया, उसका एक सारांश यह जानने के लिए पर्याप्त समय निवेश नहीं करने के वर्षों के बाद मेरे लिए काम आया:

  1. पता करें कि आपके टर्मिनल का आईडी स्ट्रिंग क्या है:

    echo $TERM
    

    यह शायद 'xterm' या 'linux' या 'rxvt' जैसा कुछ कहेगा।

  2. अब अपने होमडायर (~ / .rcrc) में स्थित अपनी .screenrc फ़ाइल में निम्न पंक्ति जोड़ें (या यदि यह मौजूद नहीं है तो एक बनाएं):।

    termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
    

    कुंजी यह सुनिश्चित करने के लिए है कि 'xterm' आपके TERM की आईडी स्ट्रिंग है जो आपको ऊपर मिली है। आपके द्वारा उपयोग किए जाने वाले प्रत्येक भिन्न प्रकार के लिए आप कई लाइनें कर सकते हैं।

उदाहरण के लिए मेरे पास यह मेरी .screenrc फाइल के रूप में है क्योंकि मैं xterms और 'linux' दोनों प्रकारों का उपयोग करता हूँ जब SSX एक बॉक्स में होता है:

termcapinfo linux 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'
termcapinfo xterm 'hs:ts=\E]2;:fs=\007:ds=\E]2;screen\007'

उम्मीद है कि यह मदद करता है, और पूरी तरह से अज्ञेय है। याद रखें कि यदि आप स्क्रीन को रूट के रूप में चलाते हैं, तो आपको इस तरह से अपनी ~ ~ .screenrc फाइल के अलावा ~ root /।


1

यहां दिए गए निर्देशों ने मुझे मेरे लिए bash से rxvt में शीर्षक अपडेट करने की अनुमति दी - जो किसी भी मदद का नहीं है, लेकिन मुझे लगा कि यह जांच के लायक हो सकता है (यदि अनुभाग के पृष्ठ के दाहिने हिस्से में लिंक नहीं कूदता है)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.