mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 7.4.1945
Problem: The Man plugin doesn't work that well. Solution: Use "g:ft_man_open_mode" to be able open man pages in vert split or separate tab. Set nomodifiable for buffer with man content. Add a test. (Andrey Starodubtsev, closes #873)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
" Vim filetype plugin file
|
||||
" Language: man
|
||||
" Maintainer: SungHyun Nam <goweol@gmail.com>
|
||||
" Last Change: 2016 Feb 04
|
||||
" Last Change: 2016 Jun 20
|
||||
|
||||
" To make the ":Man" command available before editing a manual page, source
|
||||
" this script from your startup vimrc file.
|
||||
@@ -150,7 +150,17 @@ func <SID>GetPage(...)
|
||||
endwhile
|
||||
endif
|
||||
if &filetype != "man"
|
||||
new
|
||||
if exists("g:ft_man_open_mode")
|
||||
if g:ft_man_open_mode == "vert"
|
||||
vnew
|
||||
elseif g:ft_man_open_mode == "tab"
|
||||
tabnew
|
||||
else
|
||||
new
|
||||
endif
|
||||
else
|
||||
new
|
||||
endif
|
||||
setl nonu fdc=0
|
||||
endif
|
||||
endif
|
||||
@@ -160,10 +170,15 @@ func <SID>GetPage(...)
|
||||
|
||||
setl ma nonu nornu nofen
|
||||
silent exec "norm 1GdG"
|
||||
let unsetwidth = 0
|
||||
if empty($MANWIDTH)
|
||||
let $MANWIDTH = winwidth(0)
|
||||
let unsetwidth = 1
|
||||
endif
|
||||
silent exec "r!/usr/bin/man ".s:GetCmdArg(sect, page)." | col -b"
|
||||
if unsetwidth
|
||||
let $MANWIDTH = ''
|
||||
endif
|
||||
" Remove blank lines from top and bottom.
|
||||
while getline(1) =~ '^\s*$'
|
||||
silent keepj norm ggdd
|
||||
@@ -175,6 +190,7 @@ func <SID>GetPage(...)
|
||||
setl ft=man nomod
|
||||
setl bufhidden=hide
|
||||
setl nobuflisted
|
||||
setl noma
|
||||
endfunc
|
||||
|
||||
func <SID>PopPage()
|
||||
@@ -195,4 +211,4 @@ endfunc
|
||||
|
||||
endif
|
||||
|
||||
" vim: set sw=2:
|
||||
" vim: set sw=2 ts=8 noet:
|
||||
|
@@ -175,6 +175,7 @@ NEW_TESTS = test_arglist.res \
|
||||
test_increment.res \
|
||||
test_json.res \
|
||||
test_langmap.res \
|
||||
test_man.res \
|
||||
test_matchadd_conceal.res \
|
||||
test_packadd.res \
|
||||
test_perl.res \
|
||||
|
59
src/testdir/test_man.vim
Normal file
59
src/testdir/test_man.vim
Normal file
@@ -0,0 +1,59 @@
|
||||
runtime ftplugin/man.vim
|
||||
|
||||
function Test_g_ft_man_open_mode()
|
||||
let l:w = winwidth(1)
|
||||
vnew
|
||||
let l:h = winheight(1)
|
||||
q
|
||||
|
||||
" split horizontally
|
||||
let wincnt = winnr('$')
|
||||
Man 'vim'
|
||||
if wincnt == winnr('$')
|
||||
" Vim manual page cannot be found.
|
||||
return
|
||||
endif
|
||||
call assert_equal(l:w, winwidth(1))
|
||||
call assert_true(l:h > winheight(1))
|
||||
call assert_equal(1, tabpagenr('$'))
|
||||
call assert_equal(1, tabpagenr())
|
||||
q
|
||||
|
||||
" split horizontally
|
||||
let g:ft_man_open_mode = "horz"
|
||||
Man 'vim'
|
||||
call assert_equal(l:w, winwidth(1))
|
||||
call assert_true(l:h > winheight(1))
|
||||
call assert_equal(1, tabpagenr('$'))
|
||||
call assert_equal(1, tabpagenr())
|
||||
q
|
||||
|
||||
" split vertically
|
||||
let g:ft_man_open_mode = "vert"
|
||||
Man 'vim'
|
||||
call assert_true(l:w > winwidth(1))
|
||||
call assert_equal(l:h, winheight(1))
|
||||
call assert_equal(1, tabpagenr('$'))
|
||||
call assert_equal(1, tabpagenr())
|
||||
q
|
||||
|
||||
" separate tab
|
||||
let g:ft_man_open_mode = "tab"
|
||||
Man 'vim'
|
||||
call assert_equal(l:w, winwidth(1))
|
||||
call assert_equal(l:h, winheight(1))
|
||||
call assert_equal(2, tabpagenr('$'))
|
||||
call assert_equal(2, tabpagenr())
|
||||
q
|
||||
endfunction
|
||||
|
||||
function Test_nomodifiable()
|
||||
let wincnt = winnr('$')
|
||||
Man 'vim'
|
||||
if wincnt == winnr('$')
|
||||
" Vim manual page cannot be found.
|
||||
return
|
||||
endif
|
||||
call assert_false(&l:modifiable)
|
||||
q
|
||||
endfunction
|
@@ -753,6 +753,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1945,
|
||||
/**/
|
||||
1944,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user