2010/8/19 Mikael Magnusson > On 19 August 2010 16:26, Guillaume Brunerie > wrote: > > Hi, > > > > I have the following in my .zshrc which set the terminal title to "*cmd" > > when cmd is executed and to "(cmd)" when execution of cmd is over. > > > > __last_cmd= > > preexec () { > > __last_cmd=$1 > > print -Pn "\e]0;*$__last_cmd\a" > > } > > precmd () { > > if [[ -n $__last_cmd ]] > > then > > print -Pn "\e]0;($__last_cmd)\a" > > fi > > } > > > > > > (print -Pn "\e]0;$str\a" change the terminal title to $str, see 'man > > console_codes') > > It works well, except when there are percent signs in the last command. > > For example if I type "echo 100%", the terminal title becomes "(echo > 100)" > > instead of "(echo 100%)" and the string " ]0;*echo 100100%" appears in > the > > terminal. > > > > How can I do to make it work even with percent signs in the command? > > Don't use -P for print, in fact, don't use print at all, since it will > mess up if you use a \ in the command too. printf '\e]0;%s\a' $str > should work better, it won't expand anything in $str at all. If you > have literal escape characters in your command it will still mess up, > you can use ${(V)str} in that case. > > -- > Mikael Magnusson > Yes, I don't know why I had the -P option for print but after reading the man page it was indeed stupid. It works very good with printf, thank you :-) Guillaume Brunerie