From: Ciro Santilli 六四事件 法轮功 <ciro.santilli@gmail.com>
Date: Mon, 4 May 2015 14:14:30 +0000 (+0200)
Subject: Allow users to disable individual maps with hasmapto checks
X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/21e96cbe9b8e6ea61b11709fff11e4d42a82ce16

Allow users to disable individual maps with hasmapto checks
---

diff --git a/README.md b/README.md
index 5ba457d..894037a 100644
--- a/README.md
+++ b/README.md
@@ -125,6 +125,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`:
diff --git a/ftplugin/mkd.vim b/ftplugin/mkd.vim
index 6e04bd2..d67864a 100644
--- a/ftplugin/mkd.vim
+++ b/ftplugin/mkd.vim
@@ -510,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')
@@ -519,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>)