aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pilling <robpilling@gmail.com>2019-10-24 20:48:18 +0100
committerRob Pilling <robpilling@gmail.com>2019-10-24 22:15:57 +0100
commit2f0412e61d3c5113f9c121283a7e94a294706387 (patch)
tree19db2ae77aa82fe92159014a9da114fb35bed885
parent63f0ca326322376271c68f51cf8908daad524339 (diff)
downloadrneovim-2f0412e61d3c5113f9c121283a7e94a294706387.tar.gz
rneovim-2f0412e61d3c5113f9c121283a7e94a294706387.tar.bz2
rneovim-2f0412e61d3c5113f9c121283a7e94a294706387.zip
man.vim: `:Man` preserves the tag stack
-rw-r--r--runtime/autoload/man.vim35
1 files changed, 26 insertions, 9 deletions
diff --git a/runtime/autoload/man.vim b/runtime/autoload/man.vim
index 8825719ec7..9280474516 100644
--- a/runtime/autoload/man.vim
+++ b/runtime/autoload/man.vim
@@ -64,8 +64,9 @@ function! man#open_page(count, count1, mods, ...) abort
return
endtry
- call s:push_tag()
- let bufname = 'man://'.name.(empty(sect)?'':'('.sect.')')
+ let fullname = name.(empty(sect)?'':'('.sect.')')
+ call s:push_tag(fullname)
+ let bufname = 'man://'.fullname
try
set eventignore+=BufReadCmd
@@ -254,14 +255,30 @@ function! s:verify_exists(sect, name) abort
return s:extract_sect_and_name_path(path) + [path]
endfunction
-let s:tag_stack = []
+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,
+ \ }]
-function! s:push_tag() abort
- let s:tag_stack += [{
- \ 'buf': bufnr('%'),
- \ 'lnum': line('.'),
- \ 'col': col('.'),
- \ }]
+ call settagstack(winnr, {
+ \ 'length': len(newstack),
+ \ 'items': newstack,
+ \ })
endfunction
" extracts the name and sect out of 'path/name.sect'