summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/Zle/zle_hist.c24
2 files changed, 18 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 2e8ca9046..172136b39 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2008-04-28 Peter Stephenson <pws@csr.com>
+ * unposted: Src/Zle/zle_hist.c: when anchoring a pattern
+ isearch to the start of the line the search line wasn't
+ reset on new input so when the first match of the new pattern
+ was earlier than that of the old pattern we skipped it.
+
* unposted: Src/Zle/zle_hist.c: more tweaks for failures with
isearch pattern matching.
diff --git a/Src/Zle/zle_hist.c b/Src/Zle/zle_hist.c
index be52210cc..9d4692305 100644
--- a/Src/Zle/zle_hist.c
+++ b/Src/Zle/zle_hist.c
@@ -1214,6 +1214,19 @@ doisearch(char **args, int dir, int pattern)
*/
while ((!pattern || patprog) && !nosearch) {
if (patprog) {
+ if (revert_patpos) {
+ /*
+ * Search from where the previous
+ * search started; see note above.
+ * This is down here within the loop because of
+ * the "nosearch" optimisation.
+ */
+ revert_patpos = 0;
+ dup_ok = 1;
+ he = quietgethist(hl = pat_hl);
+ zt = GETZLETEXT(he);
+ pos = pat_pos;
+ }
/*
* We are pattern matching against the current
* line. If anchored at the start, this is
@@ -1245,17 +1258,6 @@ doisearch(char **args, int dir, int pattern)
t = zt;
} else {
if (!matchlist && !skip_pos) {
- if (revert_patpos) {
- /*
- * Search from where the previous
- * search started; see note above.
- */
- revert_patpos = 0;
- dup_ok = 1;
- he = quietgethist(hl = pat_hl);
- zt = GETZLETEXT(he);
- pos = pat_pos;
- }
if (!getmatchlist(zt, patprog, &matchlist) ||
!firstnode(matchlist)) {
if (matchlist) {