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

Re: up-line-or-search

On Jun 1,  8:13am, Andy Wick wrote:
} Subject: up-line-or-search
} If you comment out line 376 of Zle/zle_hist.c
}     iblank(s[histmpos] == Meta ? s[histmpos+1]^32 : s[histmpos]) &&
} up-line-or-search will kind of work, which is better then not

I just downloaded and unpacked the 3.1.4 tarfile, and I have that code
on line 390, not 376.  So you may want to check the state of your
sources.  (This does not appear to be the reason for the problem.)

} What it still does with that line commented out is forget
} the orginal string typed in, and uses the last string found each
} time you hit up arrow.

This is all the result of the change in history-search-backward, which
causes it not to match word prefixes.  In my freshly-built copy of 3.1.4,
I can't even perform the search you describe here:

} Example:
} (Previous Commands)
} %lss -d
} %ls -l
} %lss
} %ls
} Now if I do 
}    l<uparrow>
} it finds "ls"

When I do that, I get a beep, because there is no previous command where
`l' is the entire first word.  If I do "ls<uparrow>" I get "ls -l", having
entirely skipped "lss".  Repeated <uparrow> correctly finds other uses of
ls, skipping lss.

Now, I've never been terribly happy with the change to require full word
matching in history-search-backward, and the fact that it has rippled
through to change the way other commands behave makes it even more of an
annoyance.  However, I can't decide if this is actually a bug.  The doc

     Move up a line in the buffer, or if already at the top line, search
     backward in the history for a line beginning with the first word
     in the buffer.

Neither there nor under history-search-backward does it say "a line whose
first word is the same as the first word in the buffer" but I suppose the
reference to "the first word" is supposed to imply that.  So perhaps the
command is working correctly but the doc is unclear.

} I'll buy someone a pizza if they just fix this for me, I really
} want to upgrade to 3.1.x, but can't without my favorite feature.

In zle_hist.c, in uplineorsearch(), call historybeginningsearchbackward()
instead of historysearchbackward() and I believe you'll get what you want.
How or whether Zefram intends to deal with this is another matter.

Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

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