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
|
" Vim filetype plugin file
|
||||||
" Language: man
|
" Language: man
|
||||||
" Maintainer: SungHyun Nam <goweol@gmail.com>
|
" 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
|
" To make the ":Man" command available before editing a manual page, source
|
||||||
" this script from your startup vimrc file.
|
" this script from your startup vimrc file.
|
||||||
@@ -150,7 +150,17 @@ func <SID>GetPage(...)
|
|||||||
endwhile
|
endwhile
|
||||||
endif
|
endif
|
||||||
if &filetype != "man"
|
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
|
setl nonu fdc=0
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
@@ -160,10 +170,15 @@ func <SID>GetPage(...)
|
|||||||
|
|
||||||
setl ma nonu nornu nofen
|
setl ma nonu nornu nofen
|
||||||
silent exec "norm 1GdG"
|
silent exec "norm 1GdG"
|
||||||
|
let unsetwidth = 0
|
||||||
if empty($MANWIDTH)
|
if empty($MANWIDTH)
|
||||||
let $MANWIDTH = winwidth(0)
|
let $MANWIDTH = winwidth(0)
|
||||||
|
let unsetwidth = 1
|
||||||
endif
|
endif
|
||||||
silent exec "r!/usr/bin/man ".s:GetCmdArg(sect, page)." | col -b"
|
silent exec "r!/usr/bin/man ".s:GetCmdArg(sect, page)." | col -b"
|
||||||
|
if unsetwidth
|
||||||
|
let $MANWIDTH = ''
|
||||||
|
endif
|
||||||
" Remove blank lines from top and bottom.
|
" Remove blank lines from top and bottom.
|
||||||
while getline(1) =~ '^\s*$'
|
while getline(1) =~ '^\s*$'
|
||||||
silent keepj norm ggdd
|
silent keepj norm ggdd
|
||||||
@@ -175,6 +190,7 @@ func <SID>GetPage(...)
|
|||||||
setl ft=man nomod
|
setl ft=man nomod
|
||||||
setl bufhidden=hide
|
setl bufhidden=hide
|
||||||
setl nobuflisted
|
setl nobuflisted
|
||||||
|
setl noma
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func <SID>PopPage()
|
func <SID>PopPage()
|
||||||
@@ -195,4 +211,4 @@ endfunc
|
|||||||
|
|
||||||
endif
|
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_increment.res \
|
||||||
test_json.res \
|
test_json.res \
|
||||||
test_langmap.res \
|
test_langmap.res \
|
||||||
|
test_man.res \
|
||||||
test_matchadd_conceal.res \
|
test_matchadd_conceal.res \
|
||||||
test_packadd.res \
|
test_packadd.res \
|
||||||
test_perl.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[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1945,
|
||||||
/**/
|
/**/
|
||||||
1944,
|
1944,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user