Как я могу заставить Terminal.app в OS X отображать текущий каталог в своем заголовке окна или вкладки?
Я использую оболочку удара.
Зависит от Вашей оболочки.
Эта статья отображает несколько методов.
Я лично использую 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
Отметьте использование [...], которое говорит удару игнорировать непечатаемые управляющие символы при вычислении ширины подсказки. Иначе команды редактирования строки запутываются при установке курсора.
Введите это в свой ~/.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.
Решения для 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 (диакритические знаки исчезнут, но базовый латинский символ останется).
К сожалению, это полностью перестанет работать для вещей как китайский язык.