Изменить заголовок терминала в Mac OS X

39

Как я могу произвольно изменить заголовок окна терминала в Mac OS X? Я видел этот вопрос и это волшебство , но думаю, что это просто простая команда Mac OS X.

Дэн Розенстарк
источник
Следует отметить, что в этом нет ничего специфического для OS X - ответ будет работать практически на любом терминале.
Эндрю Айлетт
Это специфично для Bash?
Дэн Розенстарк
@ Андрей Айлетт, так что сценарий, который я вставил в свой ответ (ниже), будет работать и на дистрибутивах Linux?
Дэн Розенстарк
Да, он должен работать где угодно (с оболочкой, производной от sh), которая использует терминалы unix-y.
Эндрю Айлетт

Ответы:

48

Эта статья рассказывает вам, как.

По сути, вы используете последовательности символов, отображаемые на экране, чтобы сообщить терминалу, какой заголовок он должен отображать.

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

В приведенном выше примере, независимо от того, какая переменная title установлена ​​в то время, становится заголовком терминала. Конечно, вы можете просто добавить заголовок в строку, например:

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

Но первый способ немного облегчает использование и / или расширение позже.

Дэн МакГрат
источник
Превосходно. Не могли бы вы включить в свой пример пример сценария (как этот? echo -n -e "\033]0;$1\007"), Чтобы я мог отметить его как лучший ответ, пожалуйста?
Дэн Розенстарк
2
printf может быть более надежным: printf "\033]0;%s\007" "$title_variable"(различные параметры и поведение echo не одинаковы для всех систем, оболочек или даже параметров оболочки). Кроме того, присваивания переменных в bash не должны иметь пробелов вокруг знака равенства.
Крис Джонсен
1
Я использовал $ * и внутри функции, поэтому мне не пришлось бы заключать в кавычки мою строку заголовка.
BeepDog
Есть ли способ изменить заголовок из программы на C? Программа, о которой я думаю, запускает анимацию на основе ncurses.h, поэтому я не уверен, как подключиться к терминалу :-(
phs
ОК: Просто fprintf (stdout, ..) работает. Я должен был попробовать, прежде чем спрашивать.
тел.
34

Добавление следующего к вашему ~/.profileприведет к тому же эффекту:

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

А затем быстро title 'et voila'рассортирует все ваши вкладки.

techpeace
источник
почему это проблема, если у вас много функций в .profile? есть ли предел?
tgkprog
1
ИДК почему, но пришлось редактировать .bash_profile вместо .profile
Накилон
2
Или: alias title="printf '\033]0;%s\007'".
Кенорб
export alias title="printf '\033]0;%s\007'"
Муэй,
Вы также можете добавить его, используя sudo nano /etc/bashrc. Это должно работать для всех пользователей. Перезапустите сеанс терминала или выполните source /etc/bashrcизменения.
Евгений Кулабухов
8

Ремикс Дана МГГ:

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

Сохраните его в файле / usr / bin / title (используя sudo!) И измените его на + x. Тогда из любого места вы можете просто набрать

title 'Trying to Figure This GIT Thing Out'

и вы получите хороший маленький титул.

(Синтаксис может отличаться, если вы не используете OSX, если я правильно понимаю)

Дэн Розенстарк
источник
Если вы используете одну из этих более новых версий OS X, вы можете сделать это /usr/local/bin/titleвместо этого.
Сэми Бенчериф
2

В качестве альтернативы решениям на основе командной строки на основе sh, приложение OS X Terminal имеет предпочтение изменить заголовок следующим образом: В меню «Terminal-> shell» есть выбор «edit title», выберите его, и вы можете изменить заголовок легко.

user572813
источник
1

На OS X настройки терминала хранятся в ~/Library/Preferences/com.apple.Terminal.plist .

Название терминала сохраняется в WindowTitleнастройках.

J.Money
источник
0

Спасибо за это. Я только что добавил функцию в мой .bashrc:

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

По моему мнению "stit" = удобный ярлык для "set_title". И теперь, когда я хочу установить название моих окон на лету, я набираю:

stit "[new window title]"
signetmac
источник
0

Ответ, помеченный как Лучший ответ, работает нормально ... это то, что я сделал ...

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

это установит имя новой вкладки на WorkerTab1, а затем выполнит другие команды, такие как «cd» и т. д.

Bates
источник