Assignments after the first were not recognised as such as without
the full parser the state didn't return to command position.
Fix this in bufferwords() and the completion miniparser.
Move detection of key/value pairs down into prefork().
Detect normal array assignment and [key]=val array assignemnt
separately. Mark key / value pairs with Marker and pass up flag. Deal
with marked triads specially later on.
This could get confused about where we were in the command
line word array e.g. after the > of "!> .". Also take more care
if does confused, with debug output. Also neaten up one
obscure test.
The completion result is still in need of some repair; e.g., if the first
thing on the line is the redirection, completion before it is not taken
to be in command position, and in this and other cases a necessary space
is not inserted between the completed word and the redirection.
If we got a LEXERR, which didn't necessarily mean an actual error,
just something the rather nasty ctxtlex() got confused by, we
didn't scan the reset of the line.
Variables are now associated with the module that declares them, being
initialised and saved/restored there. However, as many variables are
used for communication between modules, many of them are set in multiple
places, so the assignment is ambiguous.
Combination of 12 commits from interrupt_abort branch.
Basic strategy is to introduce bits to errflag and to set and
reset them separately.
Remove interrupt status on return to main keymap.
Turn off ERRFLAG_INT for always block.
Restore bit thereafter: we probably need a new variable in order
to allow user interrupts to be reset in the always block.
Add TRY_BLOCK_INTERRUPT
This works the same as TRY_BLOCK_ERROR, but for a SIGINT, too.
Ensure propagation of SIGINT from exited job.
If received by foreground job, shell uses ERRFLAG_INT, not
ERRFLAG_ERROR, to set the new state.
Reset errflag before precmd()
Add always block in _main_completion to fix ZLS_COLORS
Ensures we get the right state of $ZLS_COLORS at the end of _main_complete
even if there's an interrupt. However, the "right state" is a bit messy
as it depends on styles.
Improves case where completing after the $' but before any
closing quote, or if the closing quote is absent.
No other change --- we still don't attempt to exand the quotes if
we're inside them.