The `zsh -f` running in the PTY doesn't know about the non-exported
variables and functions defined in the original shell, thus can't make
suggestions for them. Run local functions in the PTY instead of a new
`zsh` process.
We have to handle things differently based on whether zle is active or
not (async vs. sync mode).
Maybe this is also a fix for #247, #248 and #258. Supersedes #267.
Testcase:
Using match_prev_cmd strategy and with these lines in history:
echo '1^'
echo '2^'
echo '1^'
type:
echo (unexpected suggestion echo '1^' instead of echo '2^')
echo '1^1 (wrong suggestion echo '1^1echo '1^')
echo '1^# (error "bad math expression")
As far as I know, `fc` makes it impossible to tell whether history items
used an actual newline character or the string "\n". Pulling from the
`$history` array gives a more accurate representation of the actual
command that was run.
According to a few tests, the `fc` builtin appears to be quite a bit
faster than searching through the `$history` associative array when
dealing with large history files (500K+).
This strategy relies on the history being exactly in the order in which
commands have been entered. Therefore, options like suppressing
duplicates or expiring duplicates first will lead to unexpected
suggestions.
A new suggestion strategy 'match_prev_cmd' is available. This is a bit
more context aware variaton on the default strategy.
The suggestion will be:
- The newest history entry that matches the current prefix, AND
- Whose preceding history entry also matches the previously executed
command.
See src/strategies/match_prev_cmd.zsh for an example.