Zmień tytuł terminala w Mac OS X

39

Jak mogę dowolnie zmienić tytuł okna terminala w Mac OS X? Widziałem to pytanie i tę magiczną rzecz , ale myślę, że to tylko proste polecenie Mac OS X.

Dan Rosenstark
źródło
Należy zauważyć, że nie ma w tym nic specyficznego dla OS X - odpowiedź będzie działać na prawie każdym terminalu.
Andrew Aylett,
Czy jest to zatem specyficzne dla Bash?
Dan Rosenstark
@Andrew Aylett, więc skrypt, który wpisałem w mojej odpowiedzi (poniżej), również będzie działał na dystrybucjach Linuksa?
Dan Rosenstark
Tak, powinien działać wszędzie (z powłoką pochodną sh) korzystającą z terminali unix-y.
Andrew Aylett,

Odpowiedzi:

48

W tym artykule dowiesz się, jak to zrobić.

Zasadniczo używasz sekwencji znaków wyświetlanych na ekranie, aby poinformować terminal o tym, jaki tytuł powinien wyświetlić.

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

W powyższym przykładzie, niezależnie od tego, jaki tytuł zmiennej jest ustawiony, staje się tytułem terminala. Oczywiście możesz po prostu mieć tytuł w ciągu znaków, aby echo, na przykład:

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

Ale pierwszy sposób sprawia, że ​​jest nieco łatwiejszy w użyciu i / lub przedłużony później.

Dan McGrath
źródło
Doskonały. Czy możesz podać przykładowy skrypt (taki jak ten? echo -n -e "\033]0;$1\007") W swojej odpowiedzi, abym mógł zaznaczyć najlepszą odpowiedź, proszę?
Dan Rosenstark
2
printf może być bardziej niezawodny: printf "\033]0;%s\007" "$title_variable"(różne opcje i zachowania echa nie są takie same we wszystkich systemach, powłokach, a nawet opcjach powłoki) Ponadto przypisania zmiennych w bash nie powinny mieć spacji wokół znaku równości.
Chris Johnsen
1
Użyłem $ * i wewnątrz funkcji, więc nie musiałbym cytować mojego tytułu.
BeepDog
Czy istnieje sposób na zmianę tytułu w programie C? Program, o którym myślę, uruchamia animację opartą na ncurses.h, więc nie jestem pewien, jak wysłać echo do terminala :-(
phs
OK: Działa tylko fprintf (standardowe wyjście, ..). Powinienem był spróbować, zanim zapytam.
phs
34

Dodanie następujących do twojego ~/.profilepozwoli osiągnąć ten sam efekt:

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

A potem szybkie title 'et voila'uporządkuje wszystkie twoje zakładki.

techpeace
źródło
dlaczego jest to problem, jeśli masz wiele funkcji w .profile? czy jest jakiś limit?
tgkprog
1
IDK dlaczego, ale musiałem edytować .bash_profile zamiast .profile
Nakilon
2
Lub: alias title="printf '\033]0;%s\007'".
kenorb
export alias title="printf '\033]0;%s\007'"
Mwayi
Możesz także dodać go za pomocą sudo nano /etc/bashrc. Powinno to działać dla wszystkich użytkowników. Zrestartuj sesję terminalową lub zrób, source /etc/bashrcaby zastosować zmiany.
Eugene Kulabuhov
8

Remiks odpowiedzi Dana MgG:

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

Zapisz go w pliku o nazwie / usr / bin / title (using sudo!) I chmod do + x. Następnie z dowolnego miejsca możesz po prostu pisać

title 'Trying to Figure This GIT Thing Out'

i dostajesz niezły tytuł.

(Składnia może się różnić, jeśli nie korzystasz z OSX, jeśli dobrze rozumiem)

Dan Rosenstark
źródło
Jeśli korzystasz z jednej z tych nowszych wersji OS X, możesz to zrobić /usr/local/bin/titlezamiast tego.
Samy Bencherif,
2

Jako alternatywa dla rozwiązań wiersza polecenia opartych na sh, aplikacja OS X Terminal ma preferencję do zmiany tytułu w następujący sposób: W menu Terminal-> menu powłoki jest dostępna opcja „Edytuj tytuł”, wybierz ją i możesz zmienić tytuł z łatwością.

użytkownik572813
źródło
1

W OS X preferencje terminala są przechowywane w ~/Library/Preferences/com.apple.Terminal.plist.

Tytuł terminala jest zapisany w WindowTitlepreferencjach.

J.Money
źródło
0

Dzięki za to. Właśnie dodałem funkcję do mojego .bashrc:

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

Moim zdaniem „stit” = wygodny skrót do „set_title”. A teraz, gdy chcę ustawić tytuł moich okien w locie, piszę:

stit "[new window title]"
signetmac
źródło
0

Odpowiedź oznaczona jako Najlepsza odpowiedź działa dobrze ... właśnie to zrobiłem ...

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

spowoduje to ustawienie nazwy nowej karty na WorkerTab1, a następnie wykonanie innych poleceń, takich jak „cd” itp.

Bates
źródło