Ubah judul jendela dan tab iTerm2 di zsh

50

Saya ingin memberi label tab jendela sesi terminal. Saya menggunakan zshell di iterm2 di OSX. Apakah mungkin untuk mengubah label tab jendela secara dinamis di terminal?

bneil
sumber

Jawaban:

48

Anda dapat memasukkan yang berikut ini zshuntuk mengatur judul jendela iTerm2:

echo -ne "\e]1;this is the title\a"

Jika Anda ingin mengotomatiskan itu untuk memasukkan misalnya waktu saat ini atau direktori kerja, edit zshfile konfigurasi Anda untuk mengatur judul pada precmd()fungsi menjadi misalnya $PWD.

echo -ne "\e]1;$PWD\a"

Anda dapat membaca tentang precmdfungsi di man zshmiscdalam bagian ini SPECIAL FUNCTIONS.

masukkan deskripsi gambar di sini

Daniel Beck
sumber
3
ketika saya menjalankan perintah echo -ne "\ e] 1; ini adalah judul \ a" judul tab tidak berubah. Apakah ada pengaturan yang harus saya ubah di iterm2?
bneil
15
Menemukannya. Saya harus membatalkan pilihan semua opsi untuk judul jendela dan tab di bagian tampilan iterm-> preferences->. dan di .zshrc saya harus batalkan komentar / tambahkan ekspor DISABLE_AUTO_TITLE = "true" Terima kasih @Daniel Beck
bneil
3
Anda juga perlu mengatur Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title.
vaughan
1
INI TIDAK BEKERJA (bagi saya, setidaknya) DI VERSI TERBARU ITerm (3.3.0)
iconoclast
Dan tidak berfungsi untuk saya pada versi stabil terbaru iTerm2(3.2.9)
jalanb
45

Apa yang berhasil untuk saya:

echo -e "\033];this is the title\007"

Jika Anda menggunakan Mac OSX dan iTerm, iTerm2 ::

  • ITerm → Preferensi → Tampilan → Judul Jendela & Tab → hapus centang semua

Jika Anda menggunakan zsh, maka Anda mungkin perlu mengedit pengaturan Anda. Pengaturan Anda biasanya di file ~/.zshrc. Anda ingin menambah atau mengedit pengaturan Anda untuk memastikan baris ini ada:

DISABLE_AUTO_TITLE="true"
joelparkerhenderson
sumber
2
Ini masih berfungsi pada 28/02/2018.
salep
38

Salah satu fasilitas menggunakan iTerm adalah kemungkinan untuk mengatur judul jendela & judul tab secara terpisah: contoh menggunakan judul tab & jendela secara terpisah

# $1 = type; 0 - both, 1 - tab, 2 - title
# rest = text
setTerminalText () {
    # echo works in bash & zsh
    local mode=$1 ; shift
    echo -ne "\033]$mode;$@\007"
}
stt_both  () { setTerminalText 0 $@; }
stt_tab   () { setTerminalText 1 $@; }
stt_title () { setTerminalText 2 $@; }

Dengan cara ini Anda dapat langsung melihat host apa yang terhubung dengan Anda di jendela apa, dan judul jendela untuk setiap tab menunjukkan pengguna & CWD.

Orangenhain
sumber
2
Saya hanya memperhatikan bahwa versi Terminal.app di OS X Lion juga mendukung ini.
Orangenhain
pertanyaan konyol: Anda menambahkan kode ini .bashrc, kan?
qazwsx
Juga muncul bahwa (di iTerm2 Build 1.0.0.20140629) hingga Anda mengubah Judul Jendela ... ia melacak judul tab, apa pun yang terjadi. Saya yakin itu pengaturan. Setelah judul Window diubah (2) tidak lagi melacak judul tab.
Mei
Saya memodifikasi fungsi di atas untuk memasukkan baris DISABLE_AUTO_TITLE="true"yang memperbaiki masalah dan dengan cara ini jika saya tidak menetapkan judul, saya masih mendapatkan fitur judul otomatis
user15681
5

A precmdmelakukan triknya. Namun, beberapa tema oh-my-zsh dipusingkan dengan judul jendela. Setel PR_TITLEBARke string kosong untuk memperbaikinya.

set-window-title() {
  # /Users/clessg/projects/dotfiles -> ~/p/dotfiles
  window_title="\e]0;${${PWD/#"$HOME"/~}/projects/p}\a"
  echo -ne "$window_title"
}

PR_TITLEBAR=''
set-window-title
add-zsh-hook precmd set-window-title

Saya juga merekomendasikan bermain-main dengan pengaturan tab iTerm2 di Preferences -> Appearance.

Chris Gaudreau
sumber
2

Menambahkan export PROMPT_COMMAND='echo -ne "\033]0;$PWD\007"'ke ~/.bash_profilebekerja untuk saya.

https://apple.stackexchange.com/a/90737/49605

michalzuber
sumber
2
Pertanyaannya secara khusus mengatakan zsh, bukan bash.
blockloop
Bagus, itu bekerja di bash!
l mingzhi
2

Tidak ada jawaban yang sepertinya cocok untuk saya, mungkin untuk versi iterm2 (3.3.3).

Saya menemukan ini: https://gist.github.com/phette23/5270658#gistcomment-3020766

Pada dasarnya, Anda dapat melakukan apa pun yang dikatakan dalam semua jawaban lain, tetapi juga perlu diatur Preferences > Profiles > General > Title -> Name (Job)

Ini berhasil untuk saya.

Nuno Gonçalves
sumber
Ini bukan di bawah Generaltab, itu di bawah Profilestab
Falmarri
Baik. Saya melewatkan > Profilessatu. Salahku. Diperbarui.
Nuno Gonçalves
1

Jawaban yang diterima telah bekerja untuk saya untuk waktu yang lama tetapi sekarang rusak di versi terbaru iTerm2. Solusi yang saya temukan adalah mengaktifkan Python API dan membuat skrip yang menetapkan nama tab seperti:

#!/usr/bin/env python3.7
import argparse

import iterm2

def get_args():
    parser = argparse.ArgumentParser(description='Set the tab name')
    parser.add_argument('name')
    return parser.parse_args()

ARGS = get_args()

async def main(connection):
    app = await iterm2.async_get_app(connection)
    window = app.current_terminal_window
    if window is not None:
        tab = window.current_tab
        await tab.async_set_title(ARGS.name)
    else:
        # You can view this message in the script console.
        print("No current window")

iterm2.run_until_complete(main)

Disimpan sebagai "tab_name.py", lalu dipanggil dengan:

~/Library/ApplicationSupport/iTerm2/iterm2env/versions/*/bin/python3 ~/Library/ApplicationSupport/iTerm2/Scripts/tab_name.py "new tab name"

Ini tidak sebagus atau seanggun jawaban yang diterima, tetapi berhasil.

Ian E
sumber
-2

ITerm -> Preferensi -> Tampilan -> Judul Jendela & Tab -> centang Tampilkan opsi nama profil

john sam
sumber
1
Selamat Datang di Pengguna Super! Di situs T&J ini kami mencoba memberikan jawaban yang bagus untuk pertanyaan yang diajukan orang. Bagian dari menulis jawaban yang baik adalah memberikan konteks untuk solusi yang diusulkan. Harap edit jawaban Anda dan jelaskan mengapa solusi Anda berfungsi, dan apa, khususnya , yang berhasil.
cascer1