เปลี่ยนชื่อหน้าต่างและแท็บ iTerm2 ใน zsh


50

ฉันต้องการติดป้ายแท็บหน้าต่างของเซสชันเทอร์มินัล ฉันใช้ zshell ใน iterm2 บน OSX เป็นไปได้ที่จะเปลี่ยนฉลากของแท็บหน้าต่างแบบไดนามิกในเทอร์มินัลหรือไม่?

คำตอบ:


48

คุณสามารถป้อนข้อมูลต่อไปนี้zshเพื่อตั้งค่าชื่อหน้าต่างของ iTerm2:

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

หากคุณต้องการโดยอัตโนมัติที่จะแทรกเช่นเวลาปัจจุบันหรือไดเรกทอรีทำงานของคุณแก้ไขzshแฟ้มการกำหนดค่าการตั้งชื่อในฟังก์ชั่นเช่นprecmd()$PWD

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

คุณสามารถอ่านเกี่ยวกับprecmdฟังก์ชั่นในการในส่วนman zshmiscSPECIAL FUNCTIONS

ป้อนคำอธิบายรูปภาพที่นี่


3
เมื่อฉันรันคำสั่ง echo -ne "\ e] 1; นี่คือชื่อ \ a" ชื่อแท็บจะไม่เปลี่ยนแปลง มีการตั้งค่าที่ฉันต้องเปลี่ยนใน iterm2 หรือไม่?
bneil

15
คิดออก ฉันต้องยกเลิกการเลือกตัวเลือกทั้งหมดสำหรับชื่อหน้าต่างและแท็บใน iterm-> preferences-> ส่วนลักษณะที่ปรากฏ และใน. zshrc ฉันต้องยกเลิกการคอมเม้นท์ / เพิ่มการส่งออก DISABLE_AUTO_TITLE = "จริง" ขอบคุณ
@Daniel

3
Profiles > Terminal > Terminal Emulation > Terminal may set tab/window titleนอกจากนี้คุณยังจะต้องตั้ง
วอน

1
สิ่งนี้ไม่ทำงาน (สำหรับฉันอย่างน้อย) ในเวอร์ชั่นล่าสุดของ iTerm (3.3.0)
iconoclast

และไม่ทำงานสำหรับฉันในเวอร์ชันเสถียรล่าสุดของiTerm2(3.2.9)
jalanb

45

อะไรที่เหมาะกับฉัน:

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

หากคุณใช้ Mac OSX และ iTerm, iTerm2 ::

  • iTerm →การตั้งค่า→ลักษณะที่ปรากฏ→หน้าต่าง & แท็บเรื่อง→ยกเลิกทั้งหมด

หากคุณใช้ zsh คุณอาจต้องแก้ไขการตั้งค่าของคุณ ~/.zshrcการตั้งค่าของคุณมักจะอยู่ในไฟล์ คุณต้องการเพิ่มหรือแก้ไขการตั้งค่าของคุณเพื่อให้แน่ใจว่าบรรทัดนี้มีอยู่:

DISABLE_AUTO_TITLE="true"

2
มันยังใช้งานได้ตั้งแต่วันที่ 28/28/2018
salep

38

หนึ่งในสิ่งอำนวยความสะดวกในการใช้ iTerm คือความเป็นไปได้ของการตั้งชื่อหน้าต่าง & ชื่อแท็บแยกกัน: ตัวอย่างการใช้ชื่อแท็บและหน้าต่างแยกกัน

# $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 $@; }

วิธีนี้คุณสามารถดูได้ทันทีว่าโฮสต์ใดที่คุณเชื่อมต่ออยู่ในหน้าต่างใดและชื่อหน้าต่างของแต่ละแท็บจะแสดงผู้ใช้ & CWD


2
ฉันเพิ่งสังเกตเห็นว่าเวอร์ชัน Terminal.app ใน OS X Lion รองรับสิ่งนี้เช่นกัน
Orangenhain

คำถามโง่: คุณเพิ่มรหัสเหล่านี้.bashrcใช่ไหม
qazwsx

ยังปรากฏว่า (ใน iTerm2 Build 1.0.0.20140629) จนกว่าคุณจะเปลี่ยนชื่อหน้าต่าง ... มันจะติดตามชื่อแท็บไม่ว่าจะเกิดอะไรขึ้น ฉันแน่ใจว่าเป็นการตั้งค่า เมื่อเปลี่ยนชื่อหน้าต่าง (2) แล้วจะไม่ติดตามชื่อแท็บอีกต่อไป
เหม่ย

ฉันแก้ไขฟังก์ชั่นด้านบนเพื่อรวมบรรทัดDISABLE_AUTO_TITLE="true"ที่แก้ไขปัญหาและด้วยวิธีนี้หากฉันไม่ได้ตั้งชื่อฉันยังคงได้รับคุณสมบัติชื่ออัตโนมัติ
user15681

5

precmdไม่หลอกลวง อย่างไรก็ตามชุดรูปแบบ oh-my-zsh บางชุดสับสนกับชื่อหน้าต่าง ตั้งค่าPR_TITLEBARเป็นสตริงว่างเพื่อแก้ไข

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

ฉันจะแนะนำให้เล่นกับการตั้งค่าแท็บของ iTerm2 ในการตั้งค่า -> ลักษณะที่ปรากฏ



2

ดูเหมือนไม่มีคำตอบใดที่เหมาะกับฉันซึ่งอาจเป็นสำหรับรุ่น iterm2 (3.3.3)

ฉันพบสิ่งนี้: https://gist.github.com/phette23/5270658#gistcomment-3020766

เป็นหลักคุณสามารถทำอะไรก็ได้ที่พูดในคำตอบอื่น ๆ ทั้งหมด แต่ยังต้องตั้งค่า Preferences > Profiles > General > Title -> Name (Job)

สิ่งนี้ใช้ได้สำหรับฉัน


นี่ไม่ได้อยู่ใต้Generalแท็บมันอยู่ใต้Profilesแท็บ
Falmarri

ขวา. ฉันพลาดที่> Profilesหนึ่ง ความผิดฉันเอง. Updated
Nuno Gonçalves

1

คำตอบที่ยอมรับนั้นได้ผลสำหรับฉันเป็นเวลานาน แต่ตอนนี้แตกใน iTerm2 เวอร์ชั่นล่าสุด วิธีแก้ปัญหาที่ฉันพบคือการเปิดใช้งาน Python API และสร้างสคริปต์ที่ตั้งชื่อแท็บดังนี้:

#!/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)

บันทึกเป็น "tab_name.py" จากนั้นเรียกใช้ด้วย:

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

มันไม่ได้ดีหรือสง่างามเท่าคำตอบที่ยอมรับ แต่ใช้งานได้


-2

iTerm -> การตั้งค่า -> ลักษณะที่ปรากฏ -> ชื่อหน้าต่าง & แท็บ -> เลือกตัวเลือกแสดงชื่อโปรไฟล์


1
ยินดีต้อนรับสู่ Super User! ในเว็บไซต์ถามตอบนี้เราพยายามให้คำตอบที่ดีสำหรับคำถามที่ผู้คนถาม ส่วนหนึ่งของการเขียนคำตอบที่ดีคือการจัดเตรียมบริบทสำหรับโซลูชันที่เสนอ โปรดแก้ไขคำตอบของคุณและอธิบายว่าทำไมผลงานการแก้ปัญหาของคุณและสิ่งที่เฉพาะก็ไม่
cascer1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.