Làm cách nào tôi có thể tự động cập nhật tiêu đề trong màn hình chạy xterm?


14

Đây là một chút của một câu hỏi tiếp theo cho câu hỏi này . Tôi đang làm việc trong tcsh trong màn hình GNU trong xterm .

Tôi có phần sau trong .cshrc của mình:

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

Và điều này hoạt động tốt!

Tuy nhiên, khi tôi chạy màn hình, tôi thấy rằng tiêu đề không được cập nhật với thư mục hiện tại. Làm cách nào để tạo màn hình cập nhật tiêu đề xterm?


Bạn đã tìm thấy một giải pháp làm việc cho bạn chưa?
Trey Hunner

Không. Tôi đã thử các câu trả lời được đề xuất nhưng chúng không hoạt động. Đó là lý do tại sao tôi không chấp nhận họ cũng không ủng hộ họ.
Nathan Fellman

Câu trả lời:


4

Bạn có thể đặt tiêu đề cửa sổ xterm bằng cách thêm tiêu đề này vào .tcshrchoặc .cshrc(thay thế precmdbí danh hiện tại của bạn ):

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

Hãy chắc chắn rằng đây là bí danh tiền tố duy nhất trong tệp .cshrc.tcshrctệp của bạn khi sử dụng tệp này. Phương thức này hiển thị thư mục hiện tại làm tiêu đề cửa sổ cho tôi trong cả xterm một gnome-terminal bất kể phiên màn hình GNU có mở hay không.

Câu trả lời của tôi dựa trên điều này .


3

Tôi hiểu rằng bạn đang sử dụng tcsh nên điều này có thể sẽ không hoạt động ... Chỉ trong trường hợp bất cứ ai đang tìm kiếm cách bash để làm điều này.

Nếu hệ thống của bạn (cục bộ / từ xa) đang chạy bash thì bạn có thể sử dụng biến môi trường "PROMPT_COMMAND" để đặt tiêu đề cửa sổ. PROMPT_COMMAND được đánh giá trước khi lời nhắc được hiển thị.

(trong .bashrc của bạn):

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

Giải trình:

'history -a'

Cái này đặt shell để nối vào tệp lịch sử mỗi khi lệnh được hoàn thành, thay vì khi toàn bộ shell được hoàn thành. (Điều này không liên quan đến ví dụ này).

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

Điều này lặp lại mã thoát "\ 033] 0;" trong đó đặt tiêu đề cửa sổ với các biến "người dùng" @ "máy chủ" (loại bỏ kết quả khớp dài nhất từ ​​phải sang đầu tiên ".") và sau đó là thư mục làm việc (thay thế '~' cho '$ HOME').

Thủ thuật trên sẽ hoạt động với bất kỳ ứng dụng đầu cuối nào hỗ trợ thay đổi động của tiêu đề cửa sổ (mà iTerm, Terminal.app, urxvt, aterm, eTerm. Xterm, v.v. Bạn cũng có thể xem xét biến shell "TITLEebar" trong tài liệu bash, nó cũng tương tự.


1
Điều này sẽ không hoạt động khi bên trong gnuscreen. ít nhất là nó không làm việc cho tôi. đó là lý do tại sao tôi ở đây :)
gcb


2

Cái này sẽ hoạt động trong mọi shell, nhưng nó là một hack .screenrc bẩn. Nó chiếm toàn bộ dòng hardstatus của bạn để hoạt động, điều này có thể không được chấp nhận đối với một số người dùng. Nhưng nó hoạt động trong gnome-terminal trên Ubuntu mới nhất, ngay cả khi không có dòng termcapinfo bên dưới. Một số tình huống có thể yêu cầu điều chỉnh sâu hơn (ví dụ tôi chưa thử nghiệm trên 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}]'

Tìm thấy tại liên kết này .


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

1
Nhưng điều này sẽ cập nhật tiêu đề khi chạyscreen
Nathan Fellman

1
Điều này hoạt động tốt với màn hình 4,00,02 + tcsh 6.12.00. Điều này giả định rằng bạn có bộ hardstatusbiến màn hình được đặt phù hợp và hỗ trợ termcap / terminfo hs|ts|fs|ds.
Hội trường Darren

Hardstatus chơi gì ở đây?
gcb

2

Trang này (đã được liên kết ở trên) là giải pháp, tuy nhiên bạn cần đảm bảo chuỗi đầu cuối của mục nhập thẳng hàng với chuỗi id của thiết bị đầu cuối của bạn (nghĩa là biến TERM được đặt thành) nếu không nó sẽ không có hiệu lực.

Dưới đây là một bản tóm tắt về những gì tôi đã làm, nó đã làm việc cho tôi sau nhiều năm không đầu tư đủ thời gian để tìm ra điều này:

  1. Tìm hiểu chuỗi ID của thiết bị đầu cuối của bạn bằng cách chạy:

    echo $TERM
    

    Nó có thể sẽ nói một cái gì đó như 'xterm' hoặc 'linux' hoặc 'rxvt'.

  2. Bây giờ hãy thêm dòng sau vào tệp .screenrc của bạn (hoặc tạo một dòng nếu nó không tồn tại) nằm trong homedir của bạn (~ / .screenrc):

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

    Điều quan trọng là đảm bảo rằng 'xterm' là chuỗi ID TATE của bạn mà bạn có ở trên. Bạn có thể thực hiện nhiều dòng cho mỗi loại thuật ngữ khác nhau mà bạn sử dụng.

Ví dụ: tôi có tệp này dưới dạng tệp .screenrc vì tôi sử dụng cả hai loại thuật ngữ xterms và 'linux' khi SS Breath vào một hộp:

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'

Hy vọng rằng điều này sẽ giúp, và hoàn toàn không rõ ràng. Hãy nhớ nếu bạn chạy màn hình với quyền root, bạn cần sửa đổi ~ root / .screenrc ngoài tệp ~ / .screenrc của riêng bạn như thế này.


1

Các hướng dẫn ở đây cho phép tôi cập nhật tiêu đề trong rxvt từ bash cho tôi - điều này không giúp ích được gì nhưng tôi nghĩ rằng nó có thể đáng để điều tra (phần Statusbar thông tin nếu liên kết không nhảy đến phần bên phải của trang)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.