Làm thế nào để thay đổi tiêu đề của cửa sổ bạc hà?


35

MinTTY là Bảng điều khiển mặc định mới cho Cygwin.

Lệnh shell là gì (một cái gì đó tôi có thể đặt .bashrc, hoặc thậm chí tốt hơn, trong .zshrc) để thay đổi tiêu đề của cửa sổ MinTTY?

Tôi muốn tiêu đề của cửa sổ là đường dẫn đến thư mục hiện tại và để nó được cập nhật khi tôi chuyển thư mục bên trong bàn điều khiển.


1
Cài đặt lời nhắc mặc định của Cygwin (tức là $PS1) đã chứa một chuỗi điều khiển đặt tiêu đề cửa sổ thành user @ machine: work_directory.
ak2

Một MSYS2_packages / filesystem gần đây cam kết 6e6310d (hệ thống tập tin: Biến cụ thể mới MSYS2_PS1., 2016-05-01) đã giới thiệu tập lệnh nhắc MSYS2_PS1, cho phép cấu hình Cygwin / MSYS2 khác biệt. Tôi đã đề xuất một tinh chỉnh để đảm bảo rằng mọi PS1 hiện có đều có mức độ ưu tiên trung gian github.com/Alexpux/MSYS2-packages/pull/651 . Hi vọng điêu nay co ich.
Philip Oakley

@ Phil
Philip Oakley

1
Liên quan, nếu bạn chỉ cần một tiêu đề tĩnh như "Cygwin i686" hoặc "Cygwin x86_64" , thì bạn có thể sử dụng -T <title>trong các thuộc tính phím tắt của Windows. Cũng xem mintty man page.
jww

Câu trả lời:


50

Chuyện gì thế

Lệnh sau không hoạt động với tôi:

echo -ne "\e]0;MYTITLE\a"

Hóa ra cài đặt Cygwin mặc định của tôi bao gồm định nghĩa dấu nhắc sau trong .bashrc:

PS1=\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$

Lưu ý rằng phần đầu tiên của dấu nhắc ( \e]0;\w\a) đang đặt tiêu đề cửa sổ mỗi khi dấu nhắc xuất hiện.

Giải pháp

Thêm các dòng này trong .bashrcđó xác định 2 hàm:

function settitle() {
      export PS1="\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
      echo -ne "\e]0;$1\a"
}
function settitlepath() {
      export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ "
}

Sau đó, bạn có thể đặt tiêu đề tùy chỉnh bằng lệnh này:

settitle "MYWonderfullTest here"

hoặc bạn có thể trở lại mặc định của cygwin (đường dẫn hiện tại) bằng lệnh này:

settitlepath

Hi vọng điêu nay co ich


1
Rất tốt, giải quyết vấn đề PS1 mà hầu hết người dùng sẽ gặp phải với cài đặt cygwin mặc định.
Markku K.

3
Điều này đáng lẽ phải được chấp nhận là câu trả lời vì nó hoạt động hoàn toàn không giống như câu trả lời được bình chọn cao nhất
Tapan Chandra

1
Tôi thích một câu trả lời tôi chỉ có thể cắt và dán. Và cũng giải thích rõ ràng vấn đề thực sự là gì.
Darrel Lee

Những chức năng này hoạt động tốt cho tôi! hãy nhớ rằng để cygwin tải lại .bashrc của bạn, bạn sẽ phải khởi động lại cygwin, HOẶC viết source ~/.bashrc- cygwin khác vẫn sẽ chạy phiên bản bashrc cũ trên đĩa khi cygwin được khởi động. - đã thử nghiệm trên Cygwin version 2.8.1 (64 bit)- phiên bản 2017
hanshenrik

Tại sao câu trả lời này không bao giờ được chấp nhận?
asmith

26

Bạn có thể thay đổi nó với trình tự điều khiển xterm cho điều này, như vậy:

echo -ne '\e]0;Title\a'

Tham khảo: http://code.google.com.vn/p/mintty/issues/detail?id=241


4
Không có tác dụng đối với tôi: / Có lẽ thủ thuật này đã bị phá vỡ trong 6 tháng qua?
voltrevo

Bạn đang sử dụng bash?
James Fu

2
Nó không có hiệu lực khi được ban hành từ trong một màn hình.
Ярослав Рахматуллин

10
Có lẽ vấn đề là dấu nhắc lệnh đã được cấu hình để cập nhật tiêu đề (cho exmaple với đường dẫn hiện tại), vì vậy lệnh này hoạt động nhưng nó đột nhiên bị ghi đè bởi dấu nhắc.
Andrea Polci

2
Để kiểm tra nó "echo -ne '\ e] 0; Title \ a' && cat". Phương pháp này ngăn chặn lời nhắc ngay lập tức đặt lại nó. (Nếu điều đó hoạt động, bạn có thể thay đổi PS1 trong hồ sơ của mình như được mô tả trong các câu trả lời khác)
Curtis Yallop

3

Đặt cái này trong .zshrc:

# Change title of MinTTY to current dir
function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function chpwd() {
    settitle $(cygpath -m `pwd`)
}

Chuỗi các ký tự đặc biệt trong chức năng giải quyết chức năng làm cho MinTTY thay đổi tiêu đề của cửa sổ.

Trong zsh , nếu bạn xác định một hàm có tên đặc biệt chpwd, nó sẽ được gọi sau mỗi chdir .

Hoạt động trên WinXP, với Cygwin 1.7 và MinTTY chạy zsh.


Cũng hoạt động trong WSL (tất nhiên trừ công cụ cygpath): settitle "$(pwd)@$HOST"
zzxyz

2

Trong bash, biến PROMPT_COMMAND có thể được đặt để giữ một số lệnh, được phân tách bằng dấu chấm phẩy. bạn có thể sử dụng điều đó để thực hiện cài đặt tiêu đề tương tự như được mô tả trong phản hồi khác nói về zsh.


2
1) lặp lại $ PS1 và sao chép chuỗi đó vào bảng tạm hoặc trình soạn thảo văn bản của bạn, như trong
   tiếng vang $ PS1
2) chỉnh sửa ~ / .bash_profile và thêm mã shell bên dưới, thay thế $ PS1 nếu cần nhưng giữ biến $ {TERMINAL_TITLE} trong điều kiện "sai".
3) Lưu tệp và đặt biến môi trường TERMINAL_TILE, như trong
   xuất TERMINAL_TITLE = "Tiêu đề tùy chỉnh của tôi"
4) Nguồn hồ sơ bash của bạn, như trong
   . ~ / .bash_profile
Thưởng thức

if [-z "$ {TERMINAL_TITLE}"]
sau đó
  PS1 = '\ [\ e] 0; \ w \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \] \ n \ $ '
khác
  PS1 = '\ [\ e] 0; $ {TERMINAL_TITLE} \ a \] \ n \ [\ e [32m \] \ u @ \ h \ [\ e [33m \] \ w \ [\ e [0m \ ] \ n \ $ '
fi

1

Tôi đã sử dụng câu trả lời của Leonel, nhưng tôi thấy tiêu đề sẽ chỉ nhấp nháy khi làm điều này, điều đó có nghĩa là ít nhất lệnh echo hoạt động như dự định. Tôi đã chạy zsh tương tác với chế độ gỡ lỗi được kích hoạt bằng cách sử dụng

zsh -xv

Thay đổi thư mục rõ ràng gọi một hàm khác được gọi title()sau precmd()chpwd(), có hiệu quả ghi đè chúng. Vì vậy, tôi đã cắm nó vào .zshrc của tôi và nó đã hoạt động.

function settitle() {
    echo -ne "\033]2;"$1"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}

Nếu bạn thích sử dụng chpwd()hoặc precmd()thay vào đó, chỉ cần vô hiệu hóa chức năng tiêu đề : title(){}.


1

Chỉ muốn chia sẻ giải pháp của tôi cho vấn đề này khi tôi sử dụng mintty để thực thi một tập lệnh.

Phím tắt mintty của tôi được thiết lập là:

C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico /usr/bin/bash.exe -l -c /scripts/connect.sh

Tập lệnh connect.sh mà tôi đã viết được gọi trong lối tắt ở trên sẽ nhắc tôi về máy chủ mà tôi muốn kết nối với AND thực hiện chức năng giải quyết được xác định trong tập lệnh.

kết nối

#!/bin/bash

echo "Enter servername when prompted"
echo -n "servername: " 
read servername
function settitle() {
    echo -ne "\033]2;"$servername"\007"
}
function title() {
    settitle $(cygpath -m `pwd`)
}
settitle
ssh my_username@$servername

Tại sao bạn xác định chức năng titlenếu bạn không sử dụng nó?
pabouk

0

hãy thử thêm nó vào .bash_profile

export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD/#$HOME/~}\007"'

Nó làm việc cho tôi.


2
Câu hỏi là về việc thay đổi tiêu đề cửa sổ, không phải là dấu nhắc lệnh.
kenorb

1
vui lòng thêm phần này vào .bash_profile, bạn có thể thay đổi tiêu đề, cảm ơn!
netawater
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.