Loading ...
Sorry, an error occurred while loading the content.

Patch 7.3.1275

Expand Messages
  • Bram Moolenaar
    Patch 7.3.1275 Problem: gn does not work when the match is a single character. Solution: Fix it, add a test. (Christian Brabandt) Files:
    Message 1 of 1 , Jun 30, 2013
    • 0 Attachment
      Patch 7.3.1275
      Problem: "gn" does not work when the match is a single character.
      Solution: Fix it, add a test. (Christian Brabandt)
      Files: src/search.c, src/testdir/test53.in, src/testdir/test53.ok


      *** ../vim-7.3.1274/src/search.c 2013-06-08 18:19:40.000000000 +0200
      --- src/search.c 2013-06-30 14:41:48.000000000 +0200
      ***************
      *** 4489,4495 ****
      #endif /* FEAT_TEXTOBJ */

      #if defined(FEAT_VISUAL) || defined(PROTO)
      ! static int is_zerowidth __ARGS((char_u *pattern));

      /*
      * Find next search match under cursor, cursor at end.
      --- 4489,4495 ----
      #endif /* FEAT_TEXTOBJ */

      #if defined(FEAT_VISUAL) || defined(PROTO)
      ! static int is_one_char __ARGS((char_u *pattern));

      /*
      * Find next search match under cursor, cursor at end.
      ***************
      *** 4510,4516 ****
      char_u old_p_ws = p_ws;
      int flags = 0;
      pos_T save_VIsual;
      ! int zerowidth = FALSE;

      /* wrapping should not occur */
      p_ws = FALSE;
      --- 4510,4516 ----
      char_u old_p_ws = p_ws;
      int flags = 0;
      pos_T save_VIsual;
      ! int one_char;

      /* wrapping should not occur */
      p_ws = FALSE;
      ***************
      *** 4540,4548 ****
      orig_pos = pos = start_pos = curwin->w_cursor;

      /* Is the pattern is zero-width? */
      ! zerowidth = is_zerowidth(spats[last_idx].pat);
      ! if (zerowidth == -1)
      ! return FAIL;

      /*
      * The trick is to first search backwards and then search forward again,
      --- 4540,4548 ----
      orig_pos = pos = start_pos = curwin->w_cursor;

      /* Is the pattern is zero-width? */
      ! one_char = is_one_char(spats[last_idx].pat);
      ! if (one_char == -1)
      ! return FAIL; /* invalid pattern */

      /*
      * The trick is to first search backwards and then search forward again,
      ***************
      *** 4557,4563 ****
      dir = !i;

      flags = 0;
      ! if (!dir && !zerowidth)
      flags = SEARCH_END;

      result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
      --- 4557,4563 ----
      dir = !i;

      flags = 0;
      ! if (!dir && !one_char)
      flags = SEARCH_END;

      result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
      ***************
      *** 4598,4604 ****

      /* move to match, except for zero-width matches, in which case, we are
      * already on the next match */
      ! if (!zerowidth)
      result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
      spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);

      --- 4598,4604 ----

      /* move to match, except for zero-width matches, in which case, we are
      * already on the next match */
      ! if (!one_char)
      result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
      spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);

      ***************
      *** 4645,4655 ****
      }

      /*
      ! * Check if the pattern is zero-width.
      * Returns TRUE, FALSE or -1 for failure.
      */
      static int
      ! is_zerowidth(pattern)
      char_u *pattern;
      {
      regmmatch_T regmatch;
      --- 4645,4655 ----
      }

      /*
      ! * Check if the pattern is one character or zero-width.
      * Returns TRUE, FALSE or -1 for failure.
      */
      static int
      ! is_one_char(pattern)
      char_u *pattern;
      {
      regmmatch_T regmatch;
      ***************
      *** 4677,4682 ****
      --- 4677,4685 ----
      result = (nmatched != 0
      && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
      && regmatch.startpos[0].col == regmatch.endpos[0].col);
      +
      + if (!result && incl(&pos) == 0 && pos.col == regmatch.endpos[0].col)
      + result = TRUE;
      }

      called_emsg |= save_called_emsg;
      *** ../vim-7.3.1274/src/testdir/test53.in 2012-10-11 03:35:38.000000000 +0200
      --- src/testdir/test53.in 2013-06-30 14:31:56.000000000 +0200
      ***************
      *** 44,50 ****
      vlgnd
      /mother
      :set selection=exclusive
      ! $cgNmongoose
      :/^start:/,/^end:/wq! test.out
      ENDTEST

      --- 44,51 ----
      vlgnd
      /mother
      :set selection=exclusive
      ! $cgNmongoose /i
      ! cgnj
      :/^start:/,/^end:/wq! test.out
      ENDTEST

      ***************
      *** 73,76 ****
      --- 74,78 ----
      delete first and last chars
      uniquepattern uniquepattern
      my very excellent mother just served us nachos
      + for (i=0; i<=10; i++)
      end:
      *** ../vim-7.3.1274/src/testdir/test53.ok 2012-10-11 03:35:38.000000000 +0200
      --- src/testdir/test53.ok 2013-06-30 14:31:56.000000000 +0200
      ***************
      *** 26,29 ****
      --- 26,30 ----
      elete first and last char
      uniquepattern
      my very excellent mongoose just served us nachos
      + for (j=0; i<=10; i++)
      end:
      *** ../vim-7.3.1274/src/version.c 2013-06-30 13:57:40.000000000 +0200
      --- src/version.c 2013-06-30 14:31:32.000000000 +0200
      ***************
      *** 730,731 ****
      --- 730,733 ----
      { /* Add new patch number below this line */
      + /**/
      + 1275,
      /**/

      --
      There are 2 kinds of people in my world: those who know Unix, Perl, Vim, GNU,
      Linux, etc, and those who know COBOL. It gets very difficult for me at
      parties, not knowing which group to socialise with :-)
      Sitaram Chamarty

      /// Bram Moolenaar -- Bram@... -- 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+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
    Your message has been successfully submitted and would be delivered to recipients shortly.