1

Я настроил свой zsh для обновления заголовка XTerm всякий раз, когда я меняю каталоги. Это аккуратно! К сожалению, у меня есть одна общая проблема:

% cd foo;       # title changes to "host1:~/foo"
% ssh host2;    # title changes to "host2:~"
% pwd
/home/user/foo  # title is still "host2:~"

Мне нужно выполнить какую-либо команду в любое время, когда соединение ssh завершается, либо chpwd , либо cd . или что-то подобное. Я не думаю, что могу использовать псевдоним, потому что мне нужно что-то вроде

alias ssh=ssh $*; cd .

но AFAICT вы не можете выбрать, где аргументы идут в псевдониме.

1 ответ1

4

Во-первых, комментарий: в zsh (и, кстати, также в bash & friends) нельзя использовать аргументы в псевдониме. Вместо этого используйте функцию:

# function hello() { echo $1 $3 } 
# hello one two three
one three

Вы изменяете заголовок в функции chpwd() , которая вызывается всякий раз, когда вы меняете каталог. Итак, вам нужно использовать cd . обновить свой заголовок. Или, следуя вашему подходу, перегрузите команду ssh с помощью этой функции для выполнения chpwd() после завершения сеанса ssh:

function ssh() { command ssh "$@"; chpwd }

Решение, которое я предпочитаю, заключается в том, чтобы поместить команду для изменения заголовка в precmd() которая выполняется перед отображением приглашения. Я определил, например, в моем ~/.zshrc

precmd () {
   [[ -t 1 ]] && print -Pn "\e]0;%n@%m:%~\a"
}

чтобы получить заголовок, такой как user@host:/current/dir , который обновляется немедленно при подключении к удаленной машине (при условии, что в ~/.zshrc есть подобный код) и при возвращении в локальный сеанс.

([[ -t 1 ]] проверяет, подключен ли сеанс к терминалу - это не так важно.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .