This solves the following problems in the _prefix completer:
- The old code had logic for dealing with compstate[unambiguous] that
was unnecessary. It works fine without it.
- Because of this logic, if a widget set compstate[insert]=1 after
calling _main_complete, an `x` was left after the completion on the
command line.
- If the same widget also set `compstate[to_end]=`, then instead, the
last character of the inserted completion would be treated as an
autoremovable suffix, with the actual suffix being inserted to the
line as a normal character.
- After inserting a completion, the cursor would move to the end of the
entire current word on the command, not the end of word that was
inserted. This is not what you want with _prefix, since you are trying
to complete a word _before_ the one on the command line, after which
you usually want to insert a separator, such as a space or slash,
before the next word.
The test harness created tempfiles with a predictable names and sourced
them without verifying they had been created by itself. This opened
anyone who ran the test suite to a symlink attacks from other local
users on the build machine.
Fix this by creating the file whilst NO_CLOBBER and ERR_EXIT are both in
scope, to ensure that we'll abort unless the file really was created as
expected.
Put the existing rm(1) call in a try/always block to help it be unlinked
on test failures, thus reducing the chances of the NO_CLOBBER check
triggering on tempfiles created by earlier test suite runs.
I had first tried to fix this by using the
.
() { ... } =(:)
.
idiom, but couldn't get that to work: it broke the %prep code of X03
with ZTST_verbose unset (its default value) but not with ZTST_verbose=3.
(I tried to set the latter to debug zpty_flush.)
While there, add a needed-in-principle-but-noop-in-this-specific-case (q).
Indentation will be restored in the next commit.