Cambia il titolo del terminale in Mac OS X


39

Come posso cambiare arbitrariamente il titolo di una finestra Terminale in Mac OS X? Ho visto questa domanda e questa cosa dell'involucro magico , ma penso che sia solo un semplice comando di Mac OS X.


Dovresti notare che non c'è nulla di specifico su OS X al riguardo: la risposta funzionerà praticamente su qualsiasi terminale.
Andrew Aylett,

Quindi è specifico per Bash?
Dan Rosenstark,

@Andrew Aylett, quindi lo script che ho inserito nella mia risposta (sotto) funzionerà anche sulle distribuzioni di Linux?
Dan Rosenstark,

Sì, dovrebbe funzionare ovunque (con una shell derivata da sh) che utilizza terminali unix-y.
Andrew Aylett,

Risposte:


48

Questo articolo spiega come.

In sostanza, usi le sequenze di caratteri che fanno eco allo schermo per informare il terminale di quale titolo dovrebbe essere visualizzato.

title='My first title'
echo -n -e "\033]0;$title\007"

Nell'esempio sopra, qualunque sia il titolo della variabile impostato mentre diventa il titolo del terminale. Certo, potresti semplicemente avere il titolo nella stringa da echeggiare come:

echo -n -e "\033]0;My first title\007"

Ma il primo modo lo rende leggermente più facile da usare e / o estendere in seguito.


Eccellente. Potresti includere uno script di esempio (come questo? echo -n -e "\033]0;$1\007") Nella tua risposta in modo che io possa contrassegnarlo come migliore risposta, per favore?
Dan Rosenstark,

2
printf potrebbe essere più affidabile: printf "\033]0;%s\007" "$title_variable"(le varie opzioni e comportamenti dell'eco non sono gli stessi in tutti i sistemi, shell o anche opzioni di shell) Inoltre, le assegnazioni delle variabili in bash non dovrebbero avere spazi attorno al segno uguale.
Chris Johnsen,

1
Ho usato $ * e all'interno di una funzione, quindi non avrei dovuto citare la mia stringa del titolo.
BeepDog

C'è un modo per cambiare il titolo all'interno di un programma C? Il programma a cui sto pensando è in esecuzione un'animazione basata su ncurses.h, quindi non sono sicuro di come fare eco al terminale :-(
phs,

OK: Funziona solo fprintf (stdout, ..). Avrei dovuto provare prima di chiedere.
phs,

34

Aggiungendo quanto segue al tuo ~/.profileotterrai lo stesso effetto:

# function for setting terminal titles in OSX
function title {
  printf "\033]0;%s\007" "$1"
}

E poi una rapida title 'et voila'ordinerà tutte le schede.


perché è un problema se hai molte funzioni in .profile? c'è un limite?
tgkprog,

1
IDK perché, ma
ho

2
Oppure: alias title="printf '\033]0;%s\007'".
Kenorb,

export alias title="printf '\033]0;%s\007'"
Mwayi,

Puoi anche aggiungerlo usando sudo nano /etc/bashrc. Questo dovrebbe funzionare per tutti gli utenti. Riavviare la sessione terminale o fare source /etc/bashrcper applicare le modifiche.
Eugene Kulabuhov,

8

Remix della risposta di Dan MgG:

echo -n -e "\033]0;$1\007"

Memorizzalo in un file chiamato / usr / bin / title (usando sudo!) E modificalo in + x. Quindi da qualsiasi luogo puoi semplicemente digitare

title 'Trying to Figure This GIT Thing Out'

e ottieni un bel titolo.

(La sintassi può variare se non sei su OSX, se ho capito bene)


Se utilizzi una di quelle versioni più recenti di OS X, puoi /usr/local/bin/titleinvece farlo .
Samy Bencherif,

2

In alternativa alle soluzioni da riga di comando basate su sh, l'app Terminale OS X ha una preferenza per cambiare il titolo come segue: Sotto il menu Terminale-> shell c'è una scelta "modifica titolo", selezionala e puoi cambiare il titolo facilmente.


1

Su OS X, le preferenze del terminale sono memorizzate in ~/Library/Preferences/com.apple.Terminal.plist.

Il titolo del terminale è memorizzato nella WindowTitlepreferenza.


0

Grazie per questo. Ho appena aggiunto una funzione al mio .bashrc:

    function stit() {
    echo -n -e "\033]0;$1\007"
}

Nella mia mente "stit" = una scorciatoia conveniente per "set_title". E ora quando voglio impostare il titolo delle mie finestre al volo, scrivo:

stit "[new window title]"

0

La risposta contrassegnata come migliore risposta funziona bene ... questo è quello che ho fatto ...

tell application "Terminal"
    activate
    do script "echo -n -e \"\\033]0;WorkerTab1\\007\"; cd $HOME/folder1"
end tell

questo imposterà il nome della nuova scheda su WorkerTab1 e ​​quindi eseguirà altri comandi come "cd", ecc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.