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.
On Linux, linking to mktemp() generates the following warning:
.
utils.o: In function `gettempname':
./Src/utils.c:2229: warning: the use of `mktemp' is dangerous, better use `mkstemp' or `mkdtemp'
The warning cannot be disabled.
Work around that by using mkstemp() instead, and massage its output so
it behaves like mktemp(). See the new comment for further details.
If we can't grab the terminal in interactive mode, give
up after 100 goes. This is a completely arbitrary choice;
we simply don't know what in the system could change the
result of looping further.
Indentatin in moveto was broken by 3eea35d0 (my bad), making it
difficult to read. This commit reverts it to what it used ot be.
While at it, fix indentation in a few other places in the same
file.
When TTY disappears and there is at least one fd watcher, raw_getbyte() can
enter an infinite loop where it keeps calling poll() over and over again.
To reproduce, open a terminal, start zsh and type this:
rm -f /tmp/fifo
mkfifo /tmp/fifo
exec 3<>/tmp/fifo
do-nothing() {}
zle -F 3 do-nothing
Then make TTY disappear. For example, kill the parent with `kill -9 $PPID`
and close the terminal window if it's still there. Observe that zsh is
consiming 100% CPU. Note that do-nothing() never gets called.
This patch makes the poll() loop in raw_getbyte() terminate when TTY is
signalling POLLHUP. This makes the behavior consistent with the case where
TTY disappears while no fd watchers are installed.
These are descriptors marked FDT_EXTERNAL.
Make all sysopen'ed file descriptors FDT_EXTERNAL.
Make =(...) call closem() consistent with other substitutions.
Document file descriptors are left open.
Pick number of leading or trailing path components to substitute.
Active in history, brace parameters, glob qualifiers.
Add tests for all three environments.
1. Height off by one in the presence of meta characters at the end of the line.
The following prompt has height 2 but countprompt used to return 3.
PROMPT="${(pl.$COLUMNS..-.)}%f"$'\n'
You can observe the effects of the bug with esc-x followed by reset-prompt.
2. Width off by one when a line is broken in the middle of a wide character.
Assuming COLUMNS=79, the following prompt has width 2 but countprompt used to return 0.
PROMPT="${(pl.40..\u3050.)}" zsh -df
Press ctrl-r or type ls<tab> to observe the effects of the bug.
3. Width off by 1-7 when a line is broken in the middle of a tab.
Assuming COLUMNS=79, the following prompt has width 1 but countprompt used to return 0.
PROMPT="${(pl.10..\t.)}" zsh -df
Press Ctrl-R or type ls<TAB> to observe the effects of the bug.