19964e468SBram Moolenaar" ---------------------------------------------------------------------
29964e468SBram Moolenaar" getscript.vim
3ff034194SBram Moolenaar"  Author:	Charles E. Campbell
48d043171SBram Moolenaar"  Date:	Jan 21, 2014
58d043171SBram Moolenaar"  Version:	36
69964e468SBram Moolenaar"  Installing:	:help glvs-install
79964e468SBram Moolenaar"  Usage:	:help glvs
89964e468SBram Moolenaar"
99964e468SBram Moolenaar" GetLatestVimScripts: 642 1 :AutoInstall: getscript.vim
109e368dbaSBram Moolenaar"redraw!|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
119964e468SBram Moolenaar" ---------------------------------------------------------------------
129964e468SBram Moolenaar" Initialization:	{{{1
139964e468SBram Moolenaar" if you're sourcing this file, surely you can't be
143577c6faSBram Moolenaar" expecting vim to be in its vi-compatible mode!
155c73622aSBram Moolenaarif exists("g:loaded_getscript")
165c73622aSBram Moolenaar finish
175c73622aSBram Moolenaarendif
188d043171SBram Moolenaarlet g:loaded_getscript= "v36"
199964e468SBram Moolenaarif &cp
209964e468SBram Moolenaar echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
219964e468SBram Moolenaar finish
229964e468SBram Moolenaarendif
235c73622aSBram Moolenaarif v:version < 702
245c73622aSBram Moolenaar echohl WarningMsg
252963456fSBram Moolenaar echo "***warning*** this version of GetLatestVimScripts needs vim 7.2"
265c73622aSBram Moolenaar echohl Normal
275c73622aSBram Moolenaar finish
285c73622aSBram Moolenaarendif
299964e468SBram Moolenaarlet s:keepcpo = &cpo
309964e468SBram Moolenaarset cpo&vim
3182038d73SBram Moolenaar"DechoTabOn
329964e468SBram Moolenaar
333577c6faSBram Moolenaar" ---------------------------
349964e468SBram Moolenaar" Global Variables: {{{1
353577c6faSBram Moolenaar" ---------------------------
363577c6faSBram Moolenaar" Cygwin Detection ------- {{{2
373577c6faSBram Moolenaarif !exists("g:getscript_cygwin")
383577c6faSBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16")
393577c6faSBram Moolenaar  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
403577c6faSBram Moolenaar   let g:getscript_cygwin= 1
413577c6faSBram Moolenaar  else
423577c6faSBram Moolenaar   let g:getscript_cygwin= 0
433577c6faSBram Moolenaar  endif
443577c6faSBram Moolenaar else
453577c6faSBram Moolenaar  let g:getscript_cygwin= 0
463577c6faSBram Moolenaar endif
473577c6faSBram Moolenaarendif
483577c6faSBram Moolenaar
493577c6faSBram Moolenaar" wget vs curl {{{2
509964e468SBram Moolenaarif !exists("g:GetLatestVimScripts_wget")
519964e468SBram Moolenaar if executable("wget")
529964e468SBram Moolenaar  let g:GetLatestVimScripts_wget= "wget"
539964e468SBram Moolenaar elseif executable("curl")
549964e468SBram Moolenaar  let g:GetLatestVimScripts_wget= "curl"
559964e468SBram Moolenaar else
569964e468SBram Moolenaar  let g:GetLatestVimScripts_wget    = 'echo "GetLatestVimScripts needs wget or curl"'
579964e468SBram Moolenaar  let g:GetLatestVimScripts_options = ""
589964e468SBram Moolenaar endif
599964e468SBram Moolenaarendif
609964e468SBram Moolenaar
619964e468SBram Moolenaar" options that wget and curl require:
629964e468SBram Moolenaarif !exists("g:GetLatestVimScripts_options")
639964e468SBram Moolenaar if g:GetLatestVimScripts_wget == "wget"
649964e468SBram Moolenaar  let g:GetLatestVimScripts_options= "-q -O"
659964e468SBram Moolenaar elseif g:GetLatestVimScripts_wget == "curl"
669964e468SBram Moolenaar  let g:GetLatestVimScripts_options= "-s -O"
679964e468SBram Moolenaar else
689964e468SBram Moolenaar  let g:GetLatestVimScripts_options= ""
699964e468SBram Moolenaar endif
709964e468SBram Moolenaarendif
719964e468SBram Moolenaar
729964e468SBram Moolenaar" by default, allow autoinstall lines to work
739964e468SBram Moolenaarif !exists("g:GetLatestVimScripts_allowautoinstall")
749964e468SBram Moolenaar let g:GetLatestVimScripts_allowautoinstall= 1
759964e468SBram Moolenaarendif
769964e468SBram Moolenaar
77ff034194SBram Moolenaar" set up default scriptaddr address
78ff034194SBram Moolenaarif !exists("g:GetLatestVimScripts_scriptaddr")
79ff034194SBram Moolenaar let g:GetLatestVimScripts_scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='
80ff034194SBram Moolenaarendif
81ff034194SBram Moolenaar
829964e468SBram Moolenaar"" For debugging:
839964e468SBram Moolenaar"let g:GetLatestVimScripts_wget    = "echo"
849964e468SBram Moolenaar"let g:GetLatestVimScripts_options = "options"
859964e468SBram Moolenaar
869964e468SBram Moolenaar" ---------------------------------------------------------------------
879964e468SBram Moolenaar" Check If AutoInstall Capable: {{{1
889964e468SBram Moolenaarlet s:autoinstall= ""
899964e468SBram Moolenaarif g:GetLatestVimScripts_allowautoinstall
909964e468SBram Moolenaar
919964e468SBram Moolenaar if (has("win32") || has("gui_win32") || has("gui_win32s") || has("win16") || has("win64") || has("win32unix") || has("win95")) && &shell != "bash"
929964e468SBram Moolenaar  " windows (but not cygwin/bash)
939964e468SBram Moolenaar  let s:dotvim= "vimfiles"
949964e468SBram Moolenaar  if !exists("g:GetLatestVimScripts_mv")
959964e468SBram Moolenaar   let g:GetLatestVimScripts_mv= "ren"
969964e468SBram Moolenaar  endif
979964e468SBram Moolenaar
989964e468SBram Moolenaar else
999964e468SBram Moolenaar  " unix
1009964e468SBram Moolenaar  let s:dotvim= ".vim"
1019964e468SBram Moolenaar  if !exists("g:GetLatestVimScripts_mv")
1029964e468SBram Moolenaar   let g:GetLatestVimScripts_mv= "mv"
1039964e468SBram Moolenaar  endif
1049964e468SBram Moolenaar endif
1059964e468SBram Moolenaar
1065c73622aSBram Moolenaar if exists("g:GetLatestVimScripts_autoinstalldir") && isdirectory(g:GetLatestVimScripts_autoinstalldir)
1075c73622aSBram Moolenaar  let s:autoinstall= g:GetLatestVimScripts_autoinstalldir"
1085c73622aSBram Moolenaar elseif exists('$HOME') && isdirectory(expand("$HOME")."/".s:dotvim)
1099964e468SBram Moolenaar  let s:autoinstall= $HOME."/".s:dotvim
1109964e468SBram Moolenaar endif
1119964e468SBram Moolenaar" call Decho("s:autoinstall<".s:autoinstall.">")
1129964e468SBram Moolenaar"else "Decho
1139964e468SBram Moolenaar" call Decho("g:GetLatestVimScripts_allowautoinstall=".g:GetLatestVimScripts_allowautoinstall.": :AutoInstall: disabled")
1149964e468SBram Moolenaarendif
1159964e468SBram Moolenaar
1169964e468SBram Moolenaar" ---------------------------------------------------------------------
1179964e468SBram Moolenaar"  Public Interface: {{{1
1189964e468SBram Moolenaarcom!        -nargs=0 GetLatestVimScripts call getscript#GetLatestVimScripts()
1199964e468SBram Moolenaarcom!        -nargs=0 GetScript           call getscript#GetLatestVimScripts()
1209964e468SBram Moolenaarsilent! com -nargs=0 GLVS                call getscript#GetLatestVimScripts()
1219964e468SBram Moolenaar
1229964e468SBram Moolenaar" ---------------------------------------------------------------------
1239964e468SBram Moolenaar" GetLatestVimScripts: this function gets the latest versions of {{{1
1249964e468SBram Moolenaar"                      scripts based on the list in
1259964e468SBram Moolenaar"   (first dir in runtimepath)/GetLatest/GetLatestVimScripts.dat
1269964e468SBram Moolenaarfun! getscript#GetLatestVimScripts()
1279964e468SBram Moolenaar"  call Dfunc("GetLatestVimScripts() autoinstall<".s:autoinstall.">")
1289964e468SBram Moolenaar
1299964e468SBram Moolenaar" insure that wget is executable
1309964e468SBram Moolenaar  if executable(g:GetLatestVimScripts_wget) != 1
1319964e468SBram Moolenaar   echoerr "GetLatestVimScripts needs ".g:GetLatestVimScripts_wget." which apparently is not available on your system"
132*6c391a74SBram Moolenaar"   call Dret("GetLatestVimScripts : wget not executable/available")
1339964e468SBram Moolenaar   return
1349964e468SBram Moolenaar  endif
1359964e468SBram Moolenaar
136c236c16dSBram Moolenaar  " insure that fnameescape() is available
137c236c16dSBram Moolenaar  if !exists("*fnameescape")
138c236c16dSBram Moolenaar   echoerr "GetLatestVimScripts needs fnameescape() (provided by 7.1.299 or later)"
139c236c16dSBram Moolenaar   return
140c236c16dSBram Moolenaar  endif
141c236c16dSBram Moolenaar
1429964e468SBram Moolenaar  " Find the .../GetLatest subdirectory under the runtimepath
1439964e468SBram Moolenaar  for datadir in split(&rtp,',') + ['']
1449964e468SBram Moolenaar   if isdirectory(datadir."/GetLatest")
1459964e468SBram Moolenaar"    call Decho("found directory<".datadir.">")
1469964e468SBram Moolenaar    let datadir= datadir . "/GetLatest"
1479964e468SBram Moolenaar    break
1489964e468SBram Moolenaar   endif
1499964e468SBram Moolenaar   if filereadable(datadir."GetLatestVimScripts.dat")
1509964e468SBram Moolenaar"    call Decho("found ".datadir."/GetLatestVimScripts.dat")
1519964e468SBram Moolenaar    break
1529964e468SBram Moolenaar   endif
1539964e468SBram Moolenaar  endfor
15482038d73SBram Moolenaar
1559964e468SBram Moolenaar  " Sanity checks: readability and writability
1569964e468SBram Moolenaar  if datadir == ""
1579964e468SBram Moolenaar   echoerr 'Missing "GetLatest/" on your runtimepath - see :help glvs-dist-install'
1589964e468SBram Moolenaar"   call Dret("GetLatestVimScripts : unable to find a GetLatest subdirectory")
1599964e468SBram Moolenaar   return
1609964e468SBram Moolenaar  endif
1619964e468SBram Moolenaar  if filewritable(datadir) != 2
1629964e468SBram Moolenaar   echoerr "(getLatestVimScripts) Your ".datadir." isn't writable"
1639964e468SBram Moolenaar"   call Dret("GetLatestVimScripts : non-writable directory<".datadir.">")
1649964e468SBram Moolenaar   return
1659964e468SBram Moolenaar  endif
1669964e468SBram Moolenaar  let datafile= datadir."/GetLatestVimScripts.dat"
1679964e468SBram Moolenaar  if !filereadable(datafile)
1689964e468SBram Moolenaar   echoerr "Your data file<".datafile."> isn't readable"
1699964e468SBram Moolenaar"   call Dret("GetLatestVimScripts : non-readable datafile<".datafile.">")
1709964e468SBram Moolenaar   return
1719964e468SBram Moolenaar  endif
1729964e468SBram Moolenaar  if !filewritable(datafile)
1739964e468SBram Moolenaar   echoerr "Your data file<".datafile."> isn't writable"
1749964e468SBram Moolenaar"   call Dret("GetLatestVimScripts : non-writable datafile<".datafile.">")
1759964e468SBram Moolenaar   return
1769964e468SBram Moolenaar  endif
1775c73622aSBram Moolenaar  " --------------------
1785c73622aSBram Moolenaar  " Passed sanity checks
1795c73622aSBram Moolenaar  " --------------------
1805c73622aSBram Moolenaar
1819964e468SBram Moolenaar"  call Decho("datadir  <".datadir.">")
1829964e468SBram Moolenaar"  call Decho("datafile <".datafile.">")
1839964e468SBram Moolenaar
1845c73622aSBram Moolenaar  " don't let any event handlers interfere (like winmanager's, taglist's, etc)
1859964e468SBram Moolenaar  let eikeep  = &ei
186c236c16dSBram Moolenaar  let hlskeep = &hls
1875c73622aSBram Moolenaar  let acdkeep = &acd
1885c73622aSBram Moolenaar  set ei=all hls&vim noacd
1899964e468SBram Moolenaar
1905c73622aSBram Moolenaar  " Edit the datafile (ie. GetLatestVimScripts.dat):
1915c73622aSBram Moolenaar  " 1. record current directory (origdir),
1925c73622aSBram Moolenaar  " 2. change directory to datadir,
1935c73622aSBram Moolenaar  " 3. split window
1945c73622aSBram Moolenaar  " 4. edit datafile
1959964e468SBram Moolenaar  let origdir= getcwd()
1963577c6faSBram Moolenaar"  call Decho("exe cd ".fnameescape(substitute(datadir,'\','/','ge')))
1973577c6faSBram Moolenaar  exe "cd ".fnameescape(substitute(datadir,'\','/','ge'))
1989964e468SBram Moolenaar  split
1993577c6faSBram Moolenaar"  call Decho("exe  e ".fnameescape(substitute(datafile,'\','/','ge')))
2003577c6faSBram Moolenaar  exe "e ".fnameescape(substitute(datafile,'\','/','ge'))
2019964e468SBram Moolenaar  res 1000
2029964e468SBram Moolenaar  let s:downloads = 0
2039964e468SBram Moolenaar  let s:downerrors= 0
2049964e468SBram Moolenaar
2059964e468SBram Moolenaar  " Check on dependencies mentioned in plugins
2069964e468SBram Moolenaar"  call Decho(" ")
2079964e468SBram Moolenaar"  call Decho("searching plugins for GetLatestVimScripts dependencies")
2089964e468SBram Moolenaar  let lastline    = line("$")
20982038d73SBram Moolenaar"  call Decho("lastline#".lastline)
2105c73622aSBram Moolenaar  let firstdir    = substitute(&rtp,',.*$','','')
2118d043171SBram Moolenaar  let plugins     = split(globpath(firstdir,"plugin/**/*.vim"),'\n')
2128d043171SBram Moolenaar  let plugins     = plugins + split(globpath(firstdir,"AsNeeded/**/*.vim"),'\n')
2139964e468SBram Moolenaar  let foundscript = 0
2149964e468SBram Moolenaar
2155c73622aSBram Moolenaar  " this loop updates the GetLatestVimScripts.dat file
2165c73622aSBram Moolenaar  " with dependencies explicitly mentioned in the plugins
2175c73622aSBram Moolenaar  " via   GetLatestVimScripts: ... lines
2185c73622aSBram Moolenaar  " It reads the plugin script at the end of the GetLatestVimScripts.dat
2195c73622aSBram Moolenaar  " file, examines it, and then removes it.
22082038d73SBram Moolenaar  for plugin in plugins
2215c73622aSBram Moolenaar"   call Decho(" ")
2223577c6faSBram Moolenaar"   call Decho("plugin<".plugin.">")
22382038d73SBram Moolenaar
22482038d73SBram Moolenaar   " read plugin in
2253577c6faSBram Moolenaar   " evidently a :r creates a new buffer (the "#" buffer) that is subsequently unused -- bwiping it
2269964e468SBram Moolenaar   $
2279964e468SBram Moolenaar"   call Decho(".dependency checking<".plugin."> line$=".line("$"))
2285c73622aSBram Moolenaar"   call Decho("..exe silent r ".fnameescape(plugin))
2293577c6faSBram Moolenaar   exe "silent r ".fnameescape(plugin)
2303577c6faSBram Moolenaar   exe "silent bwipe ".bufnr("#")
23182038d73SBram Moolenaar
2329964e468SBram Moolenaar   while search('^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+','W') != 0
2335c73622aSBram Moolenaar    let depscript   = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+\s\+\(.*\)$','\1','e')
2345c73622aSBram Moolenaar    let depscriptid = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\(\d\+\)\s\+.*$','\1','')
2359964e468SBram Moolenaar    let llp1        = lastline+1
2365c73622aSBram Moolenaar"    call Decho("..depscript<".depscript.">")
2379964e468SBram Moolenaar
2385c73622aSBram Moolenaar    " found a "GetLatestVimScripts: # #" line in the script;
2398024f936SBram Moolenaar    " check if it's already in the datafile by searching backwards from llp1,
2405c73622aSBram Moolenaar    " the (prior to reading in the plugin script) last line plus one of the GetLatestVimScripts.dat file,
2415c73622aSBram Moolenaar    " for the script-id with no wrapping allowed.
2429964e468SBram Moolenaar    let curline     = line(".")
2435c73622aSBram Moolenaar    let noai_script = substitute(depscript,'\s*:AutoInstall:\s*','','e')
2449964e468SBram Moolenaar    exe llp1
2455c73622aSBram Moolenaar    let srchline    = search('^\s*'.depscriptid.'\s\+\d\+\s\+.*$','bW')
2465c73622aSBram Moolenaar    if srchline == 0
2475c73622aSBram Moolenaar     " this second search is taken when, for example, a   0 0 scriptname  is to be skipped over
2489964e468SBram Moolenaar     let srchline= search('\<'.noai_script.'\>','bW')
2495c73622aSBram Moolenaar    endif
2505c73622aSBram Moolenaar"    call Decho("..noai_script<".noai_script."> depscriptid#".depscriptid." srchline#".srchline." curline#".line(".")." lastline#".lastline)
2519964e468SBram Moolenaar
2529964e468SBram Moolenaar    if srchline == 0
2539964e468SBram Moolenaar     " found a new script to permanently include in the datafile
2549964e468SBram Moolenaar     let keep_rega   = @a
2559964e468SBram Moolenaar     let @a          = substitute(getline(curline),'^"\s\+GetLatestVimScripts:\s\+','','')
2565c73622aSBram Moolenaar     echomsg "Appending <".@a."> to ".datafile." for ".depscript
2575c73622aSBram Moolenaar"     call Decho("..Appending <".@a."> to ".datafile." for ".depscript)
2589964e468SBram Moolenaar     exe lastline."put a"
2599964e468SBram Moolenaar     let @a          = keep_rega
2609964e468SBram Moolenaar     let lastline    = llp1
2619964e468SBram Moolenaar     let curline     = curline     + 1
2629964e468SBram Moolenaar     let foundscript = foundscript + 1
2639964e468SBram Moolenaar"    else	" Decho
2649964e468SBram Moolenaar"     call Decho("..found <".noai_script."> (already in datafile at line#".srchline.")")
2659964e468SBram Moolenaar    endif
2669964e468SBram Moolenaar
2679964e468SBram Moolenaar    let curline = curline + 1
2689964e468SBram Moolenaar    exe curline
2699964e468SBram Moolenaar   endwhile
27082038d73SBram Moolenaar
2715c73622aSBram Moolenaar   " llp1: last line plus one
2729964e468SBram Moolenaar   let llp1= lastline + 1
2739964e468SBram Moolenaar"   call Decho(".deleting lines: ".llp1.",$d")
2749964e468SBram Moolenaar   exe "silent! ".llp1.",$d"
27582038d73SBram Moolenaar  endfor
27682038d73SBram Moolenaar"  call Decho("--- end dependency checking loop ---  foundscript=".foundscript)
27782038d73SBram Moolenaar"  call Decho(" ")
2783577c6faSBram Moolenaar"  call Dredir("BUFFER TEST (GetLatestVimScripts 1)","ls!")
2799964e468SBram Moolenaar
2809964e468SBram Moolenaar  if foundscript == 0
2813577c6faSBram Moolenaar   setlocal nomod
2829964e468SBram Moolenaar  endif
2839964e468SBram Moolenaar
2845c73622aSBram Moolenaar  " --------------------------------------------------------------------
2859964e468SBram Moolenaar  " Check on out-of-date scripts using GetLatest/GetLatestVimScripts.dat
2865c73622aSBram Moolenaar  " --------------------------------------------------------------------
28782038d73SBram Moolenaar"  call Decho("begin: checking out-of-date scripts using datafile<".datafile.">")
2883577c6faSBram Moolenaar  setlocal lz
2899964e468SBram Moolenaar  1
29082038d73SBram Moolenaar"  /^-----/,$g/^\s*\d/call Decho(getline("."))
29182038d73SBram Moolenaar  1
29282038d73SBram Moolenaar  /^-----/,$g/^\s*\d/call s:GetOneScript()
29382038d73SBram Moolenaar"  call Decho("--- end out-of-date checking --- ")
2949964e468SBram Moolenaar
2959964e468SBram Moolenaar  " Final report (an echomsg)
2969964e468SBram Moolenaar  try
2979964e468SBram Moolenaar   silent! ?^-------?
2989964e468SBram Moolenaar  catch /^Vim\%((\a\+)\)\=:E114/
2999964e468SBram Moolenaar"   call Dret("GetLatestVimScripts : nothing done!")
3009964e468SBram Moolenaar   return
3019964e468SBram Moolenaar  endtry
3029964e468SBram Moolenaar  exe "norm! kz\<CR>"
3039964e468SBram Moolenaar  redraw!
3049964e468SBram Moolenaar  let s:msg = ""
3059964e468SBram Moolenaar  if s:downloads == 1
3069964e468SBram Moolenaar  let s:msg = "Downloaded one updated script to <".datadir.">"
3079964e468SBram Moolenaar  elseif s:downloads == 2
3089964e468SBram Moolenaar   let s:msg= "Downloaded two updated scripts to <".datadir.">"
3099964e468SBram Moolenaar  elseif s:downloads > 1
3109964e468SBram Moolenaar   let s:msg= "Downloaded ".s:downloads." updated scripts to <".datadir.">"
3119964e468SBram Moolenaar  else
3129964e468SBram Moolenaar   let s:msg= "Everything was already current"
3139964e468SBram Moolenaar  endif
3149964e468SBram Moolenaar  if s:downerrors > 0
3159964e468SBram Moolenaar   let s:msg= s:msg." (".s:downerrors." downloading errors)"
3169964e468SBram Moolenaar  endif
3179964e468SBram Moolenaar  echomsg s:msg
3189964e468SBram Moolenaar  " save the file
3199964e468SBram Moolenaar  if &mod
3209964e468SBram Moolenaar   silent! w!
3219964e468SBram Moolenaar  endif
322ff034194SBram Moolenaar  q!
3239964e468SBram Moolenaar
3249964e468SBram Moolenaar  " restore events and current directory
3253577c6faSBram Moolenaar  exe "cd ".fnameescape(substitute(origdir,'\','/','ge'))
3269964e468SBram Moolenaar  let &ei  = eikeep
327c236c16dSBram Moolenaar  let &hls = hlskeep
3285c73622aSBram Moolenaar  let &acd = acdkeep
3293577c6faSBram Moolenaar  setlocal nolz
3303577c6faSBram Moolenaar"  call Dredir("BUFFER TEST (GetLatestVimScripts 2)","ls!")
3319964e468SBram Moolenaar"  call Dret("GetLatestVimScripts : did ".s:downloads." downloads")
3329964e468SBram Moolenaarendfun
3339964e468SBram Moolenaar
3343577c6faSBram Moolenaar" ---------------------------------------------------------------------
3353577c6faSBram Moolenaar"  GetOneScript: (Get Latest Vim Script) this function operates {{{1
3363577c6faSBram Moolenaar"    on the current line, interpreting two numbers and text as
3373577c6faSBram Moolenaar"    ScriptID, SourceID, and Filename.
3385c73622aSBram Moolenaar"    It downloads any scripts that have newer versions from vim.sourceforge.net.
3393577c6faSBram Moolenaarfun! s:GetOneScript(...)
3403577c6faSBram Moolenaar"   call Dfunc("GetOneScript()")
3413577c6faSBram Moolenaar
3423577c6faSBram Moolenaar " set options to allow progress to be shown on screen
3433577c6faSBram Moolenaar  let rega= @a
3443577c6faSBram Moolenaar  let t_ti= &t_ti
3453577c6faSBram Moolenaar  let t_te= &t_te
3463577c6faSBram Moolenaar  let rs  = &rs
3473577c6faSBram Moolenaar  set t_ti= t_te= nors
3483577c6faSBram Moolenaar
3493577c6faSBram Moolenaar " put current line on top-of-screen and interpret it into
350*6c391a74SBram Moolenaar " a      script identifier  : used to obtain webpage
3513577c6faSBram Moolenaar "        source identifier : used to identify current version
3523577c6faSBram Moolenaar " and an associated comment: used to report on what's being considered
3533577c6faSBram Moolenaar  if a:0 >= 3
3543577c6faSBram Moolenaar   let scriptid = a:1
3553577c6faSBram Moolenaar   let srcid    = a:2
3563577c6faSBram Moolenaar   let fname    = a:3
3573577c6faSBram Moolenaar   let cmmnt    = ""
3583577c6faSBram Moolenaar"   call Decho("scriptid<".scriptid.">")
3593577c6faSBram Moolenaar"   call Decho("srcid   <".srcid.">")
3603577c6faSBram Moolenaar"   call Decho("fname   <".fname.">")
3613577c6faSBram Moolenaar  else
3623577c6faSBram Moolenaar   let curline  = getline(".")
3633577c6faSBram Moolenaar   if curline =~ '^\s*#'
3643577c6faSBram Moolenaar    let @a= rega
3653577c6faSBram Moolenaar"    call Dret("GetOneScript : skipping a pure comment line")
3663577c6faSBram Moolenaar    return
3673577c6faSBram Moolenaar   endif
3683577c6faSBram Moolenaar   let parsepat = '^\s*\(\d\+\)\s\+\(\d\+\)\s\+\(.\{-}\)\(\s*#.*\)\=$'
3693577c6faSBram Moolenaar   try
3703577c6faSBram Moolenaar    let scriptid = substitute(curline,parsepat,'\1','e')
3713577c6faSBram Moolenaar   catch /^Vim\%((\a\+)\)\=:E486/
3723577c6faSBram Moolenaar    let scriptid= 0
3733577c6faSBram Moolenaar   endtry
3743577c6faSBram Moolenaar   try
3753577c6faSBram Moolenaar    let srcid    = substitute(curline,parsepat,'\2','e')
3763577c6faSBram Moolenaar   catch /^Vim\%((\a\+)\)\=:E486/
3773577c6faSBram Moolenaar    let srcid= 0
3783577c6faSBram Moolenaar   endtry
3793577c6faSBram Moolenaar   try
3803577c6faSBram Moolenaar    let fname= substitute(curline,parsepat,'\3','e')
3813577c6faSBram Moolenaar   catch /^Vim\%((\a\+)\)\=:E486/
3823577c6faSBram Moolenaar    let fname= ""
3833577c6faSBram Moolenaar   endtry
3843577c6faSBram Moolenaar   try
3853577c6faSBram Moolenaar    let cmmnt= substitute(curline,parsepat,'\4','e')
3863577c6faSBram Moolenaar   catch /^Vim\%((\a\+)\)\=:E486/
3873577c6faSBram Moolenaar    let cmmnt= ""
3883577c6faSBram Moolenaar   endtry
3893577c6faSBram Moolenaar"   call Decho("curline <".curline.">")
3903577c6faSBram Moolenaar"   call Decho("parsepat<".parsepat.">")
3913577c6faSBram Moolenaar"   call Decho("scriptid<".scriptid.">")
3923577c6faSBram Moolenaar"   call Decho("srcid   <".srcid.">")
3933577c6faSBram Moolenaar"   call Decho("fname   <".fname.">")
3943577c6faSBram Moolenaar  endif
3953577c6faSBram Moolenaar
3965c73622aSBram Moolenaar  " plugin author protection from downloading his/her own scripts atop their latest work
3973577c6faSBram Moolenaar  if scriptid == 0 || srcid == 0
3983577c6faSBram Moolenaar   " When looking for :AutoInstall: lines, skip scripts that have   0 0 scriptname
3993577c6faSBram Moolenaar   let @a= rega
4003577c6faSBram Moolenaar"   call Dret("GetOneScript : skipping a scriptid==srcid==0 line")
4013577c6faSBram Moolenaar   return
4023577c6faSBram Moolenaar  endif
4033577c6faSBram Moolenaar
4043577c6faSBram Moolenaar  let doautoinstall= 0
4053577c6faSBram Moolenaar  if fname =~ ":AutoInstall:"
4063577c6faSBram Moolenaar"   call Decho("case AutoInstall: fname<".fname.">")
4073577c6faSBram Moolenaar   let aicmmnt= substitute(fname,'\s\+:AutoInstall:\s\+',' ','')
4083577c6faSBram Moolenaar"   call Decho("aicmmnt<".aicmmnt."> s:autoinstall=".s:autoinstall)
4093577c6faSBram Moolenaar   if s:autoinstall != ""
4103577c6faSBram Moolenaar    let doautoinstall = g:GetLatestVimScripts_allowautoinstall
4113577c6faSBram Moolenaar   endif
4123577c6faSBram Moolenaar  else
4133577c6faSBram Moolenaar   let aicmmnt= fname
4143577c6faSBram Moolenaar  endif
4153577c6faSBram Moolenaar"  call Decho("aicmmnt<".aicmmnt.">: doautoinstall=".doautoinstall)
4163577c6faSBram Moolenaar
4173577c6faSBram Moolenaar  exe "norm z\<CR>"
4183577c6faSBram Moolenaar  redraw!
4193577c6faSBram Moolenaar"  call Decho('considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid)
4203577c6faSBram Moolenaar  echo 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid
4213577c6faSBram Moolenaar
4225c73622aSBram Moolenaar  " grab a copy of the plugin's vim.sourceforge.net webpage
423ff034194SBram Moolenaar  let scriptaddr = g:GetLatestVimScripts_scriptaddr.scriptid
4243577c6faSBram Moolenaar  let tmpfile    = tempname()
4253577c6faSBram Moolenaar  let v:errmsg   = ""
4263577c6faSBram Moolenaar
4273577c6faSBram Moolenaar  " make up to three tries at downloading the description
4283577c6faSBram Moolenaar  let itry= 1
4293577c6faSBram Moolenaar  while itry <= 3
4305c73622aSBram Moolenaar"   call Decho(".try#".itry." to download description of <".aicmmnt."> with addr=".scriptaddr)
4313577c6faSBram Moolenaar   if has("win32") || has("win16") || has("win95")
4325c73622aSBram Moolenaar"    call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)."|bw!")
4335c73622aSBram Moolenaar    new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)|bw!
4343577c6faSBram Moolenaar   else
4355c73622aSBram Moolenaar"    call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr))
4365c73622aSBram Moolenaar    exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr)
4373577c6faSBram Moolenaar   endif
4383577c6faSBram Moolenaar   if itry == 1
4393577c6faSBram Moolenaar    exe "silent vsplit ".fnameescape(tmpfile)
4403577c6faSBram Moolenaar   else
4413577c6faSBram Moolenaar    silent! e %
4423577c6faSBram Moolenaar   endif
4433577c6faSBram Moolenaar   setlocal bh=wipe
4443577c6faSBram Moolenaar
4453577c6faSBram Moolenaar   " find the latest source-id in the plugin's webpage
4463577c6faSBram Moolenaar   silent! 1
4473577c6faSBram Moolenaar   let findpkg= search('Click on the package to download','W')
4483577c6faSBram Moolenaar   if findpkg > 0
4493577c6faSBram Moolenaar    break
4503577c6faSBram Moolenaar   endif
4513577c6faSBram Moolenaar   let itry= itry + 1
4523577c6faSBram Moolenaar  endwhile
4533577c6faSBram Moolenaar"  call Decho(" --- end downloading tries while loop --- itry=".itry)
4543577c6faSBram Moolenaar
4553577c6faSBram Moolenaar  " testing: did finding "Click on the package..." fail?
4563577c6faSBram Moolenaar  if findpkg == 0 || itry >= 4
4573577c6faSBram Moolenaar   silent q!
4583577c6faSBram Moolenaar   call delete(tmpfile)
4593577c6faSBram Moolenaar  " restore options
4603577c6faSBram Moolenaar   let &t_ti        = t_ti
4613577c6faSBram Moolenaar   let &t_te        = t_te
4623577c6faSBram Moolenaar   let &rs          = rs
4633577c6faSBram Moolenaar   let s:downerrors = s:downerrors + 1
4643577c6faSBram Moolenaar"   call Decho("***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">")
4653577c6faSBram Moolenaar   echomsg "***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">"
4663577c6faSBram Moolenaar"   call Dret("GetOneScript : srch for /Click on the package/ failed")
4673577c6faSBram Moolenaar   let @a= rega
4683577c6faSBram Moolenaar   return
4693577c6faSBram Moolenaar  endif
4703577c6faSBram Moolenaar"  call Decho('found "Click on the package to download"')
4713577c6faSBram Moolenaar
4723577c6faSBram Moolenaar  let findsrcid= search('src_id=','W')
4733577c6faSBram Moolenaar  if findsrcid == 0
4743577c6faSBram Moolenaar   silent q!
4753577c6faSBram Moolenaar   call delete(tmpfile)
4763577c6faSBram Moolenaar  " restore options
4773577c6faSBram Moolenaar   let &t_ti        = t_ti
4783577c6faSBram Moolenaar   let &t_te        = t_te
4793577c6faSBram Moolenaar   let &rs          = rs
4803577c6faSBram Moolenaar   let s:downerrors = s:downerrors + 1
4813577c6faSBram Moolenaar"   call Decho("***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">")
4823577c6faSBram Moolenaar   echomsg "***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">"
4833577c6faSBram Moolenaar   let @a= rega
4843577c6faSBram Moolenaar"  call Dret("GetOneScript : srch for /src_id/ failed")
4853577c6faSBram Moolenaar   return
4863577c6faSBram Moolenaar  endif
4873577c6faSBram Moolenaar"  call Decho('found "src_id=" in description page')
4883577c6faSBram Moolenaar
4893577c6faSBram Moolenaar  let srcidpat   = '^\s*<td class.*src_id=\(\d\+\)">\([^<]\+\)<.*$'
4903577c6faSBram Moolenaar  let latestsrcid= substitute(getline("."),srcidpat,'\1','')
4913577c6faSBram Moolenaar  let sname      = substitute(getline("."),srcidpat,'\2','') " script name actually downloaded
4923577c6faSBram Moolenaar"  call Decho("srcidpat<".srcidpat."> latestsrcid<".latestsrcid."> sname<".sname.">")
4933577c6faSBram Moolenaar  silent q!
4943577c6faSBram Moolenaar  call delete(tmpfile)
4953577c6faSBram Moolenaar
4963577c6faSBram Moolenaar  " convert the strings-of-numbers into numbers
4973577c6faSBram Moolenaar  let srcid       = srcid       + 0
4983577c6faSBram Moolenaar  let latestsrcid = latestsrcid + 0
4993577c6faSBram Moolenaar"  call Decho("srcid=".srcid." latestsrcid=".latestsrcid." sname<".sname.">")
5003577c6faSBram Moolenaar
5015c73622aSBram Moolenaar  " has the plugin's most-recent srcid increased, which indicates that it has been updated
5023577c6faSBram Moolenaar  if latestsrcid > srcid
5033577c6faSBram Moolenaar"   call Decho("[latestsrcid=".latestsrcid."] <= [srcid=".srcid."]: need to update <".sname.">")
5043577c6faSBram Moolenaar
5053577c6faSBram Moolenaar   let s:downloads= s:downloads + 1
5063577c6faSBram Moolenaar   if sname == bufname("%")
5073577c6faSBram Moolenaar    " GetLatestVimScript has to be careful about downloading itself
5083577c6faSBram Moolenaar    let sname= "NEW_".sname
5093577c6faSBram Moolenaar   endif
5103577c6faSBram Moolenaar
5115c73622aSBram Moolenaar   " -----------------------------------------------------------------------------
5123577c6faSBram Moolenaar   " the plugin has been updated since we last obtained it, so download a new copy
5135c73622aSBram Moolenaar   " -----------------------------------------------------------------------------
5145c73622aSBram Moolenaar"   call Decho(".downloading new <".sname.">")
5155c73622aSBram Moolenaar   echomsg ".downloading new <".sname.">"
5163577c6faSBram Moolenaar   if has("win32") || has("win16") || has("win95")
5175c73622aSBram Moolenaar"    call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id='.latestsrcid)."|q")
5185c73622aSBram Moolenaar    new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id='.latestsrcid)|q
5193577c6faSBram Moolenaar   else
5205c73622aSBram Moolenaar"    call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id='))
5215c73622aSBram Moolenaar    exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id=').latestsrcid
5223577c6faSBram Moolenaar   endif
5233577c6faSBram Moolenaar
5245c73622aSBram Moolenaar   " --------------------------------------------------------------------------
5253577c6faSBram Moolenaar   " AutoInstall: only if doautoinstall has been requested by the plugin itself
5265c73622aSBram Moolenaar   " --------------------------------------------------------------------------
527251e1912SBram Moolenaar"   call Decho("checking if plugin requested autoinstall: doautoinstall=".doautoinstall)
5283577c6faSBram Moolenaar   if doautoinstall
5295c73622aSBram Moolenaar"    call Decho(" ")
5305c73622aSBram Moolenaar"    call Decho("Autoinstall: getcwd<".getcwd()."> filereadable(".sname.")=".filereadable(sname))
5313577c6faSBram Moolenaar    if filereadable(sname)
5325c73622aSBram Moolenaar"     call Decho("<".sname."> is readable")
5335c73622aSBram Moolenaar"     call Decho("exe silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall))
5345c73622aSBram Moolenaar     exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall)
535251e1912SBram Moolenaar     let curdir    = fnameescape(substitute(getcwd(),'\','/','ge'))
5363577c6faSBram Moolenaar     let installdir= curdir."/Installed"
5373577c6faSBram Moolenaar     if !isdirectory(installdir)
5383577c6faSBram Moolenaar      call mkdir(installdir)
5393577c6faSBram Moolenaar     endif
5405c73622aSBram Moolenaar"     call Decho("curdir<".curdir."> installdir<".installdir.">")
5413577c6faSBram Moolenaar"     call Decho("exe cd ".fnameescape(s:autoinstall))
5423577c6faSBram Moolenaar     exe "cd ".fnameescape(s:autoinstall)
5433577c6faSBram Moolenaar
5445c73622aSBram Moolenaar     " determine target directory for moves
5455c73622aSBram Moolenaar     let firstdir= substitute(&rtp,',.*$','','')
5465c73622aSBram Moolenaar     let pname   = substitute(sname,'\..*','.vim','')
5475c73622aSBram Moolenaar"     call Decho("determine tgtdir: is <".firstdir.'/AsNeeded/'.pname." readable?")
5485c73622aSBram Moolenaar     if filereadable(firstdir.'/AsNeeded/'.pname)
5495c73622aSBram Moolenaar      let tgtdir= "AsNeeded"
5505c73622aSBram Moolenaar     else
5515c73622aSBram Moolenaar      let tgtdir= "plugin"
5525c73622aSBram Moolenaar     endif
5535c73622aSBram Moolenaar"     call Decho("tgtdir<".tgtdir.">  pname<".pname.">")
5545c73622aSBram Moolenaar
5553577c6faSBram Moolenaar     " decompress
5563577c6faSBram Moolenaar     if sname =~ '\.bz2$'
5573577c6faSBram Moolenaar"      call Decho("decompress: attempt to bunzip2 ".sname)
5586be7f873SBram Moolenaar      exe "sil !bunzip2 ".shellescape(sname)
5593577c6faSBram Moolenaar      let sname= substitute(sname,'\.bz2$','','')
5603577c6faSBram Moolenaar"      call Decho("decompress: new sname<".sname."> after bunzip2")
5613577c6faSBram Moolenaar     elseif sname =~ '\.gz$'
5623577c6faSBram Moolenaar"      call Decho("decompress: attempt to gunzip ".sname)
5636be7f873SBram Moolenaar      exe "sil !gunzip ".shellescape(sname)
5643577c6faSBram Moolenaar      let sname= substitute(sname,'\.gz$','','')
5653577c6faSBram Moolenaar"      call Decho("decompress: new sname<".sname."> after gunzip")
566251e1912SBram Moolenaar     elseif sname =~ '\.xz$'
567251e1912SBram Moolenaar"      call Decho("decompress: attempt to unxz ".sname)
5686be7f873SBram Moolenaar      exe "sil !unxz ".shellescape(sname)
569251e1912SBram Moolenaar      let sname= substitute(sname,'\.xz$','','')
570251e1912SBram Moolenaar"      call Decho("decompress: new sname<".sname."> after unxz")
5715c73622aSBram Moolenaar     else
5725c73622aSBram Moolenaar"      call Decho("no decompression needed")
5733577c6faSBram Moolenaar     endif
5743577c6faSBram Moolenaar
5756be7f873SBram Moolenaar     " distribute archive(.zip, .tar, .vba, ...) contents
5763577c6faSBram Moolenaar     if sname =~ '\.zip$'
5773577c6faSBram Moolenaar"      call Decho("dearchive: attempt to unzip ".sname)
5785c73622aSBram Moolenaar      exe "silent !unzip -o ".shellescape(sname)
5793577c6faSBram Moolenaar     elseif sname =~ '\.tar$'
5803577c6faSBram Moolenaar"      call Decho("dearchive: attempt to untar ".sname)
5815c73622aSBram Moolenaar      exe "silent !tar -xvf ".shellescape(sname)
5826be7f873SBram Moolenaar     elseif sname =~ '\.tgz$'
5836be7f873SBram Moolenaar"      call Decho("dearchive: attempt to untar+gunzip ".sname)
5846be7f873SBram Moolenaar      exe "silent !tar -zxvf ".shellescape(sname)
5856be7f873SBram Moolenaar     elseif sname =~ '\.taz$'
5866be7f873SBram Moolenaar"      call Decho("dearchive: attempt to untar+uncompress ".sname)
5876be7f873SBram Moolenaar      exe "silent !tar -Zxvf ".shellescape(sname)
5886be7f873SBram Moolenaar     elseif sname =~ '\.tbz$'
5896be7f873SBram Moolenaar"      call Decho("dearchive: attempt to untar+bunzip2 ".sname)
5906be7f873SBram Moolenaar      exe "silent !tar -jxvf ".shellescape(sname)
5916be7f873SBram Moolenaar     elseif sname =~ '\.txz$'
5926be7f873SBram Moolenaar"      call Decho("dearchive: attempt to untar+xz ".sname)
5936be7f873SBram Moolenaar      exe "silent !tar -Jxvf ".shellescape(sname)
5943577c6faSBram Moolenaar     elseif sname =~ '\.vba$'
5953577c6faSBram Moolenaar"      call Decho("dearchive: attempt to handle a vimball: ".sname)
5963577c6faSBram Moolenaar      silent 1split
5975c73622aSBram Moolenaar      if exists("g:vimball_home")
5985c73622aSBram Moolenaar       let oldvimballhome= g:vimball_home
5995c73622aSBram Moolenaar      endif
6005c73622aSBram Moolenaar      let g:vimball_home= s:autoinstall
6013577c6faSBram Moolenaar      exe "silent e ".fnameescape(sname)
6023577c6faSBram Moolenaar      silent so %
6033577c6faSBram Moolenaar      silent q
6045c73622aSBram Moolenaar      if exists("oldvimballhome")
6055c73622aSBram Moolenaar       let g:vimball_home= oldvimballhome
6065c73622aSBram Moolenaar      else
6075c73622aSBram Moolenaar       unlet g:vimball_home
6085c73622aSBram Moolenaar      endif
6095c73622aSBram Moolenaar     else
6105c73622aSBram Moolenaar"      call Decho("no dearchiving needed")
6113577c6faSBram Moolenaar     endif
6123577c6faSBram Moolenaar
6135c73622aSBram Moolenaar     " ---------------------------------------------
6145c73622aSBram Moolenaar     " move plugin to plugin/ or AsNeeded/ directory
6155c73622aSBram Moolenaar     " ---------------------------------------------
6163577c6faSBram Moolenaar     if sname =~ '.vim$'
6175c73622aSBram Moolenaar"      call Decho("dearchive: attempt to simply move ".sname." to ".tgtdir)
6185c73622aSBram Moolenaar      exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".tgtdir
6193577c6faSBram Moolenaar     else
6203577c6faSBram Moolenaar"      call Decho("dearchive: move <".sname."> to installdir<".installdir.">")
6215c73622aSBram Moolenaar      exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".installdir
6225c73622aSBram Moolenaar     endif
6235c73622aSBram Moolenaar     if tgtdir != "plugin"
6245c73622aSBram Moolenaar"      call Decho("exe silent !".g:GetLatestVimScripts_mv." plugin/".shellescape(pname)." ".tgtdir)
6255c73622aSBram Moolenaar      exe "silent !".g:GetLatestVimScripts_mv." plugin/".shellescape(pname)." ".tgtdir
6263577c6faSBram Moolenaar     endif
6273577c6faSBram Moolenaar
6283577c6faSBram Moolenaar     " helptags step
6293577c6faSBram Moolenaar     let docdir= substitute(&rtp,',.*','','e')."/doc"
6303577c6faSBram Moolenaar"     call Decho("helptags: docdir<".docdir.">")
6313577c6faSBram Moolenaar     exe "helptags ".fnameescape(docdir)
6323577c6faSBram Moolenaar     exe "cd ".fnameescape(curdir)
6333577c6faSBram Moolenaar    endif
6343577c6faSBram Moolenaar    if fname !~ ':AutoInstall:'
6353577c6faSBram Moolenaar     let modline=scriptid." ".latestsrcid." :AutoInstall: ".fname.cmmnt
6363577c6faSBram Moolenaar    else
6373577c6faSBram Moolenaar     let modline=scriptid." ".latestsrcid." ".fname.cmmnt
6383577c6faSBram Moolenaar    endif
6393577c6faSBram Moolenaar   else
6403577c6faSBram Moolenaar    let modline=scriptid." ".latestsrcid." ".fname.cmmnt
6413577c6faSBram Moolenaar   endif
6423577c6faSBram Moolenaar
6433577c6faSBram Moolenaar   " update the data in the <GetLatestVimScripts.dat> file
6443577c6faSBram Moolenaar   call setline(line("."),modline)
6453577c6faSBram Moolenaar"   call Decho("update data in ".expand("%")."#".line(".").": modline<".modline.">")
6463577c6faSBram Moolenaar"  else " Decho
6473577c6faSBram Moolenaar"   call Decho("[latestsrcid=".latestsrcid."] <= [srcid=".srcid."], no need to update")
6483577c6faSBram Moolenaar  endif
6493577c6faSBram Moolenaar
6503577c6faSBram Moolenaar " restore options
6513577c6faSBram Moolenaar  let &t_ti = t_ti
6523577c6faSBram Moolenaar  let &t_te = t_te
6533577c6faSBram Moolenaar  let &rs   = rs
6543577c6faSBram Moolenaar  let @a    = rega
6553577c6faSBram Moolenaar"  call Dredir("BUFFER TEST (GetOneScript)","ls!")
6563577c6faSBram Moolenaar
6573577c6faSBram Moolenaar"  call Dret("GetOneScript")
6583577c6faSBram Moolenaarendfun
6593577c6faSBram Moolenaar
6603577c6faSBram Moolenaar" ---------------------------------------------------------------------
6619964e468SBram Moolenaar" Restore Options: {{{1
6629964e468SBram Moolenaarlet &cpo= s:keepcpo
6633577c6faSBram Moolenaarunlet s:keepcpo
6649964e468SBram Moolenaar
6653577c6faSBram Moolenaar" ---------------------------------------------------------------------
6663577c6faSBram Moolenaar"  Modelines: {{{1
6679964e468SBram Moolenaar" vim: ts=8 sts=2 fdm=marker nowrap
668