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`.
Whilst a nice feature, firing off a `git fetch` (and so an SSH/http call) after
*every* shell interaction is a bit heavy for my liking. This adds the ability to
disable it (whilst keeping it enabled by default).