diff options
Diffstat (limited to 'autoload')
| -rw-r--r-- | autoload/context.vim | 188 | ||||
| -rw-r--r-- | autoload/polyglot/sleuth.vim | 9 | 
2 files changed, 195 insertions, 2 deletions
| diff --git a/autoload/context.vim b/autoload/context.vim new file mode 100644 index 00000000..43786463 --- /dev/null +++ b/autoload/context.vim @@ -0,0 +1,188 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'context') == -1 + +" Language:           ConTeXt typesetting engine +" Maintainer:         Nicola Vitacolonna <nvitacolonna@gmail.com> +" Latest Revision:    2016 Oct 21 + +let s:keepcpo= &cpo +set cpo&vim + +" Helper functions {{{ +function! s:context_echo(message, mode) +  redraw +  echo "\r" +  execute 'echohl' a:mode +  echomsg '[ConTeXt]' a:message +  echohl None +endf + +function! s:sh() +  return has('win32') || has('win64') || has('win16') || has('win95') +        \ ? ['cmd.exe', '/C'] +        \ : ['/bin/sh', '-c'] +endfunction + +" For backward compatibility +if exists('*win_getid') + +  function! s:win_getid() +    return win_getid() +  endf + +  function! s:win_id2win(winid) +    return win_id2win(a:winid) +  endf + +else + +  function! s:win_getid() +    return winnr() +  endf + +  function! s:win_id2win(winnr) +    return a:winnr +  endf + +endif +" }}} + +" ConTeXt jobs {{{ +if has('job') + +  let g:context_jobs = [] + +  " Print the status of ConTeXt jobs +  function! context#job_status() +    let l:jobs = filter(g:context_jobs, 'job_status(v:val) == "run"') +    let l:n = len(l:jobs) +    call s:context_echo( +          \ 'There '.(l:n == 1 ? 'is' : 'are').' '.(l:n == 0 ? 'no' : l:n) +          \ .' job'.(l:n == 1 ? '' : 's').' running' +          \ .(l:n == 0 ? '.' : ' (' . join(l:jobs, ', ').').'), +          \ 'ModeMsg') +  endfunction + +  " Stop all ConTeXt jobs +  function! context#stop_jobs() +    let l:jobs = filter(g:context_jobs, 'job_status(v:val) == "run"') +    for job in l:jobs +      call job_stop(job) +    endfor +    sleep 1 +    let l:tmp = [] +    for job in l:jobs +      if job_status(job) == "run" +        call add(l:tmp, job) +      endif +    endfor +    let g:context_jobs = l:tmp +    if empty(g:context_jobs) +      call s:context_echo('Done. No jobs running.', 'ModeMsg') +    else +      call s:context_echo('There are still some jobs running. Please try again.', 'WarningMsg') +    endif +  endfunction + +  function! context#callback(path, job, status) +    if index(g:context_jobs, a:job) != -1 && job_status(a:job) != 'run' " just in case +      call remove(g:context_jobs, index(g:context_jobs, a:job)) +    endif +    call s:callback(a:path, a:job, a:status) +  endfunction + +  function! context#close_cb(channel) +    call job_status(ch_getjob(a:channel)) " Trigger exit_cb's callback for faster feedback +  endfunction + +  function! s:typeset(path) +    call add(g:context_jobs, +          \ job_start(add(s:sh(), context#command() . ' ' . shellescape(fnamemodify(a:path, ":t"))), { +          \   'close_cb' : 'context#close_cb', +          \   'exit_cb'  : function(get(b:, 'context_callback', get(g:, 'context_callback', 'context#callback')), +          \                         [a:path]), +          \   'in_io'    : 'null' +          \ })) +  endfunction + +else " No jobs + +  function! context#job_status() +    call s:context_echo('Not implemented', 'WarningMsg') +  endfunction! + +  function! context#stop_jobs() +    call s:context_echo('Not implemented', 'WarningMsg') +  endfunction + +  function! context#callback(path, job, status) +    call s:callback(a:path, a:job, a:status) +  endfunction + +  function! s:typeset(path) +    execute '!' . context#command() . ' ' . shellescape(fnamemodify(a:path, ":t")) +    call call(get(b:, 'context_callback', get(g:, 'context_callback', 'context#callback')), +          \ [a:path, 0, v:shell_error]) +  endfunction + +endif " has('job') + +function! s:callback(path, job, status) abort +  if a:status < 0 " Assume the job was terminated +    return +  endif +  " Get info about the current window +  let l:winid = s:win_getid()             " Save window id +  let l:efm = &l:errorformat              " Save local errorformat +  let l:cwd = fnamemodify(getcwd(), ":p") " Save local working directory +  " Set errorformat to parse ConTeXt errors +  execute 'setl efm=' . escape(b:context_errorformat, ' ') +  try " Set cwd to expand error file correctly +    execute 'lcd' fnameescape(fnamemodify(a:path, ':h')) +  catch /.*/ +    execute 'setl efm=' . escape(l:efm, ' ') +    throw v:exception +  endtry +  try +    execute 'cgetfile' fnameescape(fnamemodify(a:path, ':r') . '.log') +    botright cwindow +  finally " Restore cwd and errorformat +    execute s:win_id2win(l:winid) . 'wincmd w' +    execute 'lcd ' . fnameescape(l:cwd) +    execute 'setl efm=' . escape(l:efm, ' ') +  endtry +  if a:status == 0 +    call s:context_echo('Success!', 'ModeMsg') +  else +    call s:context_echo('There are errors. ', 'ErrorMsg') +  endif +endfunction + +function! context#command() +  return get(b:, 'context_mtxrun', get(g:, 'context_mtxrun', 'mtxrun')) +        \ . ' --script context --autogenerate --nonstopmode' +        \ . ' --synctex=' . (get(b:, 'context_synctex', get(g:, 'context_synctex', 0)) ? '1' : '0') +        \ . ' ' . get(b:, 'context_extra_options', get(g:, 'context_extra_options', '')) +endfunction + +" Accepts an optional path (useful for big projects, when the file you are +" editing is not the project's root document). If no argument is given, uses +" the path of the current buffer. +function! context#typeset(...) abort +  let l:path = fnamemodify(strlen(a:000[0]) > 0 ? a:1 : expand("%"), ":p") +  let l:cwd = fnamemodify(getcwd(), ":p") " Save local working directory +  call s:context_echo('Typesetting...',  'ModeMsg') +  execute 'lcd' fnameescape(fnamemodify(l:path, ":h")) +  try +    call s:typeset(l:path) +  finally " Restore local working directory +    execute 'lcd ' . fnameescape(l:cwd) +  endtry +endfunction! +"}}} + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim: sw=2 fdm=marker + +endif diff --git a/autoload/polyglot/sleuth.vim b/autoload/polyglot/sleuth.vim index f8dc2344..db032dd6 100644 --- a/autoload/polyglot/sleuth.vim +++ b/autoload/polyglot/sleuth.vim @@ -79,6 +79,7 @@ let s:globs = {    \ 'conaryrecipe': '*.recipe',    \ 'conf': '*.conf,auto.master,config',    \ 'config': 'configure.in,configure.ac,Pipfile', +  \ 'context': '*.mkii,*.mkiv,*.mkvi',    \ 'cpp': '*.cpp,*.c++,*.cc,*.cp,*.cxx,*.h,*.h++,*.hh,*.hpp,*.hxx,*.inc,*.inl,*.ipp,*.tcc,*.tpp,*.moc,*.tlh',    \ 'cql': '*.cql',    \ 'crm': '*.crm', @@ -121,6 +122,7 @@ let s:globs = {    \ 'diff': '*.diff,*.rej',    \ 'dircolors': '.dir_colors,.dircolors',    \ 'dnsmasq': '', +  \ 'dockerfile': '*.Dockerfile,*.dock,Containerfile,Dockerfile,dockerfile,Dockerfile*',    \ 'dosbatch': '*.bat,*.sys',    \ 'dosini': '*.wrap,*.ini,*.dof,*.lektorproject,*.prefs,*.pro,*.properties,buildozer.spec,.editorconfig,.npmrc,php.ini-*',    \ 'dot': '*.dot,*.gv', @@ -307,6 +309,7 @@ let s:globs = {    \ 'make': '*.mak,*.dsp,*.mk,*[mM]akefile',    \ 'mako': '*.mako,*.mao',    \ 'mallard': '*.page', +  \ 'man': '*.1,*.1in,*.1m,*.1x,*.2,*.3,*.3in,*.3m,*.3p,*.3pm,*.3qt,*.3x,*.4,*.5,*.6,*.7,*.8,*.9,*.man,*.mdoc',    \ 'manconf': 'man.config',    \ 'map': '*.map',    \ 'maple': '*.mv,*.mpl,*.mws', @@ -382,7 +385,7 @@ let s:globs = {    \ 'perl': '*.pl,*.al,*.cgi,*.fcgi,*.perl,*.ph,*.plx,*.pm,*.psgi,*.t,Makefile.PL,Rexfile,ack,cpanfile,example.gitolite.rc,.gitolite.rc',    \ 'pf': 'pf.conf',    \ 'pfmain': 'main.cf', -  \ 'php': '*.php,*.aw,*.ctp,*.fcgi,*.inc,*.php3,*.php4,*.php5,*.phps,*.phpt,*.phtml,.php,.php_cs,.php_cs.dist,Phakefile', +  \ 'php': '*.php,*.aw,*.ctp,*.fcgi,*.inc,*.php3,*.php4,*.php5,*.phps,*.phpt,*.phtml,*.php9,.php,.php_cs,.php_cs.dist,Phakefile',    \ 'pike': '*.pike,*.pmod',    \ 'pilrc': '*.rcp',    \ 'pine': '.pinerc,pinerc,.pinercex,pinercex', @@ -449,7 +452,7 @@ let s:globs = {    \ 'rrst': '*.rrst,*.srst',    \ 'rst': '*.rst,*.rest,*.rest.txt,*.rst.txt',    \ 'rtf': '*.rtf', -  \ 'ruby': '*.rb,*.builder,*.eye,*.fcgi,*.gemspec,*.god,*.jbuilder,*.mspec,*.pluginspec,*.podspec,*.rabl,*.rake,*.rbi,*.rbuild,*.rbw,*.rbx,*.ru,*.ruby,*.spec,*.thor,*.watchr,*.rxml,*.rjs,*.rant,*.axlsx,*.cap,*.opal,.irbrc,.pryrc,.simplecov,Appraisals,Berksfile,Buildfile,Capfile,Dangerfile,Deliverfile,Fastfile,Gemfile,Gemfile.lock,Guardfile,Jarfile,Mavenfile,Podfile,Puppetfile,Rakefile,Snapfile,Thorfile,Vagrantfile,buildfile,Rantfile,.autotest,Cheffile,KitchenSink,Routefile,.Guardfile,.Brewfile,vagrantfile,[Rr]akefile*,*_spec.rb', +  \ 'ruby': '*.rb,*.builder,*.eye,*.fcgi,*.gemspec,*.god,*.jbuilder,*.mspec,*.pluginspec,*.podspec,*.rabl,*.rake,*.rbi,*.rbuild,*.rbw,*.rbx,*.ru,*.ruby,*.spec,*.thor,*.watchr,*.rxml,*.rjs,*.rant,*.axlsx,*.cap,*.opal,.irbrc,.pryrc,.simplecov,Appraisals,Berksfile,Buildfile,Capfile,Dangerfile,Deliverfile,Fastfile,Gemfile,Gemfile.lock,Guardfile,Jarfile,Mavenfile,Podfile,Puppetfile,Rakefile,Snapfile,Thorfile,Vagrantfile,buildfile,[Rr]antfile,.autotest,Cheffile,KitchenSink,Routefile,.Guardfile,.Brewfile,vagrantfile,[Rr]akefile*,*_spec.rb',    \ 'rust': '*.rs,*.rs.in',    \ 'samba': 'smb.conf',    \ 'sas': '*.sas', @@ -601,6 +604,8 @@ let s:globs = {    \ 'xml': '*.xml,*.adml,*.admx,*.ant,*.axml,*.builds,*.ccproj,*.ccxml,*.clixml,*.cproject,*.cscfg,*.csdef,*.csl,*.csproj,*.ct,*.depproj,*.dita,*.ditamap,*.ditaval,*.dll.config,*.dotsettings,*.filters,*.fsproj,*.fxml,*.glade,*.gml,*.gmx,*.grxml,*.gst,*.iml,*.ivy,*.jelly,*.jsproj,*.kml,*.launch,*.mdpolicy,*.mjml,*.mm,*.mod,*.mxml,*.natvis,*.ncl,*.ndproj,*.nproj,*.nuspec,*.odd,*.osm,*.pkgproj,*.pluginspec,*.proj,*.props,*.psc1,*.pt,*.rdf,*.resx,*.rss,*.sch,*.scxml,*.sfproj,*.shproj,*.srdf,*.storyboard,*.sublime-snippet,*.targets,*.tml,*.ui,*.urdf,*.ux,*.vbproj,*.vcxproj,*.vsixmanifest,*.vssettings,*.vstemplate,*.vxml,*.wixproj,*.workflow,*.wsdl,*.wsf,*.wxi,*.wxl,*.wxs,*.x3d,*.xacro,*.xaml,*.xib,*.xlf,*.xliff,*.xmi,*.xml.dist,*.xproj,*.xsd,*.xspec,*.xul,*.zcml,*.cdxml,*.tpm,*.csproj.user,*.wpl,.classpath,.cproject,.project,App.config,NuGet.config,Settings.StyleCop,Web.Debug.config,Web.Release.config,Web.config,packages.config,*fglrxrc',    \ 'xml.twig': '*.xml.twig',    \ 'xmodmap': '*Xmodmap,*xmodmap*', +  \ 'xpm': '*.xpm,*.pm', +  \ 'xpm2': '*.xpm2',    \ 'xquery': '*.xq,*.xql,*.xqm,*.xquery,*.xqy',    \ 'xs': '*.xs',    \ 'xsd': '*.xsd', | 
