Patch 7.4.397
Problem:    Matchparen only uses the topmost syntax item.
Solution:   Go through the syntax stack to find items. (James McCoy)
            Also use getcurpos() when possible.
Files:      runtime/plugin/matchparen.vim


*** ../vim-7.4.396/runtime/plugin/matchparen.vim        2014-06-17 
17:48:21.772628007 +0200
--- runtime/plugin/matchparen.vim       2014-08-06 19:02:04.967128364 +0200
***************
*** 1,6 ****
  " Vim plugin for showing matching parens
  " Maintainer:  Bram Moolenaar <[email protected]>
! " Last Change: 2014 Jun 17
  
  " Exit quickly when:
  " - this plugin was already loaded (or disabled)
--- 1,6 ----
  " Vim plugin for showing matching parens
  " Maintainer:  Bram Moolenaar <[email protected]>
! " Last Change: 2014 Jul 19
  
  " Exit quickly when:
  " - this plugin was already loaded (or disabled)
***************
*** 54,67 ****
    let c_col = col('.')
    let before = 0
  
!   let c = getline(c_lnum)[c_col - 1]
    let plist = split(&matchpairs, '.\zs[:,]')
    let i = index(plist, c)
    if i < 0
      " not found, in Insert mode try character before the cursor
      if c_col > 1 && (mode() == 'i' || mode() == 'R')
        let before = 1
!       let c = getline(c_lnum)[c_col - 2]
        let i = index(plist, c)
      endif
      if i < 0
--- 54,68 ----
    let c_col = col('.')
    let before = 0
  
!   let text = getline(c_lnum)
!   let c = text[c_col - 1]
    let plist = split(&matchpairs, '.\zs[:,]')
    let i = index(plist, c)
    if i < 0
      " not found, in Insert mode try character before the cursor
      if c_col > 1 && (mode() == 'i' || mode() == 'R')
        let before = 1
!       let c = text[c_col - 2]
        let i = index(plist, c)
      endif
      if i < 0
***************
*** 87,100 ****
    " Find the match.  When it was just before the cursor move it there for a
    " moment.
    if before > 0
!     let save_cursor = winsaveview()
      call cursor(c_lnum, c_col - before)
    endif
  
!   " When not in a string or comment ignore matches inside them.
    " We match "escape" for special items, such as lispEscapeSpecial.
!   let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
!       \ '=~?  "string\\|character\\|singlequote\\|escape\\|comment"'
    execute 'if' s_skip '| let s_skip = 0 | endif'
  
    " Limit the search to lines visible in the window.
--- 88,114 ----
    " Find the match.  When it was just before the cursor move it there for a
    " moment.
    if before > 0
!     let has_getcurpos = exists("*getcurpos")
!     if has_getcurpos
!       " getcurpos() is more efficient but doesn't exist before 7.4.313.
!       let save_cursor = getcurpos()
!     else
!       let save_cursor = winsaveview()
!     endif
      call cursor(c_lnum, c_col - before)
    endif
  
!   " Build an expression that detects whether the current cursor position is in
!   " certain syntax types (string, comment, etc.), for use as searchpairpos()'s
!   " skip argument.
    " We match "escape" for special items, such as lispEscapeSpecial.
!   let s_skip = '!empty(filter(map(synstack(line("."), col(".")), 
''synIDattr(v:val, "name")''), ' .
!       \ '''v:val =~? 
"string\\|character\\|singlequote\\|escape\\|comment"''))'
!   " If executing the expression determines that the cursor is currently in
!   " one of the syntax types, then we want searchpairpos() to find the pair
!   " within those syntax types (i.e., not skip).  Otherwise, the cursor is
!   " outside of the syntax types and s_skip should keep its value so we skip 
any
!   " matching pair inside the syntax types.
    execute 'if' s_skip '| let s_skip = 0 | endif'
  
    " Limit the search to lines visible in the window.
***************
*** 147,153 ****
    endtry
  
    if before > 0
!     call winrestview(save_cursor)
    endif
  
    " If a match is found setup match highlighting.
--- 161,171 ----
    endtry
  
    if before > 0
!     if has_getcurpos
!       call setpos('.', save_cursor)
!     else
!       call winrestview(save_cursor)
!     endif
    endif
  
    " If a match is found setup match highlighting.
*** ../vim-7.4.396/src/version.c        2014-08-06 18:17:03.475147780 +0200
--- src/version.c       2014-08-06 19:06:44.627126354 +0200
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     397,
  /**/

-- 
Often you're less important than your furniture.  If you think about it, you
can get fired but your furniture stays behind, gainfully employed at the
company that didn't need _you_ anymore.
                                (Scott Adams - The Dilbert principle)

 /// Bram Moolenaar -- [email protected] -- 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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui