From b2ced3b0ed752af0af67c97bee16e04bdd7d0675 Mon Sep 17 00:00:00 2001 From: Ernst Widerberg Date: Sat, 28 May 2022 22:06:35 +0200 Subject: [PATCH 1/4] Add tests for ge fallback, when not on markdown link --- test/map.vader | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/test/map.vader b/test/map.vader index 57fe6190..3ad50b63 100644 --- a/test/map.vader +++ b/test/map.vader @@ -89,6 +89,41 @@ Execute (ge auto-write before opening file): AssertEqual g:vader_exception, 'Vim(write):E382: Cannot write, ''buftype'' option is set' unlet g:vim_markdown_autowrite +Given markdown; +ge_test.md + +Execute (ge falls back to edit when not on a markdown link): + normal ge + AssertEqual @%, 'ge_test.md' + AssertEqual getline(1), 'ge test' + +Given markdown; + +Execute (ge falls back to edit which throws if cursor is not on a link): + " TODO: Fix this to be consistent with gx + AssertThrows normal ge + AssertEqual g:vader_exception, 'Vim(edit):E446: No file name under cursor' + +Given markdown; +ge_test + +Execute (ge fallback does not respect g:vim_markdown_no_extensions_in_markdown): + let g:vim_markdown_no_extensions_in_markdown = 1 + normal ge + AssertEqual @%, 'ge_test' + unlet g:vim_markdown_no_extensions_in_markdown + +Given markdown; +ge_test.md + +Execute (ge fallback does not respect g:vim_markdown_autowrite): + " TODO: Fix this + let g:vim_markdown_autowrite = 1 + normal ia + normal l + normal ge " this would throw if file write was attempted + unlet g:vim_markdown_autowrite + Given markdown; # a From fb6af67e5f08551ecb0a81d1e8a3b19254d0ab15 Mon Sep 17 00:00:00 2001 From: Ernst Widerberg Date: Sat, 28 May 2022 21:27:16 +0200 Subject: [PATCH 2/4] Replace long if/else with short if + return --- ftplugin/markdown.vim | 65 ++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 5e402269..0e82e02b 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -681,41 +681,44 @@ if !exists('*s:EditUrlUnderCursor') let l:editmethod = 'edit' endif let l:url = s:Markdown_GetUrlForPosition(line('.'), col('.')) - if l:url !=# '' - if get(g:, 'vim_markdown_autowrite', 0) - write - endif - let l:anchor = '' - if get(g:, 'vim_markdown_follow_anchor', 0) - let l:parts = split(l:url, '#', 1) - if len(l:parts) == 2 - let [l:url, l:anchor] = parts - let l:anchorexpr = get(g:, 'vim_markdown_anchorexpr', '') - if l:anchorexpr !=# '' - let l:anchor = eval(substitute( - \ l:anchorexpr, 'v:anchor', - \ escape('"'.l:anchor.'"', '"'), '')) - endif + + " fallback if cursor is not on a markdown link + if l:url ==# '' + execute l:editmethod . ' ' + return + endif + + if get(g:, 'vim_markdown_autowrite', 0) + write + endif + let l:anchor = '' + if get(g:, 'vim_markdown_follow_anchor', 0) + let l:parts = split(l:url, '#', 1) + if len(l:parts) == 2 + let [l:url, l:anchor] = parts + let l:anchorexpr = get(g:, 'vim_markdown_anchorexpr', '') + if l:anchorexpr !=# '' + let l:anchor = eval(substitute( + \ l:anchorexpr, 'v:anchor', + \ escape('"'.l:anchor.'"', '"'), '')) endif endif - if l:url !=# '' - let l:ext = '' - if get(g:, 'vim_markdown_no_extensions_in_markdown', 0) - " use another file extension if preferred - if exists('g:vim_markdown_auto_extension_ext') - let l:ext = '.'.g:vim_markdown_auto_extension_ext - else - let l:ext = '.md' - endif + endif + if l:url !=# '' + let l:ext = '' + if get(g:, 'vim_markdown_no_extensions_in_markdown', 0) + " use another file extension if preferred + if exists('g:vim_markdown_auto_extension_ext') + let l:ext = '.'.g:vim_markdown_auto_extension_ext + else + let l:ext = '.md' endif - let l:url = fnameescape(fnamemodify(expand('%:h').'/'.l:url.l:ext, ':.')) - execute l:editmethod l:url - endif - if l:anchor !=# '' - silent! execute '/'.l:anchor endif - else - execute l:editmethod . ' ' + let l:url = fnameescape(fnamemodify(expand('%:h').'/'.l:url.l:ext, ':.')) + execute l:editmethod l:url + endif + if l:anchor !=# '' + silent! execute '/'.l:anchor endif endfunction endif From 2fe9c41428fff3f1a5eaaa995c794137157efbd3 Mon Sep 17 00:00:00 2001 From: Ernst Widerberg Date: Sat, 28 May 2022 21:28:35 +0200 Subject: [PATCH 3/4] Remove redundant if --- ftplugin/markdown.vim | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 0e82e02b..6a7535c5 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -704,19 +704,19 @@ if !exists('*s:EditUrlUnderCursor') endif endif endif - if l:url !=# '' - let l:ext = '' - if get(g:, 'vim_markdown_no_extensions_in_markdown', 0) - " use another file extension if preferred - if exists('g:vim_markdown_auto_extension_ext') - let l:ext = '.'.g:vim_markdown_auto_extension_ext - else - let l:ext = '.md' - endif + + let l:ext = '' + if get(g:, 'vim_markdown_no_extensions_in_markdown', 0) + " use another file extension if preferred + if exists('g:vim_markdown_auto_extension_ext') + let l:ext = '.'.g:vim_markdown_auto_extension_ext + else + let l:ext = '.md' endif - let l:url = fnameescape(fnamemodify(expand('%:h').'/'.l:url.l:ext, ':.')) - execute l:editmethod l:url endif + let l:url = fnameescape(fnamemodify(expand('%:h').'/'.l:url.l:ext, ':.')) + execute l:editmethod l:url + if l:anchor !=# '' silent! execute '/'.l:anchor endif From 0fb3e1f5acdb1f543ca1d57e31074581fd49cc83 Mon Sep 17 00:00:00 2001 From: Ernst Widerberg Date: Sat, 28 May 2022 21:33:11 +0200 Subject: [PATCH 4/4] Split into clearer steps, add comments --- ftplugin/markdown.vim | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 6a7535c5..a66dbef9 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -664,8 +664,10 @@ endfunction " script while this function is running. We must not replace it. if !exists('*s:EditUrlUnderCursor') function s:EditUrlUnderCursor() - let l:editmethod = '' + let l:url = s:Markdown_GetUrlForPosition(line('.'), col('.')) + " determine how to open the linked file (split, tab, etc) + let l:editmethod = '' if exists('g:vim_markdown_edit_url_in') if g:vim_markdown_edit_url_in ==# 'tab' let l:editmethod = 'tabnew' @@ -680,7 +682,6 @@ if !exists('*s:EditUrlUnderCursor') " default to current buffer let l:editmethod = 'edit' endif - let l:url = s:Markdown_GetUrlForPosition(line('.'), col('.')) " fallback if cursor is not on a markdown link if l:url ==# '' @@ -691,6 +692,8 @@ if !exists('*s:EditUrlUnderCursor') if get(g:, 'vim_markdown_autowrite', 0) write endif + + " parse anchor let l:anchor = '' if get(g:, 'vim_markdown_follow_anchor', 0) let l:parts = split(l:url, '#', 1) @@ -705,6 +708,7 @@ if !exists('*s:EditUrlUnderCursor') endif endif + " add file extension let l:ext = '' if get(g:, 'vim_markdown_no_extensions_in_markdown', 0) " use another file extension if preferred @@ -715,8 +719,8 @@ if !exists('*s:EditUrlUnderCursor') endif endif let l:url = fnameescape(fnamemodify(expand('%:h').'/'.l:url.l:ext, ':.')) - execute l:editmethod l:url + execute l:editmethod l:url if l:anchor !=# '' silent! execute '/'.l:anchor endif