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

The mystery of deferred prompt evaluation



Folks--

If I do this in 3.0.5:

  PROMPT_LEN=3
  PROMPT_DYN='%${PROMPT_LEN}C'
  PROMPT='%0(#..)${PROMPT_DYN}% '

I get the really cool feature of being able to change PROMPT_LEN at
any point and having my prompt adjust how much of my path it shows.
Oddly enough, this only works if I put the %(...) construct before
the parameter reference in the prompt, if that isn't there then my
prompt ends up being the literal text of the definition, with the
parameter not getting expanded. I might add that in 3.1.5 the latter
behavior is always the case (which I when I first noticed this).

Does anyone know:

 a) Why I shouldn't be able to defer parameter expansion in my
    prompts in general?
 b) Why in 3.0.5 it works with %(...) before the parameter
    but not without?
 c) Why it doesn't work at all, ever, in 3.1.5?
 d) How I can get this behavior back? :-)

In case you're wondering why I would want something so convoluted,
I was trying to make life easier for the non-power users, so that
they could set a single variable and get as much of the prompt as
they wanted without having to learn all the details of prompt
syntax. I happened to have the $(...) there for another such
feature, which is why this happened to work for me for so long.

-- 
Nik Gervae < nik at linna dot com >
Techwriter, vegan, dilettante



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