We store the user setting for `prompt_subst` before changing it in the
local scope of `prompt_pure_preprompt_render`. This allows us to restore
it when we render the real prompt (`PS1`) through `zle .redraw-prompt`.
Fixes#230.
By unsetting `prompt_subst` for the `prompt_pure_preprompt_render`
function we can avoid e.g. git branch names with a `$`-sign to be
expanded as parameters.
Fixes#224 and #225 (as a result of 6cbd49a).
* Compare expanded preprompt when rendering
The expanded content of the preprompt was not considered previously when
checking if the content had changed. E.g. path changes were never detected.
The typeset (definition) and assignment are performed on separate lines as it
would cause issues otherwise.
Fixes#213.
This fixes#145 by calculating how many lines the previous preprompt
assumes in the current terminal window and either erases preprompt lines
that are no longer relevant or allocates more space for the new
preprompt.
prompt_pure_string_length is used for calculating the length of the
preprompt, but the preprompt doesn't contain a newline, so we shouldn't
subtract by one in prompt_pure_string_length.
What should happen instead is that when we subtract one from the length
when we calculate the number of lines the preprompt occupies.
Preprompt and prompt are two distinct concepts in pure: the preprompt is
where the directory and git info live, whereas the prompt (`PROMPT`) is
as pure and simple as `%(?.%F{magenta}.%F{red})❯%f`.
In the `prompt_pure_preprompt_render` function though, prompt and
preprompt are used interchangeably, which makes it confusing the first
time one reads it. (The lines `[[ "${prompt_pure_last_preprompt}" !=
"${prompt}" ]]` and `prompt_pure_last_preprompt=$prompt` perfectly
illustrate the interchangeable use and the potential point of
confusion.)
Therefore, this commits corrects the problem by renaming the `prompt`
local variable to `preprompt`, and updating comments accordingly.
* `prompt_pure_git_delay_dirty_check` holds the (finish) timestamp of
the last dirty check (if the dirty check took more than 2 seconds);
renamed to `prompt_pure_git_last_dirty_check_timestamp`.
* Local variable `dirty_check` holds the elapsed time in seconds since
the last dirty check (if the timestamp is set); renamed to
`time_since_last_dirty_check`.