Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

A weird smart-insert-last-word bug



Here's something I've seen very sporadically but I couldn't work out a test
case before today.
I make use of smart-insert-last-word like this:

zlewidget '' insert-last-word smart-insert-last-word
zstyle :insert-last-word match '[^,]??*'
zstyle :insert-last-word auto-previous 1

Every now and then it destroys some part of the command line when starting
a new insert sequence.  This seems to be caused by its simple conditional
at the start of its file being inadequate to know when it is really
continuing:

if (( HISTNO == _ilw_hist && cursor == _ilw_cursor &&
UNDO_CHANGE_NO == _ilw_changeno ))

Since I have hist_ignore_space set, this makes it possible to trigger the
bug on successive command lines when typing a series of commands that begin
with a space.  Imagine that the underscore char is a leading space:

echo foo
echo bar
_echo <Esc>.
_echo <Esc>.<Esc>.
testing12<Esc>.

at that point the command buffer will be "testinfoo".  Note that it took 2
space-starting commands to be able to trigger the bug on a successive
command-line and that the column has to line up with the column where it
left off on the prior line.

The bug can also happen during an edit on a single line if you initiate the
function a second time from the column where it left off, even though some
editing has happened in between. For example:

echo <Esc>.<Bksp><Bksp><Bksp>bug<Esc>.

..wayne..


Messages sorted by: Reverse Date, Date, Thread, Author