Thiết bị đầu cuối Gnome - tên quy trình trong tiêu đề tab


9

Làm cách nào tôi có thể đặt tên quy trình đang chạy hiện tại vào tiêu đề tab Gnome (hoặc thanh tiêu đề khi chỉ có một tab)?

- CẬP NHẬT -

Để làm rõ, tôi muốn tiêu đề tab cập nhật khi tôi chạy một quy trình, ví dụ:

# title is currently "bash"
$ find / -name foo # while searching for foo, title is "find"
$ # title is once again "bash"
$ less /proc/cpuinfo # title changes to "less"
$ man ls # title changes to man
$ # title returns to "bash"

Câu trả lời:


8

Tìm thấy rồi. Trang web này cung cấp một lời giải thích tốt về một giải pháp.
Trong bashrc của bạn, nó sẽ trông như:

case "$TERM" in
xterm*|rxvt*)
    set -o functrace
    trap 'echo -ne "\e]0;$BASH_COMMAND\007"' DEBUG
    PS1="\e]0;\s\007$PS1"
    ;;
*)
    ;;
esac

Cá nhân, tôi không nghĩ rằng tôi sẽ thêm nó vào bashrc của mình, vì DEBUG kết hợp với dấu vết sẽ ném ra một đống rác khi tất cả vỏ của bạn bắt đầu. Nếu bạn có thể sống với điều đó, nó thực sự hoạt động. Nó không hiển thị toàn bộ lệnh, tuy nhiên, không chỉ từ đầu tiên.


2
Cảm ơn bạn đã hỏi một câu hỏi hay. Điều này trông giống như một câu hỏi đơn giản lúc đầu ... Sau 10 phút đầu tiên, nó đã bắt đầu khiến tôi phát điên! Đó là lý do tại sao tôi nghĩ rằng đó là một câu hỏi hay - nghe có vẻ đơn giản, nhưng buộc tôi phải tìm hiểu sâu hơn về sự tương tác giữa vỏ, thiết bị đầu cuối và tín hiệu.
DaveParillo

Tại sao lại là sự phân công PS1? nó mang lại kết quả tốt cho tôi, và nó không thực sự cần thiết ở đây ...?
phil294

Chỉ là lỗi cho tôi.
Kzqai

4

Chà, vì mọi người dường như đã biết giải pháp của David Pashley, tôi hơi ngạc nhiên, tôi đã mất rất lâu để tìm ra giải pháp này vì nó gần như cũ.

Giải pháp này thực sự xử lý rác spam hoàn thành bash.

Để rõ ràng: tôi không làm gì một mình ở đây ngoài nghiên cứu. Tất cả tín dụng cho Marius Gedminas .

Điều này hoạt động hoàn hảo với tôi với Gnome-Terminal / Terminator

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

    # Show the currently running command in the terminal title:
    # http://www.davidpashley.com/articles/xterm-titles-with-bash.html
    show_command_in_title_bar()
    {
        case "$BASH_COMMAND" in
            *\033]0*)
                # The command is trying to set the title bar as well;
                # this is most likely the execution of $PROMPT_COMMAND.
                # In any case nested escapes confuse the terminal, so don't
                # output them.
                ;;
            *)
                echo -ne "\033]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}\007"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG
    ;;
*)
    ;;
esac

Ngoài ra đây là một bài đăng chéo bởi vì tôi vừa tìm hiểu về nó và muốn chia sẻ và tôi nghĩ nó cũng hữu ích ở đây.


2

Dưới đây nên làm việc. Tôi có chức năng trong một .bash_functionstệp và nguồn nó trong .bashrctệp trước khi cài đặt $PROMPT_COMMAND.

function term_title
{
        history 1 | awk '{print $2}';
}

PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'

1
Bạn thân, nhưng tôi không khá hơn nhiều. Điều này sẽ cung cấp cho bạn lệnh thực thi cuối cùng , nhưng không thực sự là gì sau đó. Tôi nghĩ chỉ cần thay đổi term_title thành: `if [jobs]; rồi lịch sử 1 | awk '{in $ 2}'; khác echo -ne 'bash em' fi` sẽ hoạt động, nhưng nó không nhất quán về việc bắt các quy trình với thời gian tồn tại ngắn và nó vẫn không chuyển trở lại khi quá trình kết thúc. Tôi không biết về hoạt động bên trong của xterm để biết cách gây rối với những tác nhân / sự kiện đó.
DaveParillo

bash thực thi $ PROMPT_COMMAND ngay trước khi hiển thị lời nhắc, vì vậy đây là cách tốt nhất tôi có thể làm với phương pháp này. Có thể có các kích hoạt khác có thể thực thi ngay sau khi bạn nhấn Enter, nhưng tôi không biết về chúng.

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.