Ваша проблема связана с сломанный preexec
: вы не процитировать командную строку правильно, когда вам напечатайте его для включения в заголовок окна.
В .zshrc
вы в курсе, что не является тот, который вы использовали, я вижу (не делайте этого Всегда скопируйте и вставьте точное содержимое файла и команды, которые вы использовали!):
a=${(V)1//\%/\%\%}
a=$(print -Pn "%40>...>$a" | tr -d "\n")
print -Pn "\ek$a:$3\e\\"
print -P
вызывает быстрое расширение. Вы включаете команду в аргумент. Вы защищаете символы %
в команде, удваивая их, но этого недостаточно. Вы, очевидно, есть опция prompt_subst
включена, так что print -P
вызывает $(…)
конструкт в командной строке, которая определяет функцию, которая будет выполнена:
python -c "import $1; print $1.__file__"
где $1
является командной строки (определение функции: pywhere { … }
).
Вместо того, чтобы пытаться проанализировать командную строку, распечатайте ее буквально. Это также исправит другие ошибки: помимо того, что вы не учли prompt_subst
, вы удвоили знаки %
, но должны были увеличить их в четыре раза, так как вы выполняете быстрое расширение дважды, и вы также расширяете последовательности \
.
function title() {
a=${(q)1} # show control characters as escape sequences
if [[ $#a -gt 40 ]]; then a=$a[1,37]...; fi
case $TERM in
screen)
print -Pn "\ek"; print -r -- $a; print -Pn ":$3\e\\";;
xterm*|rxvt)
print -Pn "\e]2;$2 | "; print -r -- $a; print -Pn ":$3\a";;
esac
}
Это выглядит правильно, и оно работает для меня. Как это не работает для вас? – Gilles
ах - только что заметил, что на другой системе работает нормально. Так должно быть что-то в моей конфигурации zsh, я думаю .. тьфу! – bee
Ошибка возникает, если я использую функцию title в preexec, отсюда: http://dotfiles.org/~_why/.zshrc Я только что прокомментировал это. Не уверен, почему это мешает определению функции. – bee