Установите заголовок окна терминала к текущему каталогу

Как я могу заставить Terminal.app в OS X отображать текущий каталог в своем заголовке окна или вкладки?

Я использую оболочку удара.

71
задан 12.05.2010, 11:20

3 ответа

Зависит от Вашей оболочки.

Эта статья отображает несколько методов.

Я лично использую zsh, который имеет удобный precmd () функция, которая выполняется перед каждой подсказкой.

    precmd () { print -Pn "\e]2;%n@%M | %~\a" } # title bar prompt

Хотя другие вопросы перечисляют методы удара, они искажают CD. Bash предоставляет свойственный метод, который отмеривает просто подсказку.

удар

колотите предоставляет переменный PROMPT_COMMAND, который содержит команду для выполнения перед подсказкой. Этот пример (вставленный в ~/.bashrc) устанавливает заголовок на "username@hostname: каталог":

 PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

где \033 код символа для ESC, и \007 для BEL. Обратите внимание, что заключение в кавычки важно здесь: переменные расширены в "..." и не расширены в '...'. Таким образом, PROMPT_COMMAND установлен на нерасширенное значение, но переменные внутри "..." расширены, когда PROMPT_COMMAND используется.

Однако PWD производит полный путь к каталогу. Если мы хотим использовать '~' стенографию, мы должны встроить строку Escape в подсказку, которая позволяет нам использовать в своих интересах следующие быстрые расширения, обеспеченные оболочкой:

\u          expands to $USERNAME
\h          expands to hostname up to first '.'
\w          expands to directory, replacing $HOME with '~'
\[...\]     embeds a sequence of non-printing characters

Таким образом следующее производит подсказку "bash$" и xterm заголовок "username@hostname: каталог"...

 case $TERM in
     xterm*)
        PS1="\[\033]0;\u@\h: \w\007\]bash\$ "
        ;;
     *)
        PS1="bash\$ "
        ;;
 esac

Отметьте использование [...], которое говорит удару игнорировать непечатаемые управляющие символы при вычислении ширины подсказки. Иначе команды редактирования строки запутываются при установке курсора.

60
ответ дан 07.12.2019, 08:11

Введите это в свой ~/.profile или эквивалентный файл:

function settitle() { echo -n "]0;$@"; }
function cd() { command cd "$@"; settitle `pwd -P`; }

export PS1='\W \$ '

settitle `pwd`

Первая строка содержит два специальных символа, которые не могут копироваться/вставляться, но можно загрузить текст отсюда: http://blog.nottoobadsoftware.com/files/setterminaltitle.sh.

0
ответ дан 07.12.2019, 08:11

Решения для Bash, включающие PS1 и PROMPT_COMMAND оба сбоя, если каталог имеет символы Unicode в нем (по крайней мере, на Snow Leopard). Лучшее решение, которое я мог предложить, состояло в том, чтобы сделать эквивалент

PS1="\[\033]0;\`pwd | tr -dC '[\000-\177]'\`\007\]\$ "

К сожалению, это не работает непосредственно, так вместо этого я определил функцию оболочки, чтобы сделать tr вызов:

termtitlefilter () { tr -dC '[\000-\177]'; }
PS1="\[\033]0;\`pwd | termtitlefilter\`\007\]\$ "

Это работает хорошо на латинские диакритические знаки, которые будут в Unicode NFD (диакритические знаки исчезнут, но базовый латинский символ останется).

К сожалению, это полностью перестанет работать для вещей как китайский язык.

1
ответ дан 07.12.2019, 08:11

Теги

Похожие вопросы