annotate runtime/autoload/dist/man.vim @ 32837:050794aa4ef2

man.vim: Recognise hyphenated-at-eol cross-references (#12609) Commit: https://github.com/vim/vim/commit/8cfe52e6fbf44032cd40d1561e93644786b15ee7 Author: goweol <goweol@gmail.com> Date: Fri Aug 18 06:13:29 2023 +0900 man.vim: Recognise hyphenated-at-eol cross-references (https://github.com/vim/vim/issues/12609) Manual pages requested for output may undergo formatting arranged by some roff-descendant program. Lines longer than MANWIDTH or COLUMNS or real-estate width of a device (with support for horizontal scrolling considered) can be divided at either blank characters and/or at groups of word characters (syllables) according to supported hyphenation rules (although page authors are free to disable hyphenation or prevent particular words from being hyphenated). Groff?s manual describes it as follows: 5.1.2 Hyphenation Since the odds are not great for finding a set of words, for every output line, which fit nicely on a line without inserting excessive amounts of space between words, gtroff hyphenates words so that it can justify lines without inserting too much space between words. It uses an internal hyphenation algorithm (a simplified version of the algorithm used within TeX) to indicate which words can be hyphenated and how to do so. When a word is hyphenated, the first part of the word is added to the current filled line being output (with an attached hyphen), and the other portion is added to the next line to be filled. It would be expedient for autoload/dist/man.vim (along with syntax/man.vim?s highlighting and ftplugin/man.vim?s Ctrl-], \K mappings) to allow for hyphenation of cross-references to manual pages. For example, # Launch Vim [v9.0; patched: 1-1378, 1499] as follows: MANWIDTH=80 vim --not-a-term +MANPAGER '+Man man' '+/conv(1)' '+norm B' # Press Ctrl-] with cursor on _m_: "... use man? # conv(1) directly."_______________________[^] # # (Man v2.11.2) # Launch Vim as follows: MANWIDTH=80 vim --not-a-term +MANPAGER '+Man git' '+/config(1)' '+norm B' # Press Ctrl-] with cursor on _g_: "... in git- # config(1) for a more ..."_______________[^] # # (Git v2.39.2) Co-authored-by: Aliaksei Budavei <0x000c70@gmail.com>
author Christian Brabandt <cb@256bit.org>
date Thu, 17 Aug 2023 23:15:07 +0200
parents f0854888250f
children 4ae88f9389b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29236
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
1 " Vim filetype plugin autoload file
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
2 " Language: man
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
3 " Maintainer: Jason Franklin <vim@justemail.net>
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
4 " Maintainer: SungHyun Nam <goweol@gmail.com>
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
5 " Autoload Split: Bram Moolenaar
32836
f0854888250f man.vim: Uniformly place cursor at the same column with `Ctrl-t` (#12608)
Christian Brabandt <cb@256bit.org>
parents: 29236
diff changeset
6 " Last Change: 2023 Jun 28
29236
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
7
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
8 let s:cpo_save = &cpo
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
9 set cpo-=C
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
10
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
11 let s:man_tag_depth = 0
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
12
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
13 let s:man_sect_arg = ""
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
14 let s:man_find_arg = "-w"
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
15 try
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
16 if !has("win32") && $OSTYPE !~ 'cygwin\|linux' && system('uname -s') =~ "SunOS" && system('uname -r') =~ "^5"
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
17 let s:man_sect_arg = "-s"
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
18 let s:man_find_arg = "-l"
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
19 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
20 catch /E145:/
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
21 " Ignore the error in restricted mode
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
22 endtry
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
23
32837
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
24 func s:ParseIntoPageAndSection()
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
25 " Accommodate a reference that terminates in a hyphen.
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
26 "
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
27 " See init_charset_table() at
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
28 " https://git.savannah.gnu.org/cgit/groff.git/tree/src/roff/troff/input.cpp?h=1.22.4#n6794
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
29 "
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
30 " See can_break_after() at
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
31 " https://git.savannah.gnu.org/cgit/groff.git/tree/src/roff/troff/charinfo.h?h=1.22.4#n140
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
32 "
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
33 " Assumptions and limitations:
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
34 " 1) Manual-page references (in consequence of command-related filenames)
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
35 " do not contain non-ASCII HYPHENs (0x2010), any terminating HYPHEN
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
36 " must have been introduced to mark division of a word at the end of
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
37 " a line and can be discarded; whereas similar references may contain
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
38 " ASCII HYPHEN-MINUSes (0x002d) and any terminating HYPHEN-MINUS forms
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
39 " a compound word in addition to marking word division.
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
40 " 2) Well-formed manual-page references always have a section suffix, e.g.
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
41 " "git-commit(1)", therefore suspended hyphenated compounds are not
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
42 " determined, e.g. [V] (With cursor at _git-merge-_ below...)
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
43 " ".................... git-merge- and git-merge-base. (See git-cherry-
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
44 " pick(1) and git-cherry(1).)" (... look up "git-merge-pick(1)".)
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
45 "
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
46 " Note that EM DASH (0x2014), a third stooge from init_charset_table(),
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
47 " neither connects nor divides parts of a word.
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
48 let str = expand("<cWORD>")
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
49
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
50 if str =~ '\%u2010$' " HYPHEN (-1).
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
51 let str = strpart(str, 0, strridx(str, "\u2010"))
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
52
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
53 " Append the leftmost WORD (or an empty string) from the line below.
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
54 let str .= get(split(get(getbufline(bufnr('%'), line('.') + 1), 0, '')), 0, '')
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
55 elseif str =~ '-$' " HYPHEN-MINUS.
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
56 " Append the leftmost WORD (or an empty string) from the line below.
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
57 let str .= get(split(get(getbufline(bufnr('%'), line('.') + 1), 0, '')), 0, '')
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
58 endif
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
59
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
60 " According to man(1), section name formats vary (MANSECT):
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
61 " 1 n l 8 3 2 3posix 3pm 3perl 3am 5 4 9 6 7
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
62 let parts = matchlist(str, '\(\k\+\)(\(\k\+\))')
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
63 return (len(parts) > 2)
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
64 \ ? {'page': parts[1], 'section': parts[2]}
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
65 \ : {'page': matchstr(str, '\k\+'), 'section': ''}
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
66 endfunc
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
67
29236
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
68 func dist#man#PreGetPage(cnt)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
69 if a:cnt == 0
32837
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
70 let what = s:ParseIntoPageAndSection()
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
71 let sect = what.section
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
72 let page = what.page
29236
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
73 else
32837
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
74 let what = s:ParseIntoPageAndSection()
29236
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
75 let sect = a:cnt
32837
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
76 let page = what.page
29236
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
77 endif
32837
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
78
29236
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
79 call dist#man#GetPage('', sect, page)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
80 endfunc
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
81
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
82 func s:GetCmdArg(sect, page)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
83 if empty(a:sect)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
84 return shellescape(a:page)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
85 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
86
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
87 return s:man_sect_arg . ' ' . shellescape(a:sect) . ' ' . shellescape(a:page)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
88 endfunc
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
89
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
90 func s:FindPage(sect, page)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
91 let l:cmd = printf('man %s %s', s:man_find_arg, s:GetCmdArg(a:sect, a:page))
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
92 call system(l:cmd)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
93
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
94 if v:shell_error
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
95 return 0
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
96 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
97
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
98 return 1
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
99 endfunc
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
100
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
101 func dist#man#GetPage(cmdmods, ...)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
102 if a:0 >= 2
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
103 let sect = a:1
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
104 let page = a:2
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
105 elseif a:0 >= 1
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
106 let sect = ""
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
107 let page = a:1
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
108 else
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
109 return
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
110 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
111
32837
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
112 " To support: nmap K :Man <cWORD><CR>
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
113 if page ==? '<cword>'
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
114 let what = s:ParseIntoPageAndSection()
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
115 let sect = what.section
050794aa4ef2 man.vim: Recognise hyphenated-at-eol cross-references (#12609)
Christian Brabandt <cb@256bit.org>
parents: 32836
diff changeset
116 let page = what.page
29236
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
117 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
118
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
119 if !exists('g:ft_man_no_sect_fallback') || (g:ft_man_no_sect_fallback == 0)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
120 if sect != "" && s:FindPage(sect, page) == 0
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
121 let sect = ""
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
122 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
123 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
124 if s:FindPage(sect, page) == 0
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
125 let msg = 'man.vim: no manual entry for "' . page . '"'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
126 if !empty(sect)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
127 let msg .= ' in section ' . sect
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
128 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
129 echomsg msg
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
130 return
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
131 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
132 exec "let s:man_tag_buf_".s:man_tag_depth." = ".bufnr("%")
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
133 exec "let s:man_tag_lin_".s:man_tag_depth." = ".line(".")
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
134 exec "let s:man_tag_col_".s:man_tag_depth." = ".col(".")
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
135 let s:man_tag_depth = s:man_tag_depth + 1
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
136
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
137 let open_cmd = 'edit'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
138
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
139 " Use an existing "man" window if it exists, otherwise open a new one.
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
140 if &filetype != "man"
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
141 let thiswin = winnr()
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
142 exe "norm! \<C-W>b"
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
143 if winnr() > 1
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
144 exe "norm! " . thiswin . "\<C-W>w"
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
145 while 1
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
146 if &filetype == "man"
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
147 break
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
148 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
149 exe "norm! \<C-W>w"
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
150 if thiswin == winnr()
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
151 break
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
152 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
153 endwhile
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
154 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
155 if &filetype != "man"
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
156 if exists("g:ft_man_open_mode")
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
157 if g:ft_man_open_mode == 'vert'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
158 let open_cmd = 'vsplit'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
159 elseif g:ft_man_open_mode == 'tab'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
160 let open_cmd = 'tabedit'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
161 else
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
162 let open_cmd = 'split'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
163 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
164 else
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
165 let open_cmd = a:cmdmods . ' split'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
166 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
167 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
168 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
169
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
170 silent execute open_cmd . " $HOME/" . page . '.' . sect . '~'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
171
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
172 " Avoid warning for editing the dummy file twice
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
173 setl buftype=nofile noswapfile
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
174
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
175 setl fdc=0 ma nofen nonu nornu
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
176 %delete _
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
177 let unsetwidth = 0
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
178 if empty($MANWIDTH)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
179 let $MANWIDTH = winwidth(0)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
180 let unsetwidth = 1
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
181 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
182
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
183 " Ensure Vim is not recursively invoked (man-db does this) when doing ctrl-[
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
184 " on a man page reference by unsetting MANPAGER.
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
185 " Some versions of env(1) do not support the '-u' option, and in such case
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
186 " we set MANPAGER=cat.
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
187 if !exists('s:env_has_u')
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
188 call system('env -u x true')
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
189 let s:env_has_u = (v:shell_error == 0)
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
190 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
191 let env_cmd = s:env_has_u ? 'env -u MANPAGER' : 'env MANPAGER=cat'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
192 let env_cmd .= ' GROFF_NO_SGR=1'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
193 let man_cmd = env_cmd . ' man ' . s:GetCmdArg(sect, page) . ' | col -b'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
194 silent exec "r !" . man_cmd
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
195
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
196 if unsetwidth
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
197 let $MANWIDTH = ''
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
198 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
199 " Remove blank lines from top and bottom.
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
200 while line('$') > 1 && getline(1) =~ '^\s*$'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
201 1delete _
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
202 endwhile
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
203 while line('$') > 1 && getline('$') =~ '^\s*$'
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
204 $delete _
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
205 endwhile
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
206 1
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
207 setl ft=man nomod
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
208 setl bufhidden=hide
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
209 setl nobuflisted
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
210 setl noma
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
211 endfunc
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
212
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
213 func dist#man#PopPage()
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
214 if s:man_tag_depth > 0
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
215 let s:man_tag_depth = s:man_tag_depth - 1
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
216 exec "let s:man_tag_buf=s:man_tag_buf_".s:man_tag_depth
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
217 exec "let s:man_tag_lin=s:man_tag_lin_".s:man_tag_depth
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
218 exec "let s:man_tag_col=s:man_tag_col_".s:man_tag_depth
32836
f0854888250f man.vim: Uniformly place cursor at the same column with `Ctrl-t` (#12608)
Christian Brabandt <cb@256bit.org>
parents: 29236
diff changeset
219
29236
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
220 exec s:man_tag_buf."b"
32836
f0854888250f man.vim: Uniformly place cursor at the same column with `Ctrl-t` (#12608)
Christian Brabandt <cb@256bit.org>
parents: 29236
diff changeset
221 call cursor(s:man_tag_lin, s:man_tag_col)
f0854888250f man.vim: Uniformly place cursor at the same column with `Ctrl-t` (#12608)
Christian Brabandt <cb@256bit.org>
parents: 29236
diff changeset
222
29236
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
223 exec "unlet s:man_tag_buf_".s:man_tag_depth
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
224 exec "unlet s:man_tag_lin_".s:man_tag_depth
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
225 exec "unlet s:man_tag_col_".s:man_tag_depth
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
226 unlet s:man_tag_buf s:man_tag_lin s:man_tag_col
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
227 endif
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
228 endfunc
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
229
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
230 let &cpo = s:cpo_save
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
231 unlet s:cpo_save
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
232
0eef32b4ebbc Update runtime files
Bram Moolenaar <Bram@vim.org>
parents:
diff changeset
233 " vim: set sw=2 ts=8 noet: