Patch 7.4.636
Problem:    A search with end offset gets stuck at end of file. (Gary Johnson)
Solution:   When a search doesn't move the cursor repeat it with a higher
            count. (Christian Brabandt)
Files:      src/normal.c, src/testdir/test44.in, src/testdir/test44.ok


*** ../vim-7.4.635/src/normal.c 2015-01-27 20:59:26.496971751 +0100
--- src/normal.c        2015-02-17 15:43:29.216732977 +0100
***************
*** 100,106 ****
  static void   nv_dollar __ARGS((cmdarg_T *cap));
  static void   nv_search __ARGS((cmdarg_T *cap));
  static void   nv_next __ARGS((cmdarg_T *cap));
! static void   normal_search __ARGS((cmdarg_T *cap, int dir, char_u *pat, int 
opt));
  static void   nv_csearch __ARGS((cmdarg_T *cap));
  static void   nv_brackets __ARGS((cmdarg_T *cap));
  static void   nv_percent __ARGS((cmdarg_T *cap));
--- 100,106 ----
  static void   nv_dollar __ARGS((cmdarg_T *cap));
  static void   nv_search __ARGS((cmdarg_T *cap));
  static void   nv_next __ARGS((cmdarg_T *cap));
! static int    normal_search __ARGS((cmdarg_T *cap, int dir, char_u *pat, int 
opt));
  static void   nv_csearch __ARGS((cmdarg_T *cap));
  static void   nv_brackets __ARGS((cmdarg_T *cap));
  static void   nv_percent __ARGS((cmdarg_T *cap));
***************
*** 5765,5771 ****
        init_history();
        add_to_history(HIST_SEARCH, buf, TRUE, NUL);
  #endif
!       normal_search(cap, cmdchar == '*' ? '/' : '?', buf, 0);
      }
      else
        do_cmdline_cmd(buf);
--- 5765,5771 ----
        init_history();
        add_to_history(HIST_SEARCH, buf, TRUE, NUL);
  #endif
!       (void)normal_search(cap, cmdchar == '*' ? '/' : '?', buf, 0);
      }
      else
        do_cmdline_cmd(buf);
***************
*** 6301,6307 ****
        return;
      }
  
!     normal_search(cap, cap->cmdchar, cap->searchbuf,
                                                (cap->arg ? 0 : SEARCH_MARK));
  }
  
--- 6301,6307 ----
        return;
      }
  
!     (void)normal_search(cap, cap->cmdchar, cap->searchbuf,
                                                (cap->arg ? 0 : SEARCH_MARK));
  }
  
***************
*** 6313,6326 ****
  nv_next(cap)
      cmdarg_T  *cap;
  {
!     normal_search(cap, 0, NULL, SEARCH_MARK | cap->arg);
  }
  
  /*
   * Search for "pat" in direction "dir" ('/' or '?', 0 for repeat).
   * Uses only cap->count1 and cap->oap from "cap".
   */
!     static void
  normal_search(cap, dir, pat, opt)
      cmdarg_T  *cap;
      int               dir;
--- 6313,6338 ----
  nv_next(cap)
      cmdarg_T  *cap;
  {
!     pos_T old = curwin->w_cursor;
!     int   i = normal_search(cap, 0, NULL, SEARCH_MARK | cap->arg);
! 
!     if (i == 1 && equalpos(old, curwin->w_cursor))
!     {
!       /* Avoid getting stuck on the current cursor position, which can
!        * happen when an offset is given and the cursor is on the last char
!        * in the buffer: Repeat with count + 1. */
!       cap->count1 += 1;
!       (void)normal_search(cap, 0, NULL, SEARCH_MARK | cap->arg);
!       cap->count1 -= 1;
!     }
  }
  
  /*
   * Search for "pat" in direction "dir" ('/' or '?', 0 for repeat).
   * Uses only cap->count1 and cap->oap from "cap".
+  * Return 0 for failure, 1 for found, 2 for found and line offset added.
   */
!     static int
  normal_search(cap, dir, pat, opt)
      cmdarg_T  *cap;
      int               dir;
***************
*** 6354,6359 ****
--- 6366,6372 ----
      /* "/$" will put the cursor after the end of the line, may need to
       * correct that here */
      check_cursor();
+     return i;
  }
  
  /*
*** ../vim-7.4.635/src/testdir/test44.in        2013-09-19 17:00:14.000000000 
+0200
--- src/testdir/test44.in       2015-02-17 15:39:42.387675976 +0100
***************
*** 42,47 ****
--- 42,53 ----
  :put =matchstr(\"אבגד\", \"..\", 0, 2) " בג
  :put =matchstr(\"אבגד\", \".\", 0, 0) " א
  :put =matchstr(\"אבגד\", \".\", 4, -1) " ג
+ :new
+ :$put =['dog(a', 'cat(']
+ /(/e+
+ "ayn:bd!
+ :$put =''
+ G"ap
  :w!
  :qa!
  ENDTEST
*** ../vim-7.4.635/src/testdir/test44.ok        2013-05-26 14:16:28.000000000 
+0200
--- src/testdir/test44.ok       2015-02-17 15:31:20.586185997 +0100
***************
*** 22,24 ****
--- 22,26 ----
  בג
  א
  ג
+ a
+ cat(
*** ../vim-7.4.635/src/version.c        2015-02-17 14:15:13.005523167 +0100
--- src/version.c       2015-02-17 15:32:53.024986843 +0100
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     636,
  /**/

-- 
Marriage isn't a word.  It's a sentence.

 /// Bram Moolenaar -- b...@moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to