mirror of
https://github.com/vim/vim.git
synced 2025-07-04 23:07:33 -04:00
updated for version 7.0149
This commit is contained in:
parent
60a795aad6
commit
bfd8fc0529
391
runtime/autoload/csscomplete.vim
Normal file
391
runtime/autoload/csscomplete.vim
Normal file
@ -0,0 +1,391 @@
|
||||
" Vim completion script
|
||||
" Language: CSS 2.1
|
||||
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
||||
" Last Change: 2005 Sep 19
|
||||
|
||||
function! csscomplete#CompleteCSS(findstart, base)
|
||||
if a:findstart
|
||||
" We need whole line to proper checking
|
||||
return 0
|
||||
else
|
||||
" There are few chars important for context:
|
||||
" ^ ; : { } /* */
|
||||
" Where ^ is start of line and /* */ are comment borders
|
||||
" Depending on their relative position to cursor we will now what should
|
||||
" be completed.
|
||||
" 1. if nearest are ^ or { or ; current word is property
|
||||
" 2. if : it is value
|
||||
" 3. if } we are outside of css definitions
|
||||
" 4. for comments ignoring is be the easiest but assume they are the same
|
||||
" as 1.
|
||||
|
||||
let line = a:base
|
||||
let res = []
|
||||
let res2 = []
|
||||
let borders = {}
|
||||
|
||||
" We need the last occurrence of char so reverse line
|
||||
let revline = join(reverse(split(line, '.\zs')), '')
|
||||
let openbrace = stridx(revline, '{')
|
||||
let closebrace = stridx(revline, '}')
|
||||
let colon = stridx(revline, ':')
|
||||
let semicolon = stridx(revline, ';')
|
||||
let opencomm = stridx(revline, '*/') " Line was reversed
|
||||
let closecomm = stridx(revline, '/*') " Line was reversed
|
||||
let style = stridx(revline, '=\s*elyts') " Line was reversed
|
||||
let atrule = stridx(revline, '@')
|
||||
|
||||
if openbrace > -1
|
||||
let borders[openbrace] = "openbrace"
|
||||
endif
|
||||
if closebrace > -1
|
||||
let borders[closebrace] = "closebrace"
|
||||
endif
|
||||
if colon > -1
|
||||
let borders[colon] = "colon"
|
||||
endif
|
||||
if semicolon > -1
|
||||
let borders[semicolon] = "semicolon"
|
||||
endif
|
||||
if opencomm > -1
|
||||
let borders[opencomm] = "opencomm"
|
||||
endif
|
||||
if closecomm > -1
|
||||
let borders[closecomm] = "closecomm"
|
||||
endif
|
||||
if style > -1
|
||||
let borders[style] = "style"
|
||||
endif
|
||||
if atrule > -1
|
||||
let borders[atrule] = "atrule"
|
||||
endif
|
||||
|
||||
if len(borders) == 0 || borders[min(keys(borders))] =~ '^\(openbrace\|semicolon\|opencomm\|closecomm\|style\)$'
|
||||
" Complete properties
|
||||
|
||||
let values = split("azimuth background-attachment background-color background-image background-position background-repeat background border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width border bottom caption-side clear clip color content counter-increment counter-reset cue-after cue-before cue cursor direction display elevation empty-cells float font-family font-size font-style font-variant font-weight font height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-right margin-left margin-top margin-bottom max-height max-width min-height min-width orphans outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page-break-after page-break-before page-break-inside pause-after pause-before pause pitch-range pitch play-during position quotes richness right speak-header speak-numeral speak-punctuation speak speech-rate stress table-layout text-align text-decoration text-indent text-transform top unicode-bidi vertical-align visibility voice-family volume white-space widows width word-spacing z-index")
|
||||
|
||||
let propbase = matchstr(line, '.\{-}\ze[a-zA-Z-]*$')
|
||||
let entered_property = matchstr(line, '.\{-}\zs[a-zA-Z-]*$')
|
||||
|
||||
for m in values
|
||||
if m =~? '^'.entered_property
|
||||
call add(res, propbase . m.': ')
|
||||
elseif m =~? entered_property
|
||||
call add(res2, propbase . m.': ')
|
||||
endif
|
||||
endfor
|
||||
|
||||
return res + res2
|
||||
|
||||
elseif borders[min(keys(borders))] == 'colon'
|
||||
" Get name of property
|
||||
let prop = tolower(matchstr(line, '\zs[a-zA-Z-]*\ze\s*:[^:]\{-}$'))
|
||||
|
||||
if prop == 'azimuth'
|
||||
let values = ["left-side", "far-left", "left", "center-left", "center", "center-right", "right", "far-right", "right-side", "behind", "leftwards", "rightwards"]
|
||||
elseif prop == 'background-attachment'
|
||||
let values = ["scroll", "fixed"]
|
||||
elseif prop == 'background-color'
|
||||
let values = ["transparent", "rgb(", "#"]
|
||||
elseif prop == 'background-image'
|
||||
let values = ["url(", "none"]
|
||||
elseif prop == 'background-position'
|
||||
let vals = matchstr(line, '.*:\s*\zs.*')
|
||||
if vals =~ '^\([a-zA-Z]\+\)\?$'
|
||||
let values = ["top", "center", "bottom"]
|
||||
elseif vals =~ '^[a-zA-Z]\+\s\+\([a-zA-Z]\+\)\?$'
|
||||
let values = ["left", "center", "right"]
|
||||
else
|
||||
return []
|
||||
endif
|
||||
elseif prop == 'background-repeat'
|
||||
let values = ["repeat", "repeat-x", "repeat-y", "no-repeat"]
|
||||
elseif prop == 'background'
|
||||
let values = ["url(", "scroll", "fixed", "transparent", "rgb(", "#", "none", "top", "center", "bottom" , "left", "right", "repeat", "repeat-x", "repeat-y", "no-repeat"]
|
||||
elseif prop == 'border-collapse'
|
||||
let values = ["collapse", "separate"]
|
||||
elseif prop == 'border-color'
|
||||
let values = ["rgb(", "#", "transparent"]
|
||||
elseif prop == 'border-spacing'
|
||||
return []
|
||||
elseif prop == 'border-style'
|
||||
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||
elseif prop =~ 'border-\(top\|right\|bottom\|left\)$'
|
||||
let vals = matchstr(line, '.*:\s*\zs.*')
|
||||
if vals =~ '^\([a-zA-Z0-9.]\+\)\?$'
|
||||
let values = ["thin", "thick", "medium"]
|
||||
elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\([a-zA-Z]\+\)\?$'
|
||||
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||
elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
|
||||
let values = ["rgb(", "#", "transparent"]
|
||||
else
|
||||
return []
|
||||
endif
|
||||
elseif prop =~ 'border-\(top\|right\|bottom\|left\)-color'
|
||||
let values = ["rgb(", "#", "transparent"]
|
||||
elseif prop =~ 'border-\(top\|right\|bottom\|left\)-style'
|
||||
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||
elseif prop =~ 'border-\(top\|right\|bottom\|left\)-width'
|
||||
let values = ["thin", "thick", "medium"]
|
||||
elseif prop == 'border-width'
|
||||
let values = ["thin", "thick", "medium"]
|
||||
elseif prop == 'border'
|
||||
let vals = matchstr(line, '.*:\s*\zs.*')
|
||||
if vals =~ '^\([a-zA-Z0-9.]\+\)\?$'
|
||||
let values = ["thin", "thick", "medium"]
|
||||
elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\([a-zA-Z]\+\)\?$'
|
||||
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||
elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
|
||||
let values = ["rgb(", "#", "transparent"]
|
||||
else
|
||||
return []
|
||||
endif
|
||||
elseif prop == 'bottom'
|
||||
let values = ["auto"]
|
||||
elseif prop == 'caption-side'
|
||||
let values = ["top", "bottom"]
|
||||
elseif prop == 'clear'
|
||||
let values = ["none", "left", "right", "both"]
|
||||
elseif prop == 'clip'
|
||||
let values = ["auto", "rect("]
|
||||
elseif prop == 'color'
|
||||
let values = ["rgb(", "#"]
|
||||
elseif prop == 'content'
|
||||
let values = ["normal", "attr(", "open-quote", "close-quote", "no-open-quote", "no-close-quote"]
|
||||
elseif prop =~ 'counter-\(increment\|reset\)$'
|
||||
let values = ["none"]
|
||||
elseif prop =~ '^\(cue-after\|cue-before\|cue\)$'
|
||||
let values = ["url(", "none"]
|
||||
elseif prop == 'cursor'
|
||||
let values = ["url(", "auto", "crosshair", "default", "pointer", "move", "e-resize", "ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", "s-resize", "w-resize", "text", "wait", "help", "progress"]
|
||||
elseif prop == 'direction'
|
||||
let values = ["ltr", "rtl"]
|
||||
elseif prop == 'display'
|
||||
let values = ["inline", "block", "list-item", "run-in", "inline-block", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "none"]
|
||||
elseif prop == 'elevation'
|
||||
let values = ["below", "level", "above", "higher", "lower"]
|
||||
elseif prop == 'empty-cells'
|
||||
let values = ["show", "hide"]
|
||||
elseif prop == 'float'
|
||||
let values = ["left", "right", "none"]
|
||||
elseif prop == 'font-family'
|
||||
let values = ["sans-serif", "serif", "monospace", "cursive", "fantasy"]
|
||||
elseif prop == 'font-size'
|
||||
return []
|
||||
elseif prop == 'font-style'
|
||||
let values = ["normal", "italic", "oblique"]
|
||||
elseif prop == 'font-variant'
|
||||
let values = ["normal", "small-caps"]
|
||||
elseif prop == 'font-weight'
|
||||
let values = ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900"]
|
||||
elseif prop == 'font'
|
||||
let values = ["normal", "italic", "oblique", "small-caps", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900", "sans-serif", "serif", "monospace", "cursive", "fantasy", "caption", "icon", "menu", "message-box", "small-caption", "status-bar"]
|
||||
elseif prop =~ '^\(height\|width\)$'
|
||||
let values = ["auto"]
|
||||
elseif prop =~ '^\(left\|rigth\)$'
|
||||
let values = ["auto"]
|
||||
elseif prop == 'letter-spacing'
|
||||
let values = ["normal"]
|
||||
elseif prop == 'line-height'
|
||||
let values = ["normal"]
|
||||
elseif prop == 'list-style-image'
|
||||
let values = ["url(", "none"]
|
||||
elseif prop == 'list-style-position'
|
||||
let values = ["inside", "outside"]
|
||||
elseif prop == 'list-style-type'
|
||||
let values = ["disc", "circle", "square", "decimal", "decimal-leading-zero", "lower-roman", "upper-roman", "lower-latin", "upper-latin", "none"]
|
||||
elseif prop == 'list-style'
|
||||
return []
|
||||
elseif prop == 'margin'
|
||||
let values = ["auto"]
|
||||
elseif prop =~ 'margin-\(right\|left\|top\|bottom\)$'
|
||||
let values = ["auto"]
|
||||
elseif prop == 'max-height'
|
||||
let values = ["auto"]
|
||||
elseif prop == 'max-width'
|
||||
let values = ["none"]
|
||||
elseif prop == 'min-height'
|
||||
let values = ["none"]
|
||||
elseif prop == 'min-width'
|
||||
let values = ["none"]
|
||||
elseif prop == 'orphans'
|
||||
return []
|
||||
elseif prop == 'outline-color'
|
||||
let values = ["rgb(", "#"]
|
||||
elseif prop == 'outline-style'
|
||||
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||
elseif prop == 'outline-width'
|
||||
let values = ["thin", "thick", "medium"]
|
||||
elseif prop == 'outline'
|
||||
let vals = matchstr(line, '.*:\s*\zs.*')
|
||||
if vals =~ '^\([a-zA-Z0-9,()#]\+\)\?$'
|
||||
let values = ["rgb(", "#"]
|
||||
elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+\([a-zA-Z]\+\)\?$'
|
||||
let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
|
||||
elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
|
||||
let values = ["thin", "thick", "medium"]
|
||||
else
|
||||
return []
|
||||
endif
|
||||
elseif prop == 'overflow'
|
||||
let values = ["visible", "hidden", "scroll", "auto"]
|
||||
elseif prop == 'padding'
|
||||
return []
|
||||
elseif prop =~ 'padding-\(top\|right\|bottom\|left\)$'
|
||||
return []
|
||||
elseif prop =~ 'page-break-\(after\|before\)$'
|
||||
let values = ["auto", "always", "avoid", "left", "right"]
|
||||
elseif prop == 'page-break-inside'
|
||||
let values = ["auto", "avoid"]
|
||||
elseif prop =~ 'pause-\(after\|before\)$'
|
||||
return []
|
||||
elseif prop == 'pause'
|
||||
return []
|
||||
elseif prop == 'pitch-range'
|
||||
return []
|
||||
elseif prop == 'pitch'
|
||||
let values = ["x-low", "low", "medium", "high", "x-high"]
|
||||
elseif prop == 'play-during'
|
||||
let values = ["url(", "mix", "repeat", "auto", "none"]
|
||||
elseif prop == 'position'
|
||||
let values = ["static", "relative", "absolute", "fixed"]
|
||||
elseif prop == 'quotes'
|
||||
let values = ["none"]
|
||||
elseif prop == 'richness'
|
||||
return []
|
||||
elseif prop == 'speak-header'
|
||||
let values = ["once", "always"]
|
||||
elseif prop == 'speak-numeral'
|
||||
let values = ["digits", "continuous"]
|
||||
elseif prop == 'speak-punctuation'
|
||||
let values = ["code", "none"]
|
||||
elseif prop == 'speak'
|
||||
let values = ["normal", "none", "spell-out"]
|
||||
elseif prop == 'speech-rate'
|
||||
let values = ["x-slow", "slow", "medium", "fast", "x-fast", "faster", "slower"]
|
||||
elseif prop == 'stress'
|
||||
return []
|
||||
elseif prop == 'table-layout'
|
||||
let values = ["auto", "fixed"]
|
||||
elseif prop == 'text-align'
|
||||
let values = ["left", "right", "center", "justify"]
|
||||
elseif prop == 'text-decoration'
|
||||
let values = ["none", "underline", "overline", "line-through", "blink"]
|
||||
elseif prop == 'text-indent'
|
||||
return []
|
||||
elseif prop == 'text-transform'
|
||||
let values = ["capitalize", "uppercase", "lowercase", "none"]
|
||||
elseif prop == 'top'
|
||||
let values = ["auto"]
|
||||
elseif prop == 'unicode-bidi'
|
||||
let values = ["normal", "embed", "bidi-override"]
|
||||
elseif prop == 'vertical-align'
|
||||
let values = ["baseline", "sub", "super", "top", "text-top", "middle", "bottom", "text-bottom"]
|
||||
elseif prop == 'visibility'
|
||||
let values = ["visible", "hidden", "collapse"]
|
||||
elseif prop == 'voice-family'
|
||||
return []
|
||||
elseif prop == 'volume'
|
||||
let values = ["silent", "x-soft", "soft", "medium", "loud", "x-loud"]
|
||||
elseif prop == 'white-space'
|
||||
let values = ["normal", "pre", "nowrap", "pre-wrap", "pre-line"]
|
||||
elseif prop == 'widows'
|
||||
return []
|
||||
elseif prop == 'word-spacing'
|
||||
let values = ["normal"]
|
||||
elseif prop == 'z-index'
|
||||
let values = ["auto"]
|
||||
else
|
||||
return []
|
||||
endif
|
||||
|
||||
" Complete values
|
||||
let valbase = matchstr(line, '.\{-}\ze[a-zA-Z0-9#,.(_-]*$')
|
||||
let entered_value = matchstr(line, '.\{-}\zs[a-zA-Z0-9#,.(_-]*$')
|
||||
|
||||
for m in values
|
||||
if m =~? '^'.entered_value
|
||||
call add(res, valbase . m)
|
||||
elseif m =~? entered_value
|
||||
call add(res2, valbase . m)
|
||||
endif
|
||||
endfor
|
||||
|
||||
return res + res2
|
||||
|
||||
elseif borders[min(keys(borders))] == 'closebrace'
|
||||
|
||||
return []
|
||||
|
||||
elseif borders[min(keys(borders))] == 'atrule'
|
||||
|
||||
let afterat = matchstr(line, '.*@\zs.*')
|
||||
|
||||
if afterat =~ '\s'
|
||||
|
||||
let atrulename = matchstr(line, '.*@\zs[a-zA-Z-]\+\ze')
|
||||
|
||||
if atrulename == 'media'
|
||||
let values = ["screen", "tty", "tv", "projection", "handheld", "print", "braille", "aural", "all"]
|
||||
|
||||
let atruleafterbase = matchstr(line, '.*@media\s\+\ze.*$')
|
||||
let entered_atruleafter = matchstr(line, '.*@media\s\+\zs.*$')
|
||||
|
||||
elseif atrulename == 'import'
|
||||
let atruleafterbase = matchstr(line, '.*@import\s\+\ze.*$')
|
||||
let entered_atruleafter = matchstr(line, '.*@import\s\+\zs.*$')
|
||||
|
||||
if entered_atruleafter =~ "^[\"']"
|
||||
let filestart = matchstr(entered_atruleafter, '^.\zs.*')
|
||||
let files = split(glob(filestart.'*'), '\n')
|
||||
let values = map(copy(files), '"\"".v:val')
|
||||
|
||||
elseif entered_atruleafter =~ "^url("
|
||||
let filestart = matchstr(entered_atruleafter, "^url([\"']\\?\\zs.*")
|
||||
let files = split(glob(filestart.'*'), '\n')
|
||||
let values = map(copy(files), '"url(".v:val')
|
||||
|
||||
else
|
||||
let values = ['"', 'url(']
|
||||
|
||||
endif
|
||||
|
||||
else
|
||||
return []
|
||||
|
||||
endif
|
||||
|
||||
for m in values
|
||||
if m =~? '^'.entered_atruleafter
|
||||
call add(res, atruleafterbase . m)
|
||||
elseif m =~? entered_atruleafter
|
||||
call add(res2, atruleafterbase . m)
|
||||
endif
|
||||
endfor
|
||||
|
||||
return res + res2
|
||||
|
||||
endif
|
||||
|
||||
let values = ["charset", "page", "media", "import"]
|
||||
|
||||
let atrulebase = matchstr(line, '.*@\ze[a-zA-Z -]*$')
|
||||
let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$')
|
||||
|
||||
for m in values
|
||||
if m =~? '^'.entered_atrule
|
||||
call add(res, atrulebase . m.' ')
|
||||
elseif m =~? entered_atrule
|
||||
call add(res2, atrulebase . m.' ')
|
||||
endif
|
||||
endfor
|
||||
|
||||
return res + res2
|
||||
|
||||
endif
|
||||
|
||||
return []
|
||||
|
||||
endif
|
||||
endfunction
|
@ -1,7 +1,7 @@
|
||||
" Vim completion script
|
||||
" Language: XHTML 1.0 Strict
|
||||
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
||||
" Last Change: 2005 Sep 15
|
||||
" Last Change: 2005 Sep 19
|
||||
|
||||
function! htmlcomplete#CompleteTags(findstart, base)
|
||||
if a:findstart
|
||||
@ -11,26 +11,53 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
||||
while start >= 0 && line[start - 1] !~ '<'
|
||||
let start -= 1
|
||||
endwhile
|
||||
if start < 0
|
||||
let curpos = line('.')
|
||||
let stylestart = searchpair('<style\>', '', '<\/style\>', "bnW")
|
||||
let styleend = searchpair('<style\>', '', '<\/style\>', "nW")
|
||||
if stylestart != 0 && styleend != 0
|
||||
if stylestart <= curpos && styleend >= curpos
|
||||
let b:csscompl = 1
|
||||
let start = 0
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
return start
|
||||
else
|
||||
" Check if we should do CSS completion inside of <style> tag
|
||||
if exists("b:csscompl")
|
||||
unlet! b:csscompl
|
||||
return csscomplete#CompleteCSS(0, a:base)
|
||||
endif
|
||||
if a:base =~ '>'
|
||||
" Generally if a:base contains > it means we are outside of tag and
|
||||
" should abandon action - with one exception: <style> span { bo
|
||||
if a:base =~ 'style[^>]\{-}>[^<]\{-}$'
|
||||
return csscomplete#CompleteCSS(0, a:base)
|
||||
else
|
||||
return []
|
||||
endif
|
||||
endif
|
||||
|
||||
" Set attribute groups
|
||||
let g:coreattrs = ["id", "class", "style", "title"]
|
||||
let g:i18n = ["lang", "xml:lang", "dir"]
|
||||
let g:events = ["onclick", "ondblclick", "onmousedown", "onmouseup", "onmousemove",
|
||||
let coreattrs = ["id", "class", "style", "title"]
|
||||
let i18n = ["lang", "xml:lang", "dir=\"ltr\" ", "dir=\"rtl\" "]
|
||||
let events = ["onclick", "ondblclick", "onmousedown", "onmouseup", "onmousemove",
|
||||
\ "onmouseout", "onkeypress", "onkeydown", "onkeyup"]
|
||||
let g:focus = ["accesskey", "tabindex", "onfocus", "onblur"]
|
||||
let g:coregroup = g:coreattrs
|
||||
let g:coregroup = extend(g:coregroup, g:i18n)
|
||||
let g:coregroup = extend(g:coregroup, g:events)
|
||||
" find tags matching with "a:base"
|
||||
let focus = ["accesskey", "tabindex", "onfocus", "onblur"]
|
||||
let coregroup = coreattrs + i18n + events
|
||||
let res = []
|
||||
let res2 = []
|
||||
" find tags matching with "a:base"
|
||||
" If a:base contains > it means we are already outside of tag and we
|
||||
" should abandon action
|
||||
if a:base =~ '>'
|
||||
return []
|
||||
endif
|
||||
" If a:base contains white space it is attribute.
|
||||
" It could be also value of attribute...
|
||||
" We have to get first word to offer
|
||||
" proper completions
|
||||
let tag = split(a:base)[0]
|
||||
" Get last word, it should be attr name
|
||||
let attr = matchstr(a:base, '.*\s\zs.*')
|
||||
" Possible situations where any prediction would be difficult:
|
||||
" 1. Events attributes
|
||||
if a:base =~ '\s'
|
||||
@ -40,6 +67,113 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
||||
" Also retrieving class names from current file and linked
|
||||
" stylesheets.
|
||||
if a:base =~ "\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']"
|
||||
if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
|
||||
" Handle class name completion
|
||||
" 1. Find lines of <link stylesheet>
|
||||
" 1a. Check file for @import
|
||||
" 2. Extract filename(s?) of stylesheet,
|
||||
call cursor(1,1)
|
||||
let head = getline(search('<head\>'), search('<\/head>'))
|
||||
let headjoined = join(copy(head), ' ')
|
||||
if headjoined =~ '<style'
|
||||
let stylehead = substitute(headjoined, '+>\*[', ' ', 'g')
|
||||
let styleheadlines = split(stylehead)
|
||||
let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
|
||||
let internal = 1
|
||||
else
|
||||
let internal = 0
|
||||
endif
|
||||
let styletable = []
|
||||
let secimportfiles = []
|
||||
let filestable = filter(copy(head), "v:val =~ '\\(@import\\|link.*stylesheet\\)'")
|
||||
for line in filestable
|
||||
if line =~ "@import"
|
||||
let styletable += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")]
|
||||
elseif line =~ "<link"
|
||||
let styletable += [matchstr(line, "href\\s*=\\s*[\"']\\zs\\f\\+\\ze")]
|
||||
endif
|
||||
endfor
|
||||
for file in filestable
|
||||
if filereadable(file)
|
||||
let stylesheet = readfile(file)
|
||||
let secimport = filter(copy(stylesheet), "v:val =~ '@import'")
|
||||
if len(secimport) > 0
|
||||
for line in secimport
|
||||
let secimportfiles += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")]
|
||||
endfor
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
let cssfiles = styletable + secimportfiles
|
||||
let classes = []
|
||||
for file in cssfiles
|
||||
if filereadable(file)
|
||||
let stylesheet = readfile(file)
|
||||
let stylefile = join(stylesheet)
|
||||
let stylefile = substitute(stylefile, '+>\*[', ' ', 'g')
|
||||
let stylesheet = split(stylefile)
|
||||
let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
|
||||
endif
|
||||
" We gathered classes definitions from all external files
|
||||
let classes += classlines
|
||||
endfor
|
||||
if internal == 1
|
||||
let classes += headclasslines
|
||||
endif
|
||||
let elements = {}
|
||||
for element in classes
|
||||
if element =~ '^\.'
|
||||
let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
|
||||
let class = substitute(class, ':.*', '', '')
|
||||
if has_key(elements, "common")
|
||||
let elements["common"] .= " ".class
|
||||
else
|
||||
let elements["common"] = class
|
||||
endif
|
||||
else
|
||||
let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
|
||||
let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.'))
|
||||
if tagname != ''
|
||||
if has_key(elements, tagname)
|
||||
let elements[tagname] .= " ".class
|
||||
else
|
||||
let elements[tagname] = class
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
|
||||
if has_key(elements, tag) && has_key(elements, "common")
|
||||
let values = split(elements[tag]." ".elements["common"])
|
||||
elseif has_key(elements, tag) && !has_key(elements, "common")
|
||||
let values = split(elements[tag])
|
||||
elseif !has_key(elements, tag) && has_key(elements, "common")
|
||||
let values = split(elements["common"])
|
||||
else
|
||||
return []
|
||||
endif
|
||||
|
||||
" We need special version of sbase
|
||||
let classbase = matchstr(a:base, ".*[\"']")
|
||||
let classquote = matchstr(classbase, '.$')
|
||||
|
||||
|
||||
let entered_class = matchstr(attr, ".*=\\s*[\"']\\zs.*")
|
||||
|
||||
for m in sort(values)
|
||||
if m =~? '^'.entered_class
|
||||
call add(res, classbase . m . classquote . ' ')
|
||||
elseif m =~? entered_class
|
||||
call add(res2, classbase . m . classquote . ' ')
|
||||
endif
|
||||
endfor
|
||||
|
||||
return res + res2
|
||||
|
||||
elseif a:base =~ "style\\s*=\\s*[\"'][^\"']*$"
|
||||
return csscomplete#CompleteCSS(0, a:base)
|
||||
|
||||
endif
|
||||
let stripbase = matchstr(a:base, ".*\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']\\zs.*")
|
||||
" Now we have a:base stripped from all chars up to style/class.
|
||||
" It may fail with some strange style value combinations.
|
||||
@ -47,11 +181,6 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
||||
return []
|
||||
endif
|
||||
endif
|
||||
" We have to get first word to offer
|
||||
" proper attributes.
|
||||
let tag = split(a:base)[0]
|
||||
" Get last word, it should be attr name
|
||||
let attr = matchstr(a:base, '.*\s\zs.*')
|
||||
" If attr contains =\s*[\"'] we catched value of attribute
|
||||
if attr =~ "=\s*[\"']"
|
||||
" Let do attribute specific completion
|
||||
@ -97,7 +226,7 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
||||
endif
|
||||
elseif attrname == 'type'
|
||||
if a:base =~ '^input'
|
||||
let values = ["input-text", "password", "checkbox", "radio", "submit", "reset", "input-file", "hidden", "input-image", "input-button"]
|
||||
let values = ["text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"]
|
||||
elseif a:base =~ '^button'
|
||||
let values = ["button", "submit", "reset"]
|
||||
endif
|
||||
@ -111,128 +240,114 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
||||
|
||||
" We need special version of sbase
|
||||
let attrbase = matchstr(a:base, ".*[\"']")
|
||||
let attrquote = matchstr(attrbase, '.$')
|
||||
|
||||
for m in values
|
||||
if m =~ entered_value
|
||||
call add(res, attrbase . m . '" ')
|
||||
" This if is needed to not offer all completions as-is
|
||||
" alphabetically but sort them. Those beginning with entered
|
||||
" part will be as first choices
|
||||
if m =~ '^'.entered_value
|
||||
call add(res, attrbase . m . attrquote.' ')
|
||||
elseif m =~ entered_value
|
||||
call add(res2, attrbase . m . attrquote.' ')
|
||||
endif
|
||||
endfor
|
||||
|
||||
return res + res2
|
||||
|
||||
endif
|
||||
" Shorten a:base to not include last word
|
||||
let sbase = matchstr(a:base, '.*\ze\s.*')
|
||||
if tag =~ '^\(abbr\|acronym\|b\|bdo\|big\|caption\|cite\|code\|dd\|dfn\|div\|dl\|dt\|em\|fieldset\|h\d\|kbd\|li\|noscript\|ol\|p\|samp\|small\|span\|strong\|sub\|sup\|tt\|ul\|var\)$'
|
||||
let attrs = g:coregroup
|
||||
let attrs = coregroup
|
||||
elseif tag == 'a'
|
||||
let tagspec = ["charset", "type", "name", "href", "hreflang", "rel", "rev", "shape", "coords"]
|
||||
let attrs = extend(tagspec, g:coregroup)
|
||||
let attrs = extend(attrs, g:focus)
|
||||
let attrs = coregroup + focus + ["charset", "type", "name", "href", "hreflang", "rel", "rev", "shape", "coords"]
|
||||
elseif tag == 'area'
|
||||
let attrs = g:coregroup
|
||||
let attrs = coregroup
|
||||
elseif tag == 'base'
|
||||
let attrs = ["href", "id"]
|
||||
elseif tag == 'blockquote'
|
||||
let attrs = g:coregroup
|
||||
let attrs = extend(attrs, ["cite"])
|
||||
let attrs = coregroup + ["cite"]
|
||||
elseif tag == 'body'
|
||||
let attrs = g:coregroup
|
||||
let attrs = extend(attrs, ["onload", "onunload"])
|
||||
let attrs = coregroup + ["onload", "onunload"]
|
||||
elseif tag == 'br'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = coreattrs
|
||||
elseif tag == 'button'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, g:focus)
|
||||
let attrs = extend(attrs, ["name", "value", "type"])
|
||||
let attrs = coreattrs + focus + ["name", "value", "type"]
|
||||
elseif tag == '^\(col\|colgroup\)$'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["span", "width", "align", "char", "charoff", "valign"])
|
||||
let attrs = coreattrs + ["span", "width", "align", "char", "charoff", "valign"]
|
||||
elseif tag =~ '^\(del\|ins\)$'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["cite", "datetime"])
|
||||
let attrs = coreattrs + ["cite", "datetime"]
|
||||
elseif tag == 'form'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["action", "method", "enctype", "onsubmit", "onreset", "accept", "accept-charset"])
|
||||
let attrs = coreattrs + ["action", "method=\"get\" ", "method=\"post\" ", "enctype", "onsubmit", "onreset", "accept", "accept-charset"]
|
||||
elseif tag == 'head'
|
||||
let attrs = g:i18n
|
||||
let attrs = extend(attrs, ["id", "profile"])
|
||||
let attrs = i18n + ["id", "profile"]
|
||||
elseif tag == 'html'
|
||||
let attrs = g:i18n
|
||||
let attrs = extend(attrs, ["id", "xmlns"])
|
||||
let attrs = i18n + ["id", "xmlns"]
|
||||
elseif tag == 'img'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["src", "alt", "longdesc", "height", "width", "usemap", "ismap"])
|
||||
let attrs = coreattrs + ["src", "alt", "longdesc", "height", "width", "usemap", "ismap"]
|
||||
elseif tag == 'input'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, g:focus)
|
||||
let attrs = extend(attrs, ["type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "onselect", "onchange", "accept"])
|
||||
let attrs = coreattrs + focus + ["type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "onselect", "onchange", "accept"]
|
||||
elseif tag == 'label'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["for", "accesskey", "onfocus", "onblur"])
|
||||
let attrs = coreattrs + ["for", "accesskey", "onfocus", "onblur"]
|
||||
elseif tag == 'legend'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["accesskey"])
|
||||
let attrs = coreattrs + ["accesskey"]
|
||||
elseif tag == 'link'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["charset", "href", "hreflang", "type", "rel", "rev", "media"])
|
||||
let attrs = coreattrs + ["charset", "href", "hreflang", "type", "rel", "rev", "media"]
|
||||
elseif tag == 'map'
|
||||
let attrs = g:i18n
|
||||
let attrs = extend(attrs, g:events)
|
||||
let attrs = extend(attrs, ["id", "class", "style", "title", "name"])
|
||||
let attrs = i18n + events + ["id", "class", "style", "title", "name"]
|
||||
elseif tag == 'meta'
|
||||
let attrs = g:i18n
|
||||
let attrs = extend(attrs, ["id", "http-equiv", "content", "scheme", "name"])
|
||||
let attrs = i18n + ["id", "http-equiv", "content", "scheme", "name"]
|
||||
elseif tag == 'title'
|
||||
let attrs = g:i18n
|
||||
let attrs = extend(attrs, ["id"])
|
||||
let attrs = i18n + ["id"]
|
||||
elseif tag == 'object'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex"])
|
||||
let attrs = coreattrs + ["declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex"]
|
||||
elseif tag == 'optgroup'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["disbled", "label"])
|
||||
let attrs = coreattrs + ["disbled", "label"]
|
||||
elseif tag == 'option'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["disbled", "selected", "value", "label"])
|
||||
let attrs = coreattrs + ["disbled", "selected", "value", "label"]
|
||||
elseif tag == 'param'
|
||||
let attrs = ["id", "name", "value", "valuetype", "type"]
|
||||
elseif tag == 'pre'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["xml:space"])
|
||||
let attrs = coreattrs + ["xml:space"]
|
||||
elseif tag == 'q'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["cite"])
|
||||
let attrs = coreattrs + ["cite"]
|
||||
elseif tag == 'script'
|
||||
let attrs = ["id", "charset", "type", "src", "defer", "xml:space"]
|
||||
elseif tag == 'select'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"])
|
||||
let attrs = coreattrs + ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"]
|
||||
elseif tag == 'style'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["id", "type", "media", "title", "xml:space"])
|
||||
let attrs = coreattrs + ["id", "type", "media", "title", "xml:space"]
|
||||
elseif tag == 'table'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["summary", "width", "border", "frame", "rules" "cellspacing", "cellpadding"])
|
||||
let attrs = coreattrs + ["summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding"]
|
||||
elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["align", "char", "charoff", "valign"])
|
||||
let attrs = coreattrs + ["align", "char", "charoff", "valign"]
|
||||
elseif tag == 'textarea'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, g:focus)
|
||||
let attrs = extend(attrs, ["name", "rows", "cols", "disabled", "readonly", "onselect", "onchange"])
|
||||
let attrs = coreattrs + focus + ["name", "rows", "cols", "disabled", "readonly", "onselect", "onchange"]
|
||||
elseif tag =~ '^\(th\|td\)$'
|
||||
let attrs = g:coreattrs
|
||||
let attrs = extend(attrs, ["abbr", "headers", "scope", "rowspan", "colspan", "align", "char", "charoff", "valign"])
|
||||
let attrs = coreattrs + ["abbr", "headers", "scope", "rowspan", "colspan", "align", "char", "charoff", "valign"]
|
||||
else
|
||||
return []
|
||||
endif
|
||||
|
||||
for m in sort(attrs)
|
||||
if m =~ attr
|
||||
if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$'
|
||||
if m =~ '^'.attr
|
||||
if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$' || m =~ '='
|
||||
call add(res, sbase.' '.m)
|
||||
else
|
||||
call add(res, sbase.' '.m.'="')
|
||||
endif
|
||||
elseif m =~ attr
|
||||
if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$' || m =~ '='
|
||||
call add(res2, sbase.' '.m)
|
||||
else
|
||||
call add(res2, sbase.' '.m.'="')
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
return res
|
||||
|
||||
return res + res2
|
||||
|
||||
endif
|
||||
" Close tag
|
||||
let b:unaryTagsStack = "base meta link hr br param img area input col"
|
||||
@ -258,17 +373,17 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
||||
elseif opentag == 'pre'
|
||||
let tags = split("a tt i b big small br span bdo map ".phrase." ".miscinline." ".inlineforms)
|
||||
elseif opentag == 'html'
|
||||
let tags = split("head body")
|
||||
let tags = ["head", "body"]
|
||||
elseif opentag == 'legend'
|
||||
let tags = split(inline." ".miscinline)
|
||||
elseif opentag == 'head'
|
||||
let tags = split("title base scipt style meta link object")
|
||||
let tags = ["title", "base", "scipt", "style", "meta", "link", "object"]
|
||||
elseif opentag =~ '^\(noscript\|body\|blockquote\)$'
|
||||
let tags = split("form ".block." ".misc)
|
||||
elseif opentag =~ '^\(ul\|ol\)$'
|
||||
let tags = ["li"]
|
||||
elseif opentag == 'dl'
|
||||
let tags = split("dt dd")
|
||||
let tags = ["dt", "dd"]
|
||||
elseif opentag =~ '^\(ins\|del\|th\|td\|dd\|div\|li\)$'
|
||||
let tags = split("form ".block." ".inline." ".misc)
|
||||
elseif opentag == 'object'
|
||||
@ -280,30 +395,34 @@ function! htmlcomplete#CompleteTags(findstart, base)
|
||||
elseif opentag == 'form'
|
||||
let tags = split(block." ".misc)
|
||||
elseif opentag == 'select'
|
||||
let tags = split("optgroup option")
|
||||
let tags = ["optgroup", "option"]
|
||||
elseif opentag == 'optgroup'
|
||||
let tags = ["option"]
|
||||
elseif opentag == 'colgroup'
|
||||
let tags = ["col"]
|
||||
elseif opentag == '^\(textarea\|option\|script\|style\|title\)$'
|
||||
let tags = []
|
||||
let tags = ['empty']
|
||||
elseif opentag == 'button'
|
||||
let tags = split("p h1 h2 h3 h4 h5 h6 div ul ol dl table")
|
||||
elseif opentag =~ '^\(thead\|tfoot\|tbody)$'
|
||||
let tags = ["p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "ul", "ol", "dl", "table"]
|
||||
elseif opentag =~ '^\(thead\|tfoot\|tbody\)$'
|
||||
let tags = ["tr"]
|
||||
elseif opentag == 'tr'
|
||||
let tags = split("th td")
|
||||
let tags = ["th", "td"]
|
||||
elseif opentag == 'table'
|
||||
let tags = split("caption col colgroup thead tfoot tbody tr")
|
||||
let tags = ["caption", "col", "colgroup", "thead", "tfoot", "tbody", "tr"]
|
||||
else
|
||||
return []
|
||||
endif
|
||||
|
||||
for m in tags
|
||||
if m =~ a:base
|
||||
if m =~ '^'.a:base
|
||||
call add(res, m)
|
||||
elseif m =~ a:base
|
||||
call add(res2, m)
|
||||
endif
|
||||
endfor
|
||||
|
||||
return res
|
||||
return res + res2
|
||||
|
||||
endif
|
||||
endfunction
|
||||
@ -316,10 +435,10 @@ endfunction
|
||||
" Version: 0.9.1
|
||||
|
||||
function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
|
||||
let linenum=line(".")
|
||||
let lineend=col(".") - 1 " start: cursor position
|
||||
let linenum=line('.')
|
||||
let lineend=col('.') - 1 " start: cursor position
|
||||
let first=1 " flag for first line searched
|
||||
let b:TagStack="" " main stack of tags
|
||||
let b:TagStack='' " main stack of tags
|
||||
let startInComment=s:InComment()
|
||||
|
||||
let tagpat='</\=\(\k\|[-:]\)\+\|/>'
|
||||
@ -330,7 +449,7 @@ function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
|
||||
else
|
||||
let lineend=strlen(line)
|
||||
endif
|
||||
let b:lineTagStack=""
|
||||
let b:lineTagStack=''
|
||||
let mpos=0
|
||||
let b:TagCol=0
|
||||
while (mpos > -1)
|
||||
@ -339,46 +458,45 @@ function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
|
||||
let b:TagCol=b:TagCol+mpos
|
||||
let tag=matchstr(line,tagpat)
|
||||
|
||||
if exists("b:closetag_disable_synID") || startInComment==s:InCommentAt(linenum, b:TagCol)
|
||||
if exists('b:closetag_disable_synID') || startInComment==s:InCommentAt(linenum, b:TagCol)
|
||||
let b:TagLine=linenum
|
||||
call s:Push(matchstr(tag,'[^<>]\+'),"b:lineTagStack")
|
||||
call s:Push(matchstr(tag,'[^<>]\+'),'b:lineTagStack')
|
||||
endif
|
||||
let lineend=lineend-mpos
|
||||
let line=strpart(line,mpos,lineend)
|
||||
endif
|
||||
endwhile
|
||||
while (!s:EmptystackP("b:lineTagStack"))
|
||||
let tag=s:Pop("b:lineTagStack")
|
||||
if match(tag, "^/") == 0 "found end tag
|
||||
call s:Push(tag,"b:TagStack")
|
||||
elseif s:EmptystackP("b:TagStack") && !s:Instack(tag, a:unaryTagsStack) "found unclosed tag
|
||||
while (!s:EmptystackP('b:lineTagStack'))
|
||||
let tag=s:Pop('b:lineTagStack')
|
||||
if match(tag, '^/') == 0 "found end tag
|
||||
call s:Push(tag,'b:TagStack')
|
||||
elseif s:EmptystackP('b:TagStack') && !s:Instack(tag, a:unaryTagsStack) "found unclosed tag
|
||||
return tag
|
||||
else
|
||||
let endtag=s:Peekstack("b:TagStack")
|
||||
if endtag == "/".tag || endtag == "/"
|
||||
call s:Pop("b:TagStack") "found a open/close tag pair
|
||||
elseif !s:Instack(tag, a:unaryTagsStack) "we have a mismatch error
|
||||
return ""
|
||||
let endtag=s:Peekstack('b:TagStack')
|
||||
if endtag == '/'.tag || endtag == '/'
|
||||
call s:Pop('b:TagStack') "found a open/close tag pair
|
||||
elseif !s:Instack(tag, a:unaryTagsStack) "we have a mismatch error
|
||||
return ''
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endwhile
|
||||
let linenum=linenum-1 | let first=0
|
||||
endwhile
|
||||
let linenum=linenum-1 | let first=0
|
||||
endwhile
|
||||
return ""
|
||||
return ''
|
||||
endfunction
|
||||
|
||||
function! s:InComment()
|
||||
return synIDattr(synID(line("."), col("."), 0), "name") =~ 'Comment'
|
||||
return synIDattr(synID(line('.'), col('.'), 0), 'name') =~ 'Comment'
|
||||
endfunction
|
||||
|
||||
function! s:InCommentAt(line, col)
|
||||
return synIDattr(synID(a:line, a:col, 0), "name") =~ 'Comment'
|
||||
return synIDattr(synID(a:line, a:col, 0), 'name') =~ 'Comment'
|
||||
endfunction
|
||||
|
||||
|
||||
function! s:SetKeywords()
|
||||
let g:IsKeywordBak=&iskeyword
|
||||
let &iskeyword="33-255"
|
||||
let &iskeyword='33-255'
|
||||
endfunction
|
||||
|
||||
function! s:RestoreKeywords()
|
||||
@ -387,15 +505,15 @@ endfunction
|
||||
|
||||
function! s:Push(el, sname)
|
||||
if !s:EmptystackP(a:sname)
|
||||
exe "let ".a:sname."=a:el.' '.".a:sname
|
||||
exe 'let '.a:sname."=a:el.' '.".a:sname
|
||||
else
|
||||
exe "let ".a:sname."=a:el"
|
||||
exe 'let '.a:sname.'=a:el'
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:EmptystackP(sname)
|
||||
exe "let stack=".a:sname
|
||||
if match(stack,"^ *$") == 0
|
||||
exe 'let stack='.a:sname
|
||||
if match(stack,'^ *$') == 0
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@ -403,9 +521,9 @@ function! s:EmptystackP(sname)
|
||||
endfunction
|
||||
|
||||
function! s:Instack(el, sname)
|
||||
exe "let stack=".a:sname
|
||||
exe 'let stack='.a:sname
|
||||
call s:SetKeywords()
|
||||
let m=match(stack, "\\<".a:el."\\>")
|
||||
let m=match(stack, '\<'.a:el.'\>')
|
||||
call s:RestoreKeywords()
|
||||
if m < 0
|
||||
return 0
|
||||
@ -416,25 +534,25 @@ endfunction
|
||||
|
||||
function! s:Peekstack(sname)
|
||||
call s:SetKeywords()
|
||||
exe "let stack=".a:sname
|
||||
let top=matchstr(stack, "\\<.\\{-1,}\\>")
|
||||
exe 'let stack='.a:sname
|
||||
let top=matchstr(stack, '\<.\{-1,}\>')
|
||||
call s:RestoreKeywords()
|
||||
return top
|
||||
endfunction
|
||||
|
||||
function! s:Pop(sname)
|
||||
if s:EmptystackP(a:sname)
|
||||
return ""
|
||||
return ''
|
||||
endif
|
||||
exe "let stack=".a:sname
|
||||
exe 'let stack='.a:sname
|
||||
call s:SetKeywords()
|
||||
let loc=matchend(stack,"\\<.\\{-1,}\\>")
|
||||
exe "let ".a:sname."=strpart(stack, loc+1, strlen(stack))"
|
||||
let top=strpart(stack, match(stack, "\\<"), loc)
|
||||
let loc=matchend(stack,'\<.\{-1,}\>')
|
||||
exe 'let '.a:sname.'=strpart(stack, loc+1, strlen(stack))'
|
||||
let top=strpart(stack, match(stack, '\<'), loc)
|
||||
call s:RestoreKeywords()
|
||||
return top
|
||||
endfunction
|
||||
|
||||
function! s:Clearstack(sname)
|
||||
exe "let ".a:sname."=''"
|
||||
exe 'let '.a:sname."=''"
|
||||
endfunction
|
||||
|
@ -1,4 +1,4 @@
|
||||
*cmdline.txt* For Vim version 7.0aa. Last change: 2005 Jul 05
|
||||
*cmdline.txt* For Vim version 7.0aa. Last change: 2005 Sep 17
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -153,6 +153,7 @@ CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
|
||||
*c_CTRL-R_=*
|
||||
'=' the expression register: you are prompted to
|
||||
enter an expression (see |expression|)
|
||||
(doesn't work at the expression prompt)
|
||||
See |registers| about registers. {not in Vi}
|
||||
Implementation detail: When using the |expression| register
|
||||
and invoking setcmdpos(), this sets the position before
|
||||
@ -191,7 +192,8 @@ CTRL-\ e {expr} *c_CTRL-\_e*
|
||||
to finish it. It's most useful in mappings though. See
|
||||
|expression|.
|
||||
See |c_CTRL-R_=| for inserting the result of an expression.
|
||||
Useful functions are |getcmdline()| and |getcmdpos()|.
|
||||
Useful functions are |getcmdtype()|, |getcmdline()| and
|
||||
|getcmdpos()|.
|
||||
The cursor position is unchanged, except when the cursor was
|
||||
at the end of the line, then it stays at the end.
|
||||
|setcmdpos()| can be used to set the cursor position.
|
||||
@ -203,7 +205,9 @@ CTRL-\ e {expr} *c_CTRL-\_e*
|
||||
:call setcmdpos(strlen(cmd))
|
||||
:return cmd
|
||||
:endfunc
|
||||
<
|
||||
< This doesn't work recursively, thus not when already editing
|
||||
an expression.
|
||||
|
||||
*c_CTRL-Y*
|
||||
CTRL-Y When there is a modeless selection, copy the selection into
|
||||
the clipboard. |modeless-selection|
|
||||
|
@ -1,4 +1,4 @@
|
||||
*eval.txt* For Vim version 7.0aa. Last change: 2005 Sep 15
|
||||
*eval.txt* For Vim version 7.0aa. Last change: 2005 Sep 20
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -1520,6 +1520,7 @@ getcharmod( ) Number modifiers for the last typed character
|
||||
getbufvar( {expr}, {varname}) variable {varname} in buffer {expr}
|
||||
getcmdline() String return the current command-line
|
||||
getcmdpos() Number return cursor position in command-line
|
||||
getcmdtype() String return the current command-line type
|
||||
getcwd() String the current working directory
|
||||
getfperm( {fname}) String file permissions of file {fname}
|
||||
getfsize( {fname}) Number size in bytes of file {fname}
|
||||
@ -1550,7 +1551,8 @@ iconv( {expr}, {from}, {to}) String convert encoding of {expr}
|
||||
indent( {lnum}) Number indent of line {lnum}
|
||||
index( {list}, {expr} [, {start} [, {ic}]])
|
||||
Number index in {list} where {expr} appears
|
||||
input( {prompt} [, {text}]) String get input from the user
|
||||
input( {prompt} [, {text} [, {completion}]])
|
||||
String get input from the user
|
||||
inputdialog( {p} [, {t} [, {c}]]) String like input() but in a GUI dialog
|
||||
inputrestore() Number restore typeahead
|
||||
inputsave() Number save and clear typeahead
|
||||
@ -2533,14 +2535,27 @@ getcmdline() *getcmdline()*
|
||||
|c_CTRL-R_=|.
|
||||
Example: >
|
||||
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
|
||||
< Also see |getcmdpos()| and |setcmdpos()|.
|
||||
< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
|
||||
|
||||
getcmdpos() *getcmdpos()*
|
||||
Return the position of the cursor in the command line as a
|
||||
byte count. The first column is 1.
|
||||
Only works when editing the command line, thus requires use of
|
||||
|c_CTRL-\_e| or |c_CTRL-R_=|. Returns 0 otherwise.
|
||||
Also see |setcmdpos()| and |getcmdline()|.
|
||||
Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
|
||||
|
||||
getcmdtype() *getcmdtype()*
|
||||
Return the current command-line type. Possible return values
|
||||
are:
|
||||
/ Search forward command
|
||||
? Search backward command
|
||||
: Ex-command mode
|
||||
@ Input mode
|
||||
> Debug mode
|
||||
Only works when editing the command line, thus requires use of
|
||||
|c_CTRL-\_e| or |c_CTRL-R_=|. Returns an empty string
|
||||
otherwise.
|
||||
Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
|
||||
|
||||
*getcwd()*
|
||||
getcwd() The result is a String, which is the name of the current
|
||||
@ -2910,19 +2925,34 @@ index({list}, {expr} [, {start} [, {ic}]]) *index()*
|
||||
:if index(numbers, 123) >= 0
|
||||
|
||||
|
||||
input({prompt} [, {text}]) *input()*
|
||||
input({prompt} [, {text} [, {completion}]]) *input()*
|
||||
The result is a String, which is whatever the user typed on
|
||||
the command-line. The parameter is either a prompt string, or
|
||||
a blank string (for no prompt). A '\n' can be used in the
|
||||
prompt to start a new line. The highlighting set with
|
||||
|:echohl| is used for the prompt. The input is entered just
|
||||
like a command-line, with the same editing commands and
|
||||
mappings. There is a separate history for lines typed for
|
||||
input().
|
||||
prompt to start a new line.
|
||||
The highlighting set with |:echohl| is used for the prompt.
|
||||
The input is entered just like a command-line, with the same
|
||||
editing commands and mappings. There is a separate history
|
||||
for lines typed for input().
|
||||
Example: >
|
||||
:if input("Coffee or beer? ") == "beer"
|
||||
: echo "Cheers!"
|
||||
:endif
|
||||
<
|
||||
If the optional {text} is present, this is used for the
|
||||
default reply, as if the user typed this.
|
||||
NOTE: This must not be used in a startup file, for the
|
||||
versions that only run in GUI mode (e.g., the Win32 GUI).
|
||||
default reply, as if the user typed this. Example: >
|
||||
:let color = input("Color? ", "white")
|
||||
|
||||
< The optional {completion} argument specifies the type of
|
||||
completion supported for the input. Without it completion is
|
||||
not performed. The supported completion types are the same as
|
||||
that can be supplied to a user-defined command using the
|
||||
"-complete=" argument. Refer to |:command-completion| for
|
||||
more information. Example: >
|
||||
let fname = input("File: ", "", "file")
|
||||
<
|
||||
NOTE: This function must not be used in a startup file, for
|
||||
the versions that only run in GUI mode (e.g., the Win32 GUI).
|
||||
Note: When input() is called from within a mapping it will
|
||||
consume remaining characters from that mapping, because a
|
||||
mapping is handled like the characters were typed.
|
||||
@ -2931,13 +2961,7 @@ input({prompt} [, {text}]) *input()*
|
||||
that further characters follow in the mapping, e.g., by using
|
||||
|:execute| or |:normal|.
|
||||
|
||||
Example: >
|
||||
:if input("Coffee or beer? ") == "beer"
|
||||
: echo "Cheers!"
|
||||
:endif
|
||||
< Example with default text: >
|
||||
:let color = input("Color? ", "white")
|
||||
< Example with a mapping: >
|
||||
Example with a mapping: >
|
||||
:nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
|
||||
:function GetFoo()
|
||||
: call inputsave()
|
||||
@ -2957,6 +2981,7 @@ inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()*
|
||||
omitted an empty string is returned.
|
||||
Hitting <Enter> works like pressing the OK button. Hitting
|
||||
<Esc> works like pressing the Cancel button.
|
||||
NOTE: Command-line completion is not supported.
|
||||
|
||||
inputlist({textlist}) *inputlist()*
|
||||
{textlist} must be a list of strings. This list is displayed,
|
||||
@ -2996,6 +3021,7 @@ inputsecret({prompt} [, {text}]) *inputsecret()*
|
||||
|history| stack.
|
||||
The result is a String, which is whatever the user actually
|
||||
typed on the command-line in response to the issued prompt.
|
||||
NOTE: Command-line completion is not supported.
|
||||
|
||||
insert({list}, {item} [, {idx}]) *insert()*
|
||||
Insert {item} at the start of List {list}.
|
||||
@ -4450,6 +4476,8 @@ winheight({nr}) *winheight()*
|
||||
winline() The result is a Number, which is the screen line of the cursor
|
||||
in the window. This is counting screen lines from the top of
|
||||
the window. The first line is one.
|
||||
If the cursor was moved the view on the file will be updated
|
||||
first, this may cause a scroll.
|
||||
|
||||
*winnr()*
|
||||
winnr([{arg}]) The result is a Number, which is the number of the current
|
||||
|
@ -1,4 +1,4 @@
|
||||
*insert.txt* For Vim version 7.0aa. Last change: 2005 Sep 15
|
||||
*insert.txt* For Vim version 7.0aa. Last change: 2005 Sep 18
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -990,16 +990,17 @@ are included.
|
||||
|
||||
When using after CTRL-X CTRL-O after "<" it is completed with tag name
|
||||
available in current context. Inside of tag completion aids to choose
|
||||
proper attributes, and when possible choose appropriate attribute value.
|
||||
proper attributes, and when possible choose appropriate attribute value
|
||||
including class names for CSS styles.
|
||||
|
||||
When used after "</" CTRL-X CTRL-O will close the last opened tag.
|
||||
|
||||
File htmlcompletion.vim provides through autoload mechanism
|
||||
File htmlcomplete.vim provides through |autoload| mechanism
|
||||
GetLastOpenTag function which can be used in XML files to get name of
|
||||
last open tag with: >
|
||||
|
||||
:echo htmlcompletion#GetLastOpenTag("b:unaryTagsStack")
|
||||
<
|
||||
:echo htmlcomplete#GetLastOpenTag("b:unaryTagsStack")
|
||||
|
||||
|
||||
==============================================================================
|
||||
8. Insert mode commands *inserting*
|
||||
|
@ -4992,6 +4992,7 @@ ft-fvwm-syntax syntax.txt /*ft-fvwm-syntax*
|
||||
ft-groff-syntax syntax.txt /*ft-groff-syntax*
|
||||
ft-gsp-syntax syntax.txt /*ft-gsp-syntax*
|
||||
ft-haskell-syntax syntax.txt /*ft-haskell-syntax*
|
||||
ft-html-omni insert.txt /*ft-html-omni*
|
||||
ft-html-syntax syntax.txt /*ft-html-syntax*
|
||||
ft-htmlos-syntax syntax.txt /*ft-htmlos-syntax*
|
||||
ft-ia64-syntax syntax.txt /*ft-ia64-syntax*
|
||||
@ -5163,6 +5164,7 @@ getchar() eval.txt /*getchar()*
|
||||
getcharmod() eval.txt /*getcharmod()*
|
||||
getcmdline() eval.txt /*getcmdline()*
|
||||
getcmdpos() eval.txt /*getcmdpos()*
|
||||
getcmdtype() eval.txt /*getcmdtype()*
|
||||
getcwd() eval.txt /*getcwd()*
|
||||
getfontname() eval.txt /*getfontname()*
|
||||
getfperm() eval.txt /*getfperm()*
|
||||
@ -5294,6 +5296,7 @@ hebrew hebrew.txt /*hebrew*
|
||||
hebrew.txt hebrew.txt /*hebrew.txt*
|
||||
help various.txt /*help*
|
||||
help-context help.txt /*help-context*
|
||||
help-tags tags 1
|
||||
help-translated various.txt /*help-translated*
|
||||
help-xterm-window various.txt /*help-xterm-window*
|
||||
help.txt help.txt /*help.txt*
|
||||
@ -7319,6 +7322,13 @@ zf fold.txt /*zf*
|
||||
zg spell.txt /*zg*
|
||||
zh scroll.txt /*zh*
|
||||
zi fold.txt /*zi*
|
||||
zip zip.txt /*zip*
|
||||
zip-contents zip.txt /*zip-contents*
|
||||
zip-copyright zip.txt /*zip-copyright*
|
||||
zip-history zip.txt /*zip-history*
|
||||
zip-manual zip.txt /*zip-manual*
|
||||
zip-usage zip.txt /*zip-usage*
|
||||
zip.txt zip.txt /*zip.txt*
|
||||
zj fold.txt /*zj*
|
||||
zk fold.txt /*zk*
|
||||
zl scroll.txt /*zl*
|
||||
|
@ -1,4 +1,4 @@
|
||||
*todo.txt* For Vim version 7.0aa. Last change: 2005 Sep 16
|
||||
*todo.txt* For Vim version 7.0aa. Last change: 2005 Sep 20
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -32,6 +32,20 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
|
||||
|
||||
Test11 fails sometimes. (athena, huge features)
|
||||
|
||||
ml_get errors: :%s/^\_s\+$//gc
|
||||
And: Insert mode in one window, long file, click in other window, short file.
|
||||
|
||||
'scrolljump' negative used as a percentage, e.g. -50 is 50% of window height?
|
||||
|
||||
Spelling:
|
||||
- suggestion for "a an" includes "an an", which is marked bad. Check
|
||||
suggestions for not being a bad word (when split)?
|
||||
- CTRL-X s doesn't consider 'spellcapcheck'.
|
||||
- Have spellbadword() return a list with bad word and reason it's bad?
|
||||
(rare/local/bad/caps)
|
||||
- spellsuggest() needs a way to require a capital. A flag or context?
|
||||
- Underscore in REP items stands for space.
|
||||
|
||||
ccomplete:
|
||||
- How to use a popup menu?
|
||||
- When a typedef or struct is local to a file only use it in that file?
|
||||
@ -1726,7 +1740,6 @@ Built-in script language:
|
||||
filecopy(from, to) Copy a file
|
||||
shorten(fname) shorten a file name, like home_replace()
|
||||
perl(cmd) call Perl and return string
|
||||
input(prompt, complete) like input() but do specified completion
|
||||
inputrl() like input() but right-to-left
|
||||
virtualmode() add argument to obtain whether "$" was used in
|
||||
Visual block mode.
|
||||
|
@ -447,6 +447,8 @@ New functions: ~
|
||||
|get()| get an item from a List or Dictionary
|
||||
|getbufline()| get a list of lines from a specified buffer
|
||||
(Yegappan Lakshmanan)
|
||||
|getcmdtype()| return the current command-line type
|
||||
(Yegappan Lakshmanan)
|
||||
|getfontname()| get actual font name being used
|
||||
|getfperm()| get file permission string (Nikolai Weibull)
|
||||
|getftype()| get type of file (Nikolai Weibull)
|
||||
@ -812,6 +814,9 @@ Also support t_SI and t_EI on Unix with normal features. (Ciaran McCreesh)
|
||||
When 'foldcolumn' is one then put as much info in it as possible. This allows
|
||||
closing a fold with the mouse by clicking on the '-'.
|
||||
|
||||
input() takes an optional completion argument to specify the type of
|
||||
completion supported for the input. (Yegappan Lakshmanan)
|
||||
|
||||
==============================================================================
|
||||
COMPILE TIME CHANGES *compile-changes-7*
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
" Vim support file to detect file types
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2005 Aug 29
|
||||
" Last Change: 2005 Sep 19
|
||||
|
||||
" Listen very carefully, I will say this only once
|
||||
if exists("did_load_filetypes")
|
||||
@ -1882,6 +1882,9 @@ au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
|
||||
" Most of these should call s:StarSetf() to avoid names ending in .gz and the
|
||||
" like are used.
|
||||
|
||||
" Asterisk config file
|
||||
au BufNewFile,BufRead *asterisk/*.conf* call s:StarSetf('asterisk')
|
||||
|
||||
" BIND zone
|
||||
au BufNewFile,BufRead /var/named/* call s:StarSetf('bindzone')
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
" Vim support file to detect file types in scripts
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last change: 2005 May 20
|
||||
" Last change: 2005 Sep 20
|
||||
|
||||
" This file is called by an autocommand for every file that has just been
|
||||
" loaded into a buffer. It checks if the type of file can be recognized by
|
||||
@ -182,6 +182,7 @@ else
|
||||
" - "Index: <filename>" in the first line (CVS file)
|
||||
elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\)'
|
||||
\ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
|
||||
\ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
|
||||
\ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
|
||||
set ft=diff
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
*** en_US.orig.aff Fri Apr 15 13:20:36 2005
|
||||
--- en_US.aff Sun Jul 31 22:17:40 2005
|
||||
--- en_US.aff Tue Sep 20 19:41:00 2005
|
||||
***************
|
||||
*** 3,4 ****
|
||||
--- 3,134 ----
|
||||
@ -164,6 +164,15 @@
|
||||
SFX G e ing e
|
||||
! SFX G 0 ing [^e]
|
||||
|
||||
***************
|
||||
*** 99,101 ****
|
||||
|
||||
! REP 88
|
||||
REP a ei
|
||||
--- 229,231 ----
|
||||
|
||||
! REP 91
|
||||
REP a ei
|
||||
***************
|
||||
*** 137,138 ****
|
||||
--- 267,270 ----
|
||||
@ -171,6 +180,20 @@
|
||||
+ REP y ie
|
||||
+ REP ie y
|
||||
REP i ee
|
||||
***************
|
||||
*** 174,175 ****
|
||||
--- 306,308 ----
|
||||
REP ew ue
|
||||
+ REP uf ough
|
||||
REP uff ough
|
||||
***************
|
||||
*** 188 ****
|
||||
--- 321,325 ----
|
||||
REP shun cion
|
||||
+ REP the_the the
|
||||
+ REP an_an an
|
||||
+ REP an_a a
|
||||
+ REP a_an an
|
||||
*** en_US.orig.dic Fri Apr 15 13:20:36 2005
|
||||
--- en_US.dic Tue Aug 16 17:03:31 2005
|
||||
***************
|
||||
|
@ -141,7 +141,7 @@
|
||||
+ REP zoz z.o.z.
|
||||
+
|
||||
*** nl_NL.orig.dic Sun Jul 3 18:24:07 2005
|
||||
--- nl_NL.dic Sat Aug 13 14:10:15 2005
|
||||
--- nl_NL.dic Mon Sep 19 20:25:09 2005
|
||||
***************
|
||||
*** 1,3 ****
|
||||
119937
|
||||
@ -259,7 +259,7 @@
|
||||
voorjaarsmoeheid
|
||||
***************
|
||||
*** 119938 ****
|
||||
--- 119963,120139 ----
|
||||
--- 119963,120142 ----
|
||||
überhaupt
|
||||
+ Christiaan/X
|
||||
+ Fred/X
|
||||
@ -436,4 +436,7 @@
|
||||
+ bijv.
|
||||
+ Gerard
|
||||
+ Google
|
||||
+ Luc
|
||||
+ Luuk
|
||||
+ Gert
|
||||
+ Marion
|
||||
|
73
runtime/syntax/asterisk.vim
Normal file
73
runtime/syntax/asterisk.vim
Normal file
@ -0,0 +1,73 @@
|
||||
" Vim syntax file
|
||||
" Language: Asterisk config file
|
||||
" Maintainer: brc007
|
||||
" Last Change: 2005 Sep 19
|
||||
" version 0.2
|
||||
"
|
||||
" Additional changes made 2005 Mar 7 by Corydon76
|
||||
" * CVS priority, including n and s, and new label definitions
|
||||
" * ENV( and LEN( support
|
||||
" * Class patterns in extensions now match only the class pattern (instead of to a following expression)
|
||||
" * anthm's functions are matched
|
||||
" * Variables now appear in their own colors inside expressions
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
"testing only
|
||||
syn sync clear
|
||||
syn sync fromstart
|
||||
|
||||
|
||||
syn keyword asteriskTodo TODO contained
|
||||
syn match asteriskComment ";.*" contains=asteriskTodo
|
||||
syn match asteriskContext "\[.\{-}\]"
|
||||
syn match asteriskExten "^\s*exten\s*=>"
|
||||
syn match asteriskApp "\s*,\s*\zs[a-zA-Z]*\ze"
|
||||
" Digits plus oldlabel (newlabel)
|
||||
syn match asteriskPriority ",[[:digit:]]\+\(+[[:alpha:]][[:alnum:]_]*\)\?\(([[:alpha:]][[:alnum:]_]*)\)\?,"
|
||||
" s or n plus digits (newlabel)
|
||||
syn match asteriskPriority ",[sn]\(+[[:digit:]]\+\)\?\(([[:alpha:]][[:alnum:]_]*)\)\?,"
|
||||
syn match asteriskIncludeBad "^\s*#\s*[[:alnum:]]*"
|
||||
syn match asteriskInclude "^\s#\sinclude\s.*"
|
||||
syn match asteriskVar "\${_\{0,2}[[:alpha:]][[:alnum:]_]*\(:[[:digit:]]\+\)\{0,2}}"
|
||||
syn match asteriskVarLen "\${_\{0,2}[[:alpha:]][[:alnum:]_]*(.\{-})}" contains=asteriskVar,asteriskVarLen,asteriskExp
|
||||
syn match asteriskExp "\$\[.\{-}\]" contains=asteriskVar,asteriskVarLen,asteriskExp
|
||||
syn match asteriskFunc "\$([[:alpha:]][[:alnum:]_]*.*)" contains=asteriskVar,asteriskVarLen,asteriskExp
|
||||
|
||||
" Define the default highlighting.
|
||||
" For version 5.7 and earlier: only when not done already
|
||||
" For version 5.8 and later: only when an item doesn't have highlighting yet
|
||||
:if version >= 508 || !exists("did_conf_syntax_inits")
|
||||
if version < 508
|
||||
let did_conf_syntax_inits = 1
|
||||
command -nargs=+ HiLink hi link <args>
|
||||
else
|
||||
command -nargs=+ HiLink hi def link <args>
|
||||
endif
|
||||
|
||||
|
||||
HiLink asteriskComment Comment
|
||||
" not sure what type this should be, using String for testing.
|
||||
HiLink asteriskExten String
|
||||
" same here
|
||||
HiLink asteriskContext Identifier
|
||||
HiLink asteriskApplication Statement
|
||||
HiLink asteriskInclude Preproc
|
||||
HiLink asteriskIncludeBad Error
|
||||
HiLink asteriskPriority Preproc
|
||||
HiLink asteriskVar String
|
||||
HiLink asteriskVarLen Function
|
||||
HiLink asteriskExp Type
|
||||
delcommand HiLink
|
||||
endif
|
||||
|
||||
|
||||
let b:current_syntax = "asterisk"
|
||||
|
||||
" vim: ts=8 sw=2
|
@ -668,18 +668,18 @@ ex_diffupdate(eap)
|
||||
for (;;)
|
||||
{
|
||||
ok = FALSE;
|
||||
fd = fopen((char *)tmp_orig, "w");
|
||||
fd = mch_fopen((char *)tmp_orig, "w");
|
||||
if (fd != NULL)
|
||||
{
|
||||
fwrite("line1\n", (size_t)6, (size_t)1, fd);
|
||||
fclose(fd);
|
||||
fd = fopen((char *)tmp_new, "w");
|
||||
fd = mch_fopen((char *)tmp_new, "w");
|
||||
if (fd != NULL)
|
||||
{
|
||||
fwrite("line2\n", (size_t)6, (size_t)1, fd);
|
||||
fclose(fd);
|
||||
diff_file(tmp_orig, tmp_new, tmp_diff);
|
||||
fd = fopen((char *)tmp_diff, "r");
|
||||
fd = mch_fopen((char *)tmp_diff, "r");
|
||||
if (fd != NULL)
|
||||
{
|
||||
char_u linebuf[LBUFLEN];
|
||||
@ -1144,7 +1144,7 @@ diff_read(idx_orig, idx_new, fname)
|
||||
long count_orig, count_new;
|
||||
int notset = TRUE; /* block "*dp" not set yet */
|
||||
|
||||
fd = fopen((char *)fname, "r");
|
||||
fd = mch_fopen((char *)fname, "r");
|
||||
if (fd == NULL)
|
||||
{
|
||||
EMSG(_("E98: Cannot read diff output"));
|
||||
|
50
src/eval.c
50
src/eval.c
@ -504,6 +504,7 @@ static void f_getchar __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_getcharmod __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_getcmdline __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_getcmdpos __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_getcmdtype __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_getcwd __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_getfontname __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_getfperm __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
@ -6769,6 +6770,7 @@ static struct fst
|
||||
{"getcharmod", 0, 0, f_getcharmod},
|
||||
{"getcmdline", 0, 0, f_getcmdline},
|
||||
{"getcmdpos", 0, 0, f_getcmdpos},
|
||||
{"getcmdtype", 0, 0, f_getcmdtype},
|
||||
{"getcwd", 0, 0, f_getcwd},
|
||||
{"getfontname", 0, 1, f_getfontname},
|
||||
{"getfperm", 1, 1, f_getfperm},
|
||||
@ -6799,7 +6801,7 @@ static struct fst
|
||||
{"iconv", 3, 3, f_iconv},
|
||||
{"indent", 1, 1, f_indent},
|
||||
{"index", 2, 4, f_index},
|
||||
{"input", 1, 2, f_input},
|
||||
{"input", 1, 3, f_input},
|
||||
{"inputdialog", 1, 3, f_inputdialog},
|
||||
{"inputlist", 1, 1, f_inputlist},
|
||||
{"inputrestore", 0, 0, f_inputrestore},
|
||||
@ -9437,6 +9439,24 @@ f_getcmdpos(argvars, rettv)
|
||||
rettv->vval.v_number = get_cmdline_pos() + 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* "getcmdtype()" function
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
static void
|
||||
f_getcmdtype(argvars, rettv)
|
||||
typval_T *argvars;
|
||||
typval_T *rettv;
|
||||
{
|
||||
rettv->v_type = VAR_STRING;
|
||||
rettv->vval.v_string = alloc(2);
|
||||
if (rettv->vval.v_string != NULL)
|
||||
{
|
||||
rettv->vval.v_string[0] = get_cmdline_type();
|
||||
rettv->vval.v_string[1] = NUL;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* "getcwd()" function
|
||||
*/
|
||||
@ -10794,6 +10814,8 @@ f_input(argvars, rettv)
|
||||
char_u buf[NUMBUFLEN];
|
||||
int cmd_silent_save = cmd_silent;
|
||||
char_u *defstr = (char_u *)"";
|
||||
int xp_type = EXPAND_NOTHING;
|
||||
char_u *xp_arg = NULL;
|
||||
|
||||
rettv->v_type = VAR_STRING;
|
||||
|
||||
@ -10835,9 +10857,31 @@ f_input(argvars, rettv)
|
||||
stuffReadbuffSpec(defstr);
|
||||
}
|
||||
|
||||
if (argvars[2].v_type != VAR_UNKNOWN)
|
||||
{
|
||||
char_u *xp_name;
|
||||
int xp_namelen;
|
||||
long argt;
|
||||
|
||||
rettv->vval.v_string = NULL;
|
||||
|
||||
xp_name = get_tv_string_buf_chk(&argvars[2], buf);
|
||||
if (xp_name == NULL)
|
||||
return;
|
||||
|
||||
xp_namelen = STRLEN(xp_name);
|
||||
|
||||
if (parse_compl_arg(xp_name, xp_namelen, &xp_type, &argt, &xp_arg)
|
||||
== FAIL)
|
||||
return;
|
||||
}
|
||||
|
||||
if (defstr != NULL)
|
||||
rettv->vval.v_string =
|
||||
getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr);
|
||||
getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
|
||||
xp_type, xp_arg);
|
||||
|
||||
vim_free(xp_arg);
|
||||
|
||||
/* since the user typed this, no need to wait for return */
|
||||
need_wait_return = FALSE;
|
||||
@ -17680,10 +17724,8 @@ list_func_head(fp, indent)
|
||||
}
|
||||
msg_putchar(')');
|
||||
msg_clr_eos();
|
||||
#ifdef FEAT_EVAL
|
||||
if (p_verbose > 0)
|
||||
last_set_msg(fp->uf_script_ID);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -5688,7 +5688,7 @@ fix_help_buffer()
|
||||
{
|
||||
for (fi = 0; fi < fcount; ++fi)
|
||||
{
|
||||
fd = fopen((char *)fnames[fi], "r");
|
||||
fd = mch_fopen((char *)fnames[fi], "r");
|
||||
if (fd != NULL)
|
||||
{
|
||||
vim_fgets(IObuff, IOSIZE, fd);
|
||||
@ -5953,7 +5953,7 @@ helptags_one(dir, ext, tagfname)
|
||||
STRCPY(NameBuff, dir);
|
||||
add_pathsep(NameBuff);
|
||||
STRCAT(NameBuff, tagfname);
|
||||
fd_tags = fopen((char *)NameBuff, "w");
|
||||
fd_tags = mch_fopen((char *)NameBuff, "w");
|
||||
if (fd_tags == NULL)
|
||||
{
|
||||
EMSG2(_("E152: Cannot open %s for writing"), NameBuff);
|
||||
@ -5988,7 +5988,7 @@ helptags_one(dir, ext, tagfname)
|
||||
*/
|
||||
for (fi = 0; fi < filecount && !got_int; ++fi)
|
||||
{
|
||||
fd = fopen((char *)files[fi], "r");
|
||||
fd = mch_fopen((char *)files[fi], "r");
|
||||
if (fd == NULL)
|
||||
{
|
||||
EMSG2(_("E153: Unable to open %s for reading"), files[fi]);
|
||||
|
@ -167,7 +167,7 @@ do_debug(cmd)
|
||||
if (!debug_greedy)
|
||||
save_typeahead(&typeaheadbuf);
|
||||
|
||||
cmdline = getcmdline_prompt('>', NULL, 0);
|
||||
cmdline = getcmdline_prompt('>', NULL, 0, EXPAND_NOTHING, NULL);
|
||||
|
||||
if (!debug_greedy)
|
||||
restore_typeahead(&typeaheadbuf);
|
||||
@ -1031,7 +1031,7 @@ profile_dump()
|
||||
|
||||
if (profile_fname != NULL)
|
||||
{
|
||||
fd = fopen((char *)profile_fname, "w");
|
||||
fd = mch_fopen((char *)profile_fname, "w");
|
||||
if (fd == NULL)
|
||||
EMSG2(_(e_notopen), profile_fname);
|
||||
else
|
||||
@ -1149,7 +1149,7 @@ script_dump_profile(fd)
|
||||
fprintf(fd, "\n");
|
||||
fprintf(fd, "count total (s) self (s)\n");
|
||||
|
||||
sfd = fopen((char *)si->sn_name, "r");
|
||||
sfd = mch_fopen((char *)si->sn_name, "r");
|
||||
if (sfd == NULL)
|
||||
fprintf(fd, "Cannot open file!\n");
|
||||
else
|
||||
|
137
src/ex_docmd.c
137
src/ex_docmd.c
@ -5267,66 +5267,15 @@ invalid_count:
|
||||
}
|
||||
else if (STRNICMP(attr, "complete", attrlen) == 0)
|
||||
{
|
||||
char_u *arg = NULL;
|
||||
size_t arglen = 0;
|
||||
|
||||
if (val == NULL)
|
||||
{
|
||||
EMSG(_("E179: argument required for complete"));
|
||||
EMSG(_("E179: argument required for -complete"));
|
||||
return FAIL;
|
||||
}
|
||||
/* Look for any argument part - which is the part after any ',' */
|
||||
for (i = 0; i < (int)vallen; ++i)
|
||||
{
|
||||
if (val[i] == ',')
|
||||
{
|
||||
arg = &val[i + 1];
|
||||
arglen = vallen - i - 1;
|
||||
vallen = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; command_complete[i].expand != 0; ++i)
|
||||
{
|
||||
if (STRLEN(command_complete[i].name) == vallen
|
||||
&& STRNCMP(val, command_complete[i].name, vallen) == 0)
|
||||
{
|
||||
*compl = command_complete[i].expand;
|
||||
if (command_complete[i].expand == EXPAND_BUFFERS)
|
||||
*argt |= BUFNAME;
|
||||
else if (command_complete[i].expand == EXPAND_DIRECTORIES
|
||||
|| command_complete[i].expand == EXPAND_FILES)
|
||||
*argt |= XFILE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (command_complete[i].expand == 0)
|
||||
{
|
||||
EMSG2(_("E180: Invalid complete value: %s"), val);
|
||||
if (parse_compl_arg(val, (int)vallen, compl, argt, compl_arg)
|
||||
== FAIL)
|
||||
return FAIL;
|
||||
}
|
||||
#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
|
||||
if (*compl != EXPAND_USER_DEFINED && *compl != EXPAND_USER_LIST &&
|
||||
arg != NULL)
|
||||
#else
|
||||
if (arg != NULL)
|
||||
#endif
|
||||
{
|
||||
EMSG(_("E468: Completion argument only allowed for custom completion"));
|
||||
return FAIL;
|
||||
}
|
||||
#if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
|
||||
if ((*compl == EXPAND_USER_DEFINED || *compl == EXPAND_USER_LIST) &&
|
||||
arg == NULL)
|
||||
{
|
||||
EMSG(_("E467: Custom completion requires a function argument"));
|
||||
return FAIL;
|
||||
}
|
||||
if (arg != NULL)
|
||||
*compl_arg = vim_strnsave(arg, (int)arglen);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -5914,6 +5863,86 @@ get_user_cmd_complete(xp, idx)
|
||||
|
||||
#endif /* FEAT_USR_CMDS */
|
||||
|
||||
#if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
|
||||
/*
|
||||
* Parse a completion argument "value[vallen]".
|
||||
* The detected completion goes in "*complp", argument type in "*argt".
|
||||
* When there is an argument, for function and user defined completion, it's
|
||||
* copied to allocated memory and stored in "*compl_arg".
|
||||
* Returns FAIL if something is wrong.
|
||||
*/
|
||||
int
|
||||
parse_compl_arg(value, vallen, complp, argt, compl_arg)
|
||||
char_u *value;
|
||||
int vallen;
|
||||
int *complp;
|
||||
long *argt;
|
||||
char_u **compl_arg;
|
||||
{
|
||||
char_u *arg = NULL;
|
||||
size_t arglen = 0;
|
||||
int i;
|
||||
int valend = vallen;
|
||||
|
||||
/* Look for any argument part - which is the part after any ',' */
|
||||
for (i = 0; i < vallen; ++i)
|
||||
{
|
||||
if (value[i] == ',')
|
||||
{
|
||||
arg = &value[i + 1];
|
||||
arglen = vallen - i - 1;
|
||||
valend = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; command_complete[i].expand != 0; ++i)
|
||||
{
|
||||
if (STRLEN(command_complete[i].name) == valend
|
||||
&& STRNCMP(value, command_complete[i].name, valend) == 0)
|
||||
{
|
||||
*complp = command_complete[i].expand;
|
||||
if (command_complete[i].expand == EXPAND_BUFFERS)
|
||||
*argt |= BUFNAME;
|
||||
else if (command_complete[i].expand == EXPAND_DIRECTORIES
|
||||
|| command_complete[i].expand == EXPAND_FILES)
|
||||
*argt |= XFILE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (command_complete[i].expand == 0)
|
||||
{
|
||||
EMSG2(_("E180: Invalid complete value: %s"), value);
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
|
||||
if (*complp != EXPAND_USER_DEFINED && *complp != EXPAND_USER_LIST
|
||||
&& arg != NULL)
|
||||
# else
|
||||
if (arg != NULL)
|
||||
# endif
|
||||
{
|
||||
EMSG(_("E468: Completion argument only allowed for custom completion"));
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
|
||||
if ((*complp == EXPAND_USER_DEFINED || *complp == EXPAND_USER_LIST)
|
||||
&& arg == NULL)
|
||||
{
|
||||
EMSG(_("E467: Custom completion requires a function argument"));
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
if (arg != NULL)
|
||||
*compl_arg = vim_strnsave(arg, (int)arglen);
|
||||
# endif
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
ex_colorscheme(eap)
|
||||
exarg_T *eap;
|
||||
|
@ -31,6 +31,11 @@ struct cmdline_info
|
||||
int cmdattr; /* attributes for prompt */
|
||||
int overstrike; /* Typing mode on the command line. Shared by
|
||||
getcmdline() and put_on_cmdline(). */
|
||||
int xp_context; /* type of expansion */
|
||||
# ifdef FEAT_EVAL
|
||||
char_u *xp_arg; /* user-defined expansion arg */
|
||||
int input_fn; /* Invoked for input() function */
|
||||
# endif
|
||||
};
|
||||
|
||||
static struct cmdline_info ccline; /* current cmdline_info */
|
||||
@ -254,6 +259,15 @@ getcmdline(firstc, count, indent)
|
||||
xpc.xp_context = EXPAND_NOTHING;
|
||||
xpc.xp_backslash = XP_BS_NONE;
|
||||
|
||||
#if defined(FEAT_EVAL)
|
||||
if (ccline.input_fn)
|
||||
{
|
||||
xpc.xp_context = ccline.xp_context;
|
||||
xpc.xp_pattern = ccline.cmdbuff;
|
||||
xpc.xp_arg = ccline.xp_arg;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Avoid scrolling when called by a recursive do_cmdline(), e.g. when
|
||||
* doing ":@0" when register 0 doesn't contain a CR.
|
||||
@ -414,6 +428,13 @@ getcmdline(firstc, count, indent)
|
||||
if (p_wmnu && wild_menu_showing != 0)
|
||||
{
|
||||
int skt = KeyTyped;
|
||||
int old_RedrawingDisabled;
|
||||
|
||||
if (ccline.input_fn)
|
||||
{
|
||||
old_RedrawingDisabled = RedrawingDisabled;
|
||||
RedrawingDisabled = 0;
|
||||
}
|
||||
|
||||
if (wild_menu_showing == WM_SCROLLED)
|
||||
{
|
||||
@ -442,6 +463,8 @@ getcmdline(firstc, count, indent)
|
||||
# endif
|
||||
redraw_statuslines();
|
||||
}
|
||||
if (ccline.input_fn)
|
||||
RedrawingDisabled = old_RedrawingDisabled;
|
||||
KeyTyped = skt;
|
||||
wild_menu_showing = 0;
|
||||
}
|
||||
@ -1791,10 +1814,12 @@ returncmd:
|
||||
* Returns the command line in allocated memory, or NULL.
|
||||
*/
|
||||
char_u *
|
||||
getcmdline_prompt(firstc, prompt, attr)
|
||||
getcmdline_prompt(firstc, prompt, attr, xp_context, xp_arg)
|
||||
int firstc;
|
||||
char_u *prompt; /* command line prompt */
|
||||
int attr; /* attributes for prompt */
|
||||
int xp_context; /* type of expansion */
|
||||
char_u *xp_arg; /* user-defined expansion argument */
|
||||
{
|
||||
char_u *s;
|
||||
struct cmdline_info save_ccline;
|
||||
@ -1803,6 +1828,11 @@ getcmdline_prompt(firstc, prompt, attr)
|
||||
save_cmdline(&save_ccline);
|
||||
ccline.cmdprompt = prompt;
|
||||
ccline.cmdattr = attr;
|
||||
# ifdef FEAT_EVAL
|
||||
ccline.xp_context = xp_context;
|
||||
ccline.xp_arg = xp_arg;
|
||||
ccline.input_fn = (firstc == '@');
|
||||
# endif
|
||||
s = getcmdline(firstc, 1L, 0);
|
||||
restore_cmdline(&save_ccline);
|
||||
/* Restore msg_col, the prompt from input() may have changed it. */
|
||||
@ -1830,7 +1860,7 @@ cmdline_charsize(idx)
|
||||
static void
|
||||
set_cmdspos()
|
||||
{
|
||||
if (ccline.cmdfirstc)
|
||||
if (ccline.cmdfirstc != NUL)
|
||||
ccline.cmdspos = 1 + ccline.cmdindent;
|
||||
else
|
||||
ccline.cmdspos = 0 + ccline.cmdindent;
|
||||
@ -2222,7 +2252,7 @@ redrawcmd_preedit()
|
||||
|
||||
old_row = msg_row;
|
||||
old_col = msg_col;
|
||||
cmdspos = ((ccline.cmdfirstc) ? 1 : 0) + ccline.cmdindent;
|
||||
cmdspos = ((ccline.cmdfirstc != NUL) ? 1 : 0) + ccline.cmdindent;
|
||||
|
||||
# ifdef FEAT_MBYTE
|
||||
if (has_mbyte)
|
||||
@ -2813,14 +2843,14 @@ redrawcmdprompt()
|
||||
|
||||
if (cmd_silent)
|
||||
return;
|
||||
if (ccline.cmdfirstc)
|
||||
if (ccline.cmdfirstc != NUL)
|
||||
msg_putchar(ccline.cmdfirstc);
|
||||
if (ccline.cmdprompt != NULL)
|
||||
{
|
||||
msg_puts_attr(ccline.cmdprompt, ccline.cmdattr);
|
||||
ccline.cmdindent = msg_col + (msg_row - cmdline_row) * Columns;
|
||||
/* do the reverse of set_cmdspos() */
|
||||
if (ccline.cmdfirstc)
|
||||
if (ccline.cmdfirstc != NUL)
|
||||
--ccline.cmdindent;
|
||||
}
|
||||
else
|
||||
@ -3843,6 +3873,7 @@ set_expand_context(xp)
|
||||
if (ccline.cmdfirstc != ':'
|
||||
#ifdef FEAT_EVAL
|
||||
&& ccline.cmdfirstc != '>' && ccline.cmdfirstc != '='
|
||||
&& !ccline.input_fn
|
||||
#endif
|
||||
)
|
||||
{
|
||||
@ -3875,6 +3906,12 @@ set_cmd_context(xp, str, len, col)
|
||||
if (ccline.cmdfirstc == '=')
|
||||
/* pass CMD_SIZE because there is no real command */
|
||||
set_context_for_expression(xp, str, CMD_SIZE);
|
||||
else if (ccline.input_fn)
|
||||
{
|
||||
xp->xp_context = ccline.xp_context;
|
||||
xp->xp_pattern = ccline.cmdbuff;
|
||||
xp->xp_arg = ccline.xp_arg;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
while (nextcomm != NULL)
|
||||
@ -4837,6 +4874,22 @@ set_cmdline_pos(pos)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the current command-line type.
|
||||
* Returns ':' or '/' or '?' or '@' or '>'
|
||||
* Only works when the command line is being edited.
|
||||
* Returns NUL when something is wrong.
|
||||
*/
|
||||
int
|
||||
get_cmdline_type()
|
||||
{
|
||||
struct cmdline_info *p = get_ccline_ptr();
|
||||
|
||||
if (p == NULL)
|
||||
return NUL;
|
||||
return p->cmdfirstc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate history index from a number:
|
||||
* num > 0: seen as identifying number of a history entry
|
||||
|
@ -3483,12 +3483,11 @@ buf_write(buf, fname, sfname, start, end, eap, append, forceit,
|
||||
}
|
||||
if (backup != NULL)
|
||||
{
|
||||
|
||||
/*
|
||||
* Delete any existing backup and move the current version to
|
||||
* the backup. For safety, we don't remove the backup until
|
||||
* the write has finished successfully. And if the 'backup'
|
||||
* option is set, leave it around.
|
||||
* Delete any existing backup and move the current version
|
||||
* to the backup. For safety, we don't remove the backup
|
||||
* until the write has finished successfully. And if the
|
||||
* 'backup' option is set, leave it around.
|
||||
*/
|
||||
/*
|
||||
* If the renaming of the original file to the backup file
|
||||
|
@ -1098,7 +1098,7 @@ cs_find_common(opt, pat, forceit, verbose)
|
||||
FILE *f;
|
||||
char_u *tmp = vim_tempname('c');
|
||||
|
||||
f = fopen((char *)tmp, "w");
|
||||
f = mch_fopen((char *)tmp, "w");
|
||||
cs_file_results(f, nummatches);
|
||||
fclose(f);
|
||||
/* '-' starts a new error list */
|
||||
|
@ -201,7 +201,7 @@ main
|
||||
#endif
|
||||
|
||||
#ifdef STARTUPTIME
|
||||
time_fd = fopen(STARTUPTIME, "a");
|
||||
time_fd = mch_fopen(STARTUPTIME, "a");
|
||||
TIME_MSG("--- VIM STARTING ---");
|
||||
#endif
|
||||
|
||||
|
@ -161,7 +161,7 @@ xim_log(char *s, ...)
|
||||
return;
|
||||
if (fd == NULL)
|
||||
{
|
||||
fd = fopen("xim.log", "w");
|
||||
fd = mch_fopen("xim.log", "w");
|
||||
if (fd == NULL)
|
||||
{
|
||||
EMSG("Cannot open xim.log");
|
||||
|
@ -3034,7 +3034,7 @@ verbose_open()
|
||||
/* Only give the error message once. */
|
||||
verbose_did_open = TRUE;
|
||||
|
||||
verbose_fd = fopen((char *)p_vfile, "a");
|
||||
verbose_fd = mch_fopen((char *)p_vfile, "a");
|
||||
if (verbose_fd == NULL)
|
||||
{
|
||||
EMSG2(_(e_notopen), p_vfile);
|
||||
|
@ -3512,7 +3512,8 @@ get_crypt_key(store, twice)
|
||||
cmdline_row = msg_row;
|
||||
p1 = getcmdline_prompt(NUL, round == 0
|
||||
? (char_u *)_("Enter encryption key: ")
|
||||
: (char_u *)_("Enter same key again: "), 0);
|
||||
: (char_u *)_("Enter same key again: "), 0, EXPAND_NOTHING,
|
||||
NULL);
|
||||
cmdline_star = FALSE;
|
||||
|
||||
if (p1 == NULL)
|
||||
|
@ -21,6 +21,7 @@ char_u *get_user_commands __ARGS((expand_T *xp, int idx));
|
||||
char_u *get_user_cmd_flags __ARGS((expand_T *xp, int idx));
|
||||
char_u *get_user_cmd_nargs __ARGS((expand_T *xp, int idx));
|
||||
char_u *get_user_cmd_complete __ARGS((expand_T *xp, int idx));
|
||||
int parse_compl_arg __ARGS((char_u *value, int vallen, int *complp, long *argt, char_u **compl_arg));
|
||||
void not_exiting __ARGS((void));
|
||||
void handle_drop __ARGS((int filec, char_u **filev, int split));
|
||||
void alist_clear __ARGS((alist_T *al));
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* ex_getln.c */
|
||||
char_u *getcmdline __ARGS((int firstc, long count, int indent));
|
||||
char_u *getcmdline_prompt __ARGS((int firstc, char_u *prompt, int attr));
|
||||
char_u *getcmdline_prompt __ARGS((int firstc, char_u *prompt, int attr, int xp_context, char_u *xp_arg));
|
||||
char_u *getexline __ARGS((int c, void *dummy, int indent));
|
||||
char_u *getexmodeline __ARGS((int promptc, void *dummy, int indent));
|
||||
int cmdline_overstrike __ARGS((void));
|
||||
@ -33,6 +33,7 @@ int get_history_idx __ARGS((int histype));
|
||||
char_u *get_cmdline_str __ARGS((void));
|
||||
int get_cmdline_pos __ARGS((void));
|
||||
int set_cmdline_pos __ARGS((int pos));
|
||||
int get_cmdline_type __ARGS((void));
|
||||
char_u *get_history_entry __ARGS((int histype, int idx));
|
||||
int clr_history __ARGS((int histype));
|
||||
int del_history_entry __ARGS((int histype, char_u *str));
|
||||
|
@ -3056,7 +3056,7 @@ ex_helpgrep(eap)
|
||||
+ STRLEN(fnames[fi]) - 3, 3) == 0))
|
||||
continue;
|
||||
#endif
|
||||
fd = fopen((char *)fnames[fi], "r");
|
||||
fd = mch_fopen((char *)fnames[fi], "r");
|
||||
if (fd != NULL)
|
||||
{
|
||||
lnum = 1;
|
||||
|
@ -36,5 +36,5 @@
|
||||
#define VIM_VERSION_NODOT "vim70aa"
|
||||
#define VIM_VERSION_SHORT "7.0aa"
|
||||
#define VIM_VERSION_MEDIUM "7.0aa ALPHA"
|
||||
#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 16)"
|
||||
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 16, compiled "
|
||||
#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20)"
|
||||
#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20, compiled "
|
||||
|
Loading…
x
Reference in New Issue
Block a user