Có thể có được tên hiện tại của cửa sổ xterm?


9

Cách LDP này thể hiện cách thay đổi tiêu đề của xterm.

Tôi biết rằng điều này cũng có thể sử dụng xtitlelệnh.

Trước khi gọi một hành động dài, tập lệnh của tôi sử dụng các kỹ thuật như vậy để thay đổi tiêu đề của cửa sổ xterm của nó.

Tôi muốn trích xuất tên của cửa sổ xterm trước khi thay đổi nó để khi hành động dài được hoàn thành, tôi có thể khôi phục tiêu đề về giá trị trước đó.

Nó sẽ là một nghịch đảo với xtitle ... Điều này thậm chí có thể?


Câu hỏi stackoverflow liên quan . Dường như xtermcó một ngăn xếp cho tiêu đề cửa sổ, nếu bạn có thể tìm ra cách sử dụng nó.
jw013

Câu trả lời:


4

Sử dụng xtitletập lệnh.

Có nhiều biến thể trên internet, tuy nhiên, tôi có xu hướng sử dụng một biến thể phụ thuộc vào xprop

http://www.shelldorado.com/scripts/cmds/xtitle


Thông minh! Đây chính xác là những gì tôi đã hy vọng ... và nó không chỉ hoạt động cho xterm mà (không giống như các giải pháp khác) cũng hoạt động cho thiết bị đầu cuối gnome. Cảm ơn bạn!
TheGeeko61

Mặc dù vậy, hãy lưu ý rằng việc có được tiêu đề thông qua giao thức X, đó là những gì xtitlehiện có, chỉ hoạt động cho các phiên cục bộ.
ak2

9

Có một chuỗi điều khiển để truy vấn tiêu đề hiện tại, nhưng nó thường bị vô hiệu hóa vì lý do bảo mật. Đó là bởi vì nó cho phép một chương trình độc hại hoặc thậm chí chỉ là một tệp văn bản được lọc để chèn các chuỗi ký tự tùy ý như thể được gõ trên bàn phím, trước tiên bằng cách đặt tiêu đề và sau đó yêu cầu báo cáo lại. Do đó ngăn xếp tiêu đề đã được giới thiệu thay thế.

Lệnh sau sẽ lưu tiêu đề cửa sổ và biểu tượng hiện tại vào ngăn xếp:

echo -ne '\e[22t'

Điều này sẽ đặt tiêu đề thành my title:

echo -ne '\e]0;my title\007'

Và điều này sẽ khôi phục các tiêu đề cửa sổ và biểu tượng trước:

echo -ne '\e[23t'

2

Đối với trường hợp tầm thường, (và có lẽ là trường hợp phổ biến nhất), trong đó người ta có thể muốn truy vấn lời nhắc cho xterm hiện tại, chỉ cần sử dụng xprop -id $WINDOWID WM_NAME. Nếu bạn muốn trích xuất giá trị để thao tác trong tập lệnh shell, bạn có thể làm một cái gì đó đắt hơn một chút, chẳng hạn như:

   curtitle=`xprop -id $WINDOWID WM_NAME|awk '{print $3}'|xargs echo`

Sử dụng bash một mình (để tránh việc gọi awk và xargs):

   curtitle=`xprop -id $WINDOWID WM_NAME`
   curtitle=`eval echo ${x##*=}`

Tiếng vang xargs trong ví dụ đầu tiên và eval trong ví dụ thứ hai chỉ đơn giản là ở đó để loại bỏ các trích dẫn mà xprop đặt xung quanh giá trị.

Thay thế WM_NAME bằng WM_ICON nếu bạn muốn lấy tên biểu tượng thay vì chuỗi trong thanh tiêu đề.


-1

Nếu tôi hiểu đúng câu hỏi của bạn, bạn sẽ có thể có được tiêu đề xterm hiện tại bằng cách kiểm tra $PROMPT_COMMANDbiến, ví dụ:

$ echo $PROMPT_COMMAND 
printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

và bạn có thể đặt nó như thế (ngắt dòng để dễ đọc):

PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]\
0;%s@%s%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'

Đây PROMPT_COMMANDkhông phải là cách có thẩm quyền nhất để có được tiêu đề vì nó không phải lúc nào cũng được đặt và bất kỳ lệnh nào bạn chạy có thể thay đổi tiêu đề giữa các lời nhắc. Để có độ chính xác cao nhất, các chuỗi điều khiển cụ thể của trình mô phỏng đầu cuối có lẽ là cách để đi.
jw013

Điều này sẽ không hoạt động trong trường hợp các ứng dụng khác đang đặt tiêu đề.
TheGeeko61

Đây $PROMPT_COMMANDkhông phải là tiêu đề cửa sổ. Chúng không liên quan.
JamesThomasMoon1979
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.