]> git.madduck.net Git - etc/vim.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Merge pull request #193 from cirosantilli/toc
authorCiro Santilli 六四事件 法轮功 <ciro.santilli@gmail.com>
Mon, 4 May 2015 14:24:39 +0000 (16:24 +0200)
committerCiro Santilli 六四事件 法轮功 <ciro.santilli@gmail.com>
Mon, 4 May 2015 14:24:39 +0000 (16:24 +0200)
Add TOC to README

README.md
ftplugin/mkd.vim
test/map.vader
test/vimrc

index 2ba542920fbcbe5ecfaea75e53e9f48913480168..fc3052aa287412b36d5fc58410f90e3481d61c46 100644 (file)
--- a/README.md
+++ b/README.md
@@ -132,6 +132,14 @@ The following work on normal and visual modes:
 
 -   `]u`: go to parent header (Up). `<Plug>Markdown_MoveToParentHeader`
 
+This plugging follows the recommended Vim plugin mapping interface, so if you want to change the map `]u` to `asdf`, add to your `.vimrc`:
+
+    map asdf <Plug>Markdown_MoveToParentHeader
+
+To disable a map, use:
+
+    map <Plug> <Plug>Markdown_MoveToParentHeader
+
 ## Commands
 
 -   `:HeaderDecrease`:
index 05316ab1c26c4113247cc2cbb0fc3a4b81700e17..d67864aad717d3371cfe36be0d8f0603b927cca9 100644 (file)
@@ -464,14 +464,12 @@ endfunction
 " - a string with the the URL for the link under the cursor
 " - an empty string if the cursor is not on a link
 "
-" `b:` instead of `s:` to make it testable.
-"
 " TODO
 "
 " - multiline support
 " - give an error if the separator does is not on a link
 "
-function! b:Markdown_GetUrlForPosition(lnum, col)
+function! s:Markdown_GetUrlForPosition(lnum, col)
     let l:lnum = a:lnum
     let l:col = a:col
     let l:syn = synIDattr(synID(l:lnum, l:col, 1), 'name')
@@ -504,7 +502,7 @@ endfunction
 " Front end for GetUrlForPosition.
 "
 function! s:OpenUrlUnderCursor()
-    let l:url = b:Markdown_GetUrlForPosition(line('.'), col('.'))
+    let l:url = s:Markdown_GetUrlForPosition(line('.'), col('.'))
     if l:url != ''
         call netrw#NetrwBrowseX(l:url, 0)
     else
@@ -512,6 +510,13 @@ function! s:OpenUrlUnderCursor()
     endif
 endfunction
 
+function! s:MapNotHasmapto(lhs, rhs)
+    if !hasmapto('<Plug>' . a:rhs)
+        execute 'nmap <buffer>' . a:lhs . ' <Plug>' . a:rhs
+        execute 'vmap <buffer>' . a:lhs . ' <Plug>' . a:rhs
+    endif
+endfunction
+
 call <sid>MapNormVis('<Plug>Markdown_MoveToNextHeader', '<sid>MoveToNextHeader')
 call <sid>MapNormVis('<Plug>Markdown_MoveToPreviousHeader', '<sid>MoveToPreviousHeader')
 call <sid>MapNormVis('<Plug>Markdown_MoveToNextSiblingHeader', '<sid>MoveToNextSiblingHeader')
@@ -521,20 +526,13 @@ call <sid>MapNormVis('<Plug>Markdown_MoveToCurHeader', '<sid>MoveToCurHeader')
 nnoremap <Plug>Markdown_OpenUrlUnderCursor :call <sid>OpenUrlUnderCursor()<cr>
 
 if !get(g:, 'vim_markdown_no_default_key_mappings', 0)
-    nmap <buffer> ]] <Plug>Markdown_MoveToNextHeader
-    nmap <buffer> [[ <Plug>Markdown_MoveToPreviousHeader
-    nmap <buffer> ][ <Plug>Markdown_MoveToNextSiblingHeader
-    nmap <buffer> [] <Plug>Markdown_MoveToPreviousSiblingHeader
-    nmap <buffer> ]u <Plug>Markdown_MoveToParentHeader
-    nmap <buffer> ]c <Plug>Markdown_MoveToCurHeader
-    nmap <buffer> gx <Plug>Markdown_OpenUrlUnderCursor
-
-    vmap <buffer> ]] <Plug>Markdown_MoveToNextHeader
-    vmap <buffer> [[ <Plug>Markdown_MoveToPreviousHeader
-    vmap <buffer> ][ <Plug>Markdown_MoveToNextSiblingHeader
-    vmap <buffer> [] <Plug>Markdown_MoveToPreviousSiblingHeader
-    vmap <buffer> ]u <Plug>Markdown_MoveToParentHeader
-    vmap <buffer> ]c <Plug>Markdown_MoveToCurHeader
+    call <sid>MapNotHasmapto(']]', 'Markdown_MoveToNextHeader')
+    call <sid>MapNotHasmapto('[[', 'Markdown_MoveToPreviousHeader')
+    call <sid>MapNotHasmapto('][', 'Markdown_MoveToNextSiblingHeader')
+    call <sid>MapNotHasmapto('[]', 'Markdown_MoveToPreviousSiblingHeader')
+    call <sid>MapNotHasmapto(']u', 'Markdown_MoveToParentHeader')
+    call <sid>MapNotHasmapto(']c', 'Markdown_MoveToCurHeader')
+    call <sid>MapNotHasmapto('gx', 'Markdown_OpenUrlUnderCursor')
 endif
 
 command! -buffer -range=% HeaderDecrease call s:HeaderDecrease(<line1>, <line2>)
index 51bde78b4e12bde8d98518347b84d3f85e726ee2..ea96182088c3489a03c005f282134e14eef5da43 100644 (file)
@@ -4,11 +4,12 @@ a <http://b> c
 Execute (gx autolink):
   let b:url = 'http://b'
   let b:line = getline(1)
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'a') + 1), ''
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, '<') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'h') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, '>') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'c') + 1), ''
+  let b:func = Markdown_GetFunc('vim-markdown/ftplugin/mkd.vim', 'Markdown_GetUrlForPosition')
+  AssertEqual b:func(1, match(b:line, 'a') + 1), ''
+  AssertEqual b:func(1, match(b:line, '<') + 1), b:url
+  AssertEqual b:func(1, match(b:line, 'h') + 1), b:url
+  AssertEqual b:func(1, match(b:line, '>') + 1), b:url
+  AssertEqual b:func(1, match(b:line, 'c') + 1), ''
 
 Given mkd;
 a http://b.bb c
@@ -16,9 +17,10 @@ a http://b.bb c
 Execute (gx implicit autolink):
   let b:url = 'http://b.bb'
   let b:line = getline(1)
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'a') + 1), ''
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'h') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'c') + 1), ''
+  let b:func = Markdown_GetFunc('vim-markdown/ftplugin/mkd.vim', 'Markdown_GetUrlForPosition')
+  AssertEqual b:func(1, match(b:line, 'a') + 1), ''
+  AssertEqual b:func(1, match(b:line, 'h') + 1), b:url
+  AssertEqual b:func(1, match(b:line, 'c') + 1), ''
 
 Given mkd;
 [a]: http://b "c"
@@ -26,10 +28,11 @@ Given mkd;
 Execute (gx link reference definition):
   let b:url = 'http://b'
   let b:line = getline(1)
+  let b:func = Markdown_GetFunc('vim-markdown/ftplugin/mkd.vim', 'Markdown_GetUrlForPosition')
   " TODO would be cool if all of the following gave the link.
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'a') + 1), ''
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'h') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'c') + 1), ''
+  AssertEqual b:func(1, match(b:line, 'a') + 1), ''
+  AssertEqual b:func(1, match(b:line, 'h') + 1), b:url
+  AssertEqual b:func(1, match(b:line, 'c') + 1), ''
 
 Given mkd;
 a [b](c) d
@@ -37,14 +40,15 @@ a [b](c) d
 Execute (gx autolink):
   let b:url = 'c'
   let b:line = getline(1)
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'a') + 1), ''
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, '[') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'b') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, ']') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, '(') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'c') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, ')') + 1), b:url
-  AssertEqual b:Markdown_GetUrlForPosition(1, match(b:line, 'd') + 1), ''
+  let b:func = Markdown_GetFunc('vim-markdown/ftplugin/mkd.vim', 'Markdown_GetUrlForPosition')
+  AssertEqual b:func(1, match(b:line, 'a') + 1), ''
+  AssertEqual b:func(1, match(b:line, '[') + 1), b:url
+  AssertEqual b:func(1, match(b:line, 'b') + 1), b:url
+  AssertEqual b:func(1, match(b:line, ']') + 1), b:url
+  AssertEqual b:func(1, match(b:line, '(') + 1), b:url
+  AssertEqual b:func(1, match(b:line, 'c') + 1), b:url
+  AssertEqual b:func(1, match(b:line, ')') + 1), b:url
+  AssertEqual b:func(1, match(b:line, 'd') + 1), ''
 
 Given mkd;
 # a
index 86020ed369bdddc52f69f5a01df0b0801c390dc4..44df1b6140b309adbe1c80ce40a0ac9e9714a428 100644 (file)
@@ -6,3 +6,19 @@ filetype on
 filetype plugin on
 filetype indent on
 syntax on
+
+function! Markdown_GetScriptID(fname) abort
+    let a:snlist = ''
+    redir => a:snlist
+    silent! scriptnames
+    redir END
+    let a:mx = '^\s*\(\d\+\):\s*\(.*\)$'
+    for a:line in split(a:snlist, "\n")
+        if stridx(a:line, a:fname) >= 0
+            return substitute(a:line, a:mx, '\1', '')
+        endif
+    endfor
+endfunction
+function! Markdown_GetFunc(fname, funcname) abort
+    return function('<SNR>' . Markdown_GetScriptID(a:fname) . '_' . a:funcname)
+endfunction