aboutsummaryrefslogtreecommitdiff
path: root/runtime/autoload/man.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/autoload/man.vim')
-rw-r--r--runtime/autoload/man.vim27
1 files changed, 23 insertions, 4 deletions
diff --git a/runtime/autoload/man.vim b/runtime/autoload/man.vim
index bac88fc99e..563180c79b 100644
--- a/runtime/autoload/man.vim
+++ b/runtime/autoload/man.vim
@@ -52,9 +52,9 @@ function! man#open_page(count, count1, mods, ...) abort
call s:push_tag()
let bufname = 'man://'.name.(empty(sect)?'':'('.sect.')')
if a:mods !~# 'tab' && s:find_man()
- noautocmd execute 'silent edit' bufname
+ noautocmd execute 'silent edit' fnameescape(bufname)
else
- noautocmd execute 'silent' a:mods 'split' bufname
+ noautocmd execute 'silent' a:mods 'split' fnameescape(bufname)
endif
let b:man_sect = sect
call s:read_page(path)
@@ -81,7 +81,7 @@ function! s:read_page(path) abort
let cmd = 'env MANPAGER=cat'.(empty($MANWIDTH) ? ' MANWIDTH='.winwidth(0) : '')
let cmd .= ' '.s:man_cmd.' '.shellescape(a:path)
silent put =system(cmd)
- " remove all the backspaced text
+ " Remove all backspaced characters.
execute 'silent keeppatterns keepjumps %substitute,.\b,,e'.(&gdefault?'':'g')
while getline(1) =~# '^\s*$'
silent keepjumps 1delete _
@@ -157,7 +157,7 @@ endfunction
function! man#pop_tag() abort
if !empty(s:tag_stack)
let tag = remove(s:tag_stack, -1)
- silent execute tag['buf'].'buffer'
+ execute 'silent' tag['buf'].'buffer'
call cursor(tag['lnum'], tag['col'])
endif
endfunction
@@ -259,3 +259,22 @@ function! s:format_candidate(path, sect) abort
return name.'('.sect.')'
endif
endfunction
+
+function! man#init_pager() abort
+ " Remove all backspaced characters.
+ execute 'silent keeppatterns keepjumps %substitute,.\b,,e'.(&gdefault?'':'g')
+ if getline(1) =~# '^\s*$'
+ silent keepjumps 1delete _
+ else
+ keepjumps 1
+ endif
+ " This is not perfect. See `man glDrawArraysInstanced`. Since the title is
+ " all caps it is impossible to tell what the original capitilization was.
+ let ref = tolower(matchstr(getline(1), '^\S\+'))
+ try
+ let b:man_sect = man#extract_sect_and_name_ref(ref)[0]
+ catch
+ let b:man_sect = ''
+ endtry
+ execute 'silent file man://'.fnameescape(ref)
+endfunction