Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Setting the terminal title: problem with percent signs

On 19 August 2010 16:26, Guillaume Brunerie
<guillaume.brunerie@xxxxxxxxx> 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

Messages sorted by: Reverse Date, Date, Thread, Author