aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/autoload/man.vim50
1 files changed, 6 insertions, 44 deletions
diff --git a/runtime/autoload/man.vim b/runtime/autoload/man.vim
index 08c6fc1eca..ecbe4bb374 100644
--- a/runtime/autoload/man.vim
+++ b/runtime/autoload/man.vim
@@ -64,34 +64,22 @@ function! man#open_page(count, count1, mods, ...) abort
return
endtry
- let fullname = name.(empty(sect)?'':'('.sect.')')
- call s:push_tag(fullname)
- let bufname = 'man://'.fullname
-
+ let [l:buf, l:save_tfu] = [bufnr(), &tagfunc]
try
set eventignore+=BufReadCmd
+ set tagfunc=man#goto_tag
+ let l:target = l:name . '(' . l:sect . ')'
if a:mods !~# 'tab' && s:find_man()
- execute 'silent keepalt edit' fnameescape(bufname)
+ execute 'silent keepalt tag' l:target
else
- execute 'silent keepalt' a:mods 'split' fnameescape(bufname)
+ execute 'silent keepalt' a:mods 'stag' l:target
endif
finally
+ call setbufvar(l:buf, '&tagfunc', l:save_tfu)
set eventignore-=BufReadCmd
endtry
- try
- let page = s:get_page(path)
- catch
- if a:mods =~# 'tab' || !s:find_man()
- " a new window was opened
- close
- endif
- call s:error(v:exception)
- return
- endtry
-
let b:man_sect = sect
- call s:put_page(page)
endfunction
function! man#read_page(ref) abort
@@ -255,32 +243,6 @@ function! s:verify_exists(sect, name) abort
return s:extract_sect_and_name_path(path) + [path]
endfunction
-function! s:push_tag(name) abort
- " emulate vim's tag pushing for cases where we don't use 'tagfunc'
- if !&tagstack
- return
- endif
-
- let winnr = winnr()
- let stack = gettagstack(winnr)
-
- let curidx = stack.curidx
- let items = stack.items
-
- let newstack = items[0 : curidx - 1]
- let newstack += [{
- \ 'bufnr': bufnr('%'),
- \ 'from': getpos('.'),
- \ 'matchnr': 0,
- \ 'tagname': a:name,
- \ }]
-
- call settagstack(winnr, {
- \ 'length': len(newstack),
- \ 'items': newstack,
- \ })
-endfunction
-
" extracts the name and sect out of 'path/name.sect'
function! s:extract_sect_and_name_path(path) abort
let tail = fnamemodify(a:path, ':t')