ฉันจะอัพเดตหัวเรื่องโดยอัตโนมัติในหน้าจอ xterm ที่รันอยู่ได้อย่างไร?


14

นี่คือการติดตามคำถามนี้เล็กน้อย ผมทำงานในtcshภายใน GNU หน้าจอในxterm

ฉันมีสิ่งต่อไปนี้ใน. cshrc ของฉัน:

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

และใช้งานได้ดี!

อย่างไรก็ตามเมื่อฉันรันหน้าจอฉันเห็นว่าชื่อไม่ได้รับการอัพเดตด้วยไดเรกทอรีปัจจุบัน ฉันจะทำให้หน้าจอปรับปรุงชื่อ xterm ได้อย่างไร


คุณพบวิธีแก้ปัญหาที่เหมาะกับคุณแล้วหรือยัง?
แต้ม Hunner

ไม่ฉันลองตอบคำถามที่แนะนำ แต่ไม่ได้ผล นั่นเป็นเหตุผลที่ฉันไม่ยอมรับพวกเขาหรือไม่สนับสนุนพวกเขา
Nathan Fellman

คำตอบ:


4

คุณสามารถตั้งค่าชื่อหน้าต่าง xterm ได้โดยเพิ่มชื่อนี้.tcshrcหรือ.cshrc(แทนที่precmdชื่อแทนปัจจุบันของคุณ):

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

ตรวจสอบให้แน่ใจว่านี่เป็นนามแฝง precmd เดียวในไฟล์ของคุณ.cshrcและ.tcshrcเมื่อใช้งาน วิธีการนี้จะแสดงไดเรกทอรีปัจจุบันเป็นชื่อหน้าต่างสำหรับฉันทั้งใน xterm a gnome-terminal โดยไม่คำนึงว่าจะมีการเปิดหน้าจอ GNU หรือไม่

คำตอบของฉันอยู่บนพื้นฐานนี้


3

ฉันเข้าใจว่าคุณกำลังใช้ tcsh ดังนั้นสิ่งนี้อาจไม่ทำงาน ... ในกรณีที่ทุกคนกำลังมองหาวิธีทุบตีในการทำเช่นนี้

หากระบบของคุณ (โลคัล / รีโมต) กำลังรัน bash คุณสามารถใช้ตัวแปรสภาวะแวดล้อม "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;" ซึ่งตั้งค่าชื่อหน้าต่างด้วยตัวแปร "user" @ "host" (ลบการจับคู่ที่ยาวที่สุดจากขวาสุดเป็นอันดับแรก ".") จากนั้นไดเรกทอรีทำงาน (แทนที่ '~' สำหรับ '$ HOME')

เคล็ดลับข้างต้นจะทำงานร่วมกับแอปพลิเคชันเทอร์มินัลใด ๆ ที่รองรับการเปลี่ยนชื่อหน้าต่างแบบไดนามิก (ซึ่ง iTerm, Terminal.app, urxvt, aterm, eTerm. xterm และอื่น ๆ ทั้งหมด) นอกจากนี้คุณยังสามารถดูตัวแปรเชลล์ "TITLEBAR" ในเอกสาร bash มันคล้ายกัน


1
สิ่งนี้จะไม่ทำงานเมื่ออยู่ภายใน gnuscreen อย่างน้อยมันก็ไม่ได้ผลสำหรับฉัน นั่นเป็นเหตุผลว่าทำไมฉันถึงมาที่นี่ :)
gcb

สิ่งนี้ช่วยได้ไหม? aperiodic.net/screen/faq#how_can_screen_use_xterm_s_title_bar
wawawawa

2

สิ่งนี้ควรใช้งานได้ในทุก ๆ เชลล์ แต่แฮ็ก. screenrc สกปรก มันใช้เวลามากกว่าสาย hardstatus ของคุณในการทำงานซึ่งอาจไม่เป็นที่ยอมรับสำหรับผู้ใช้บางคน แต่มันใช้งานได้ในgnome-terminalใน Ubuntu ล่าสุดแม้จะไม่มีบรรทัดtermcapinfoด้านล่าง บางสถานการณ์อาจต้องการการปรับแต่งที่ลึกซึ้งยิ่งขึ้น (ตัวอย่างเช่นฉันยังไม่ได้ทดสอบ PuTTY)

# 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
Nathan Fellman

1
ทำงานได้ดีกับหน้าจอ 4.00.02 + tcsh 6.12.00 นี้จะถือว่าคุณมีหน้าจอhardstatusตัวแปรที่ตั้งที่เหมาะสมและ termcap / hs|ts|fs|dsสนับสนุน
Darren Hall

hardstatus เล่นอะไรที่นี่?
gcb

2

หน้านี้ (ซึ่งมีการเชื่อมโยงด้านบน) เป็นวิธีแก้ปัญหาอย่างไรก็ตามคุณต้องตรวจสอบให้แน่ใจว่ารายการสตริงเทอร์มินัลเข้ากับสตริง id เทอร์มินัลของคุณ (เช่นสิ่งที่ตัวแปร TERM ถูกตั้งค่าเป็น) มิฉะนั้นจะไม่มีผลใด ๆ

นี่เป็นบทสรุปของสิ่งที่ฉันทำซึ่งทำงานให้ฉันหลังจากหลายปีที่ไม่ได้มีเวลาพอที่จะคิดออก:

  1. ค้นหาว่าสตริง ID ของเทอร์มินัลของคุณคืออะไร:

    echo $TERM
    

    มันอาจจะพูดอะไรบางอย่างเช่น 'xterm' หรือ 'linux' หรือ 'rxvt'

  2. ตอนนี้เพิ่มบรรทัดต่อไปนี้ลงในไฟล์. screenrc ของคุณ (หรือทำอย่างใดอย่างหนึ่งหากไม่มีอยู่) ตั้งอยู่ใน homedir ของคุณ (~ / .screenrc):

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

    กุญแจสำคัญคือการทำให้แน่ใจว่า 'xterm' เป็นสตริง ID ของ TERM ที่คุณได้รับด้านบน คุณสามารถทำหลายบรรทัดสำหรับคำศัพท์แต่ละประเภทที่คุณใช้

ตัวอย่างเช่นฉันมีสิ่งนี้เป็นไฟล์. screenrc ของฉันเพราะฉันใช้ทั้ง xterms และประเภทคำว่า 'linux' เมื่อ SShing ลงในกล่อง:

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'

หวังว่านี่จะช่วยได้และเป็นผู้ไม่เชื่อเรื่องพระเจ้าอย่างแท้จริง จำไว้ว่าถ้าคุณเรียกใช้หน้าจอในฐานะรูทคุณจะต้องแก้ไข ~ root / .screenrc เพิ่มเติมจากไฟล์ ~ / .screenrc ของคุณเองเช่นนี้


1

คำแนะนำในที่นี้อนุญาตให้ฉันอัปเดตชื่อใน rxvt จาก bash สำหรับฉัน - ซึ่งอาจจะไม่ช่วยอะไรเลย แต่ฉันคิดว่ามันน่าจะคุ้มค่าที่จะทำการตรวจสอบ (ส่วน Informative Statusbar หากลิงก์ไม่ข้ามไปที่ส่วนขวาของหน้า)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.