diff --git a/autoload/getscript.vim b/autoload/getscript.vim deleted file mode 100644 index 9e2a196..0000000 --- a/autoload/getscript.vim +++ /dev/null @@ -1,650 +0,0 @@ -" --------------------------------------------------------------------- -" getscript.vim -" Author: Charles E. Campbell, Jr. -" Date: May 31, 2011 -" Version: 33 -" Installing: :help glvs-install -" Usage: :help glvs -" -" GetLatestVimScripts: 642 1 :AutoInstall: getscript.vim -"redraw!|call inputsave()|call input("Press to continue")|call inputrestore() -" --------------------------------------------------------------------- -" Initialization: {{{1 -" if you're sourcing this file, surely you can't be -" expecting vim to be in its vi-compatible mode! -if exists("g:loaded_getscript") - finish -endif -let g:loaded_getscript= "v33" -if &cp - echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)" - finish -endif -if v:version < 702 - echohl WarningMsg - echo "***warning*** this version of getscript needs vim 7.2" - echohl Normal - finish -endif -let s:keepcpo = &cpo -set cpo&vim -"DechoTabOn - -" --------------------------- -" Global Variables: {{{1 -" --------------------------- -" Cygwin Detection ------- {{{2 -if !exists("g:getscript_cygwin") - if has("win32") || has("win95") || has("win64") || has("win16") - if &shell =~ '\%(\\|\\)\%(\.exe\)\=$' - let g:getscript_cygwin= 1 - else - let g:getscript_cygwin= 0 - endif - else - let g:getscript_cygwin= 0 - endif -endif - -" wget vs curl {{{2 -if !exists("g:GetLatestVimScripts_wget") - if executable("wget") - let g:GetLatestVimScripts_wget= "wget" - elseif executable("curl") - let g:GetLatestVimScripts_wget= "curl" - else - let g:GetLatestVimScripts_wget = 'echo "GetLatestVimScripts needs wget or curl"' - let g:GetLatestVimScripts_options = "" - endif -endif - -" options that wget and curl require: -if !exists("g:GetLatestVimScripts_options") - if g:GetLatestVimScripts_wget == "wget" - let g:GetLatestVimScripts_options= "-q -O" - elseif g:GetLatestVimScripts_wget == "curl" - let g:GetLatestVimScripts_options= "-s -O" - else - let g:GetLatestVimScripts_options= "" - endif -endif - -" by default, allow autoinstall lines to work -if !exists("g:GetLatestVimScripts_allowautoinstall") - let g:GetLatestVimScripts_allowautoinstall= 1 -endif - -"" For debugging: -"let g:GetLatestVimScripts_wget = "echo" -"let g:GetLatestVimScripts_options = "options" - -" --------------------------------------------------------------------- -" Check If AutoInstall Capable: {{{1 -let s:autoinstall= "" -if g:GetLatestVimScripts_allowautoinstall - - if (has("win32") || has("gui_win32") || has("gui_win32s") || has("win16") || has("win64") || has("win32unix") || has("win95")) && &shell != "bash" - " windows (but not cygwin/bash) - let s:dotvim= "vimfiles" - if !exists("g:GetLatestVimScripts_mv") - let g:GetLatestVimScripts_mv= "ren" - endif - - else - " unix - let s:dotvim= ".vim" - if !exists("g:GetLatestVimScripts_mv") - let g:GetLatestVimScripts_mv= "mv" - endif - endif - - if exists("g:GetLatestVimScripts_autoinstalldir") && isdirectory(g:GetLatestVimScripts_autoinstalldir) - let s:autoinstall= g:GetLatestVimScripts_autoinstalldir" - elseif exists('$HOME') && isdirectory(expand("$HOME")."/".s:dotvim) - let s:autoinstall= $HOME."/".s:dotvim - endif -" call Decho("s:autoinstall<".s:autoinstall.">") -"else "Decho -" call Decho("g:GetLatestVimScripts_allowautoinstall=".g:GetLatestVimScripts_allowautoinstall.": :AutoInstall: disabled") -endif - -" --------------------------------------------------------------------- -" Public Interface: {{{1 -com! -nargs=0 GetLatestVimScripts call getscript#GetLatestVimScripts() -com! -nargs=0 GetScript call getscript#GetLatestVimScripts() -silent! com -nargs=0 GLVS call getscript#GetLatestVimScripts() - -" --------------------------------------------------------------------- -" GetLatestVimScripts: this function gets the latest versions of {{{1 -" scripts based on the list in -" (first dir in runtimepath)/GetLatest/GetLatestVimScripts.dat -fun! getscript#GetLatestVimScripts() -" call Dfunc("GetLatestVimScripts() autoinstall<".s:autoinstall.">") - -" insure that wget is executable - if executable(g:GetLatestVimScripts_wget) != 1 - echoerr "GetLatestVimScripts needs ".g:GetLatestVimScripts_wget." which apparently is not available on your system" -" call Dret("GetLatestVimScripts : wget not executable/availble") - return - endif - - " insure that fnameescape() is available - if !exists("*fnameescape") - echoerr "GetLatestVimScripts needs fnameescape() (provided by 7.1.299 or later)" - return - endif - - " Find the .../GetLatest subdirectory under the runtimepath - for datadir in split(&rtp,',') + [''] - if isdirectory(datadir."/GetLatest") -" call Decho("found directory<".datadir.">") - let datadir= datadir . "/GetLatest" - break - endif - if filereadable(datadir."GetLatestVimScripts.dat") -" call Decho("found ".datadir."/GetLatestVimScripts.dat") - break - endif - endfor - - " Sanity checks: readability and writability - if datadir == "" - echoerr 'Missing "GetLatest/" on your runtimepath - see :help glvs-dist-install' -" call Dret("GetLatestVimScripts : unable to find a GetLatest subdirectory") - return - endif - if filewritable(datadir) != 2 - echoerr "(getLatestVimScripts) Your ".datadir." isn't writable" -" call Dret("GetLatestVimScripts : non-writable directory<".datadir.">") - return - endif - let datafile= datadir."/GetLatestVimScripts.dat" - if !filereadable(datafile) - echoerr "Your data file<".datafile."> isn't readable" -" call Dret("GetLatestVimScripts : non-readable datafile<".datafile.">") - return - endif - if !filewritable(datafile) - echoerr "Your data file<".datafile."> isn't writable" -" call Dret("GetLatestVimScripts : non-writable datafile<".datafile.">") - return - endif - " -------------------- - " Passed sanity checks - " -------------------- - -" call Decho("datadir <".datadir.">") -" call Decho("datafile <".datafile.">") - - " don't let any event handlers interfere (like winmanager's, taglist's, etc) - let eikeep = &ei - let hlskeep = &hls - let acdkeep = &acd - set ei=all hls&vim noacd - - " Edit the datafile (ie. GetLatestVimScripts.dat): - " 1. record current directory (origdir), - " 2. change directory to datadir, - " 3. split window - " 4. edit datafile - let origdir= getcwd() -" call Decho("exe cd ".fnameescape(substitute(datadir,'\','/','ge'))) - exe "cd ".fnameescape(substitute(datadir,'\','/','ge')) - split -" call Decho("exe e ".fnameescape(substitute(datafile,'\','/','ge'))) - exe "e ".fnameescape(substitute(datafile,'\','/','ge')) - res 1000 - let s:downloads = 0 - let s:downerrors= 0 - - " Check on dependencies mentioned in plugins -" call Decho(" ") -" call Decho("searching plugins for GetLatestVimScripts dependencies") - let lastline = line("$") -" call Decho("lastline#".lastline) - let firstdir = substitute(&rtp,',.*$','','') - let plugins = split(globpath(firstdir,"plugin/*.vim"),'\n') - let plugins = plugins + split(globpath(firstdir,"AsNeeded/*.vim"),'\n') - let foundscript = 0 - - " this loop updates the GetLatestVimScripts.dat file - " with dependencies explicitly mentioned in the plugins - " via GetLatestVimScripts: ... lines - " It reads the plugin script at the end of the GetLatestVimScripts.dat - " file, examines it, and then removes it. - for plugin in plugins -" call Decho(" ") -" call Decho("plugin<".plugin.">") - - " read plugin in - " evidently a :r creates a new buffer (the "#" buffer) that is subsequently unused -- bwiping it - $ -" call Decho(".dependency checking<".plugin."> line$=".line("$")) -" call Decho("..exe silent r ".fnameescape(plugin)) - exe "silent r ".fnameescape(plugin) - exe "silent bwipe ".bufnr("#") - - while search('^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+','W') != 0 - let depscript = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\d\+\s\+\d\+\s\+\(.*\)$','\1','e') - let depscriptid = substitute(getline("."),'^"\s\+GetLatestVimScripts:\s\+\(\d\+\)\s\+.*$','\1','') - let llp1 = lastline+1 -" call Decho("..depscript<".depscript.">") - - " found a "GetLatestVimScripts: # #" line in the script; - " check if its already in the datafile by searching backwards from llp1, - " the (prior to reading in the plugin script) last line plus one of the GetLatestVimScripts.dat file, - " for the script-id with no wrapping allowed. - let curline = line(".") - let noai_script = substitute(depscript,'\s*:AutoInstall:\s*','','e') - exe llp1 - let srchline = search('^\s*'.depscriptid.'\s\+\d\+\s\+.*$','bW') - if srchline == 0 - " this second search is taken when, for example, a 0 0 scriptname is to be skipped over - let srchline= search('\<'.noai_script.'\>','bW') - endif -" call Decho("..noai_script<".noai_script."> depscriptid#".depscriptid." srchline#".srchline." curline#".line(".")." lastline#".lastline) - - if srchline == 0 - " found a new script to permanently include in the datafile - let keep_rega = @a - let @a = substitute(getline(curline),'^"\s\+GetLatestVimScripts:\s\+','','') - echomsg "Appending <".@a."> to ".datafile." for ".depscript -" call Decho("..Appending <".@a."> to ".datafile." for ".depscript) - exe lastline."put a" - let @a = keep_rega - let lastline = llp1 - let curline = curline + 1 - let foundscript = foundscript + 1 -" else " Decho -" call Decho("..found <".noai_script."> (already in datafile at line#".srchline.")") - endif - - let curline = curline + 1 - exe curline - endwhile - - " llp1: last line plus one - let llp1= lastline + 1 -" call Decho(".deleting lines: ".llp1.",$d") - exe "silent! ".llp1.",$d" - endfor -" call Decho("--- end dependency checking loop --- foundscript=".foundscript) -" call Decho(" ") -" call Dredir("BUFFER TEST (GetLatestVimScripts 1)","ls!") - - if foundscript == 0 - setlocal nomod - endif - - " -------------------------------------------------------------------- - " Check on out-of-date scripts using GetLatest/GetLatestVimScripts.dat - " -------------------------------------------------------------------- -" call Decho("begin: checking out-of-date scripts using datafile<".datafile.">") - setlocal lz - 1 -" /^-----/,$g/^\s*\d/call Decho(getline(".")) - 1 - /^-----/,$g/^\s*\d/call s:GetOneScript() -" call Decho("--- end out-of-date checking --- ") - - " Final report (an echomsg) - try - silent! ?^-------? - catch /^Vim\%((\a\+)\)\=:E114/ -" call Dret("GetLatestVimScripts : nothing done!") - return - endtry - exe "norm! kz\" - redraw! - let s:msg = "" - if s:downloads == 1 - let s:msg = "Downloaded one updated script to <".datadir.">" - elseif s:downloads == 2 - let s:msg= "Downloaded two updated scripts to <".datadir.">" - elseif s:downloads > 1 - let s:msg= "Downloaded ".s:downloads." updated scripts to <".datadir.">" - else - let s:msg= "Everything was already current" - endif - if s:downerrors > 0 - let s:msg= s:msg." (".s:downerrors." downloading errors)" - endif - echomsg s:msg - " save the file - if &mod - silent! w! - endif - q - - " restore events and current directory - exe "cd ".fnameescape(substitute(origdir,'\','/','ge')) - let &ei = eikeep - let &hls = hlskeep - let &acd = acdkeep - setlocal nolz -" call Dredir("BUFFER TEST (GetLatestVimScripts 2)","ls!") -" call Dret("GetLatestVimScripts : did ".s:downloads." downloads") -endfun - -" --------------------------------------------------------------------- -" GetOneScript: (Get Latest Vim Script) this function operates {{{1 -" on the current line, interpreting two numbers and text as -" ScriptID, SourceID, and Filename. -" It downloads any scripts that have newer versions from vim.sourceforge.net. -fun! s:GetOneScript(...) -" call Dfunc("GetOneScript()") - - " set options to allow progress to be shown on screen - let rega= @a - let t_ti= &t_ti - let t_te= &t_te - let rs = &rs - set t_ti= t_te= nors - - " put current line on top-of-screen and interpret it into - " a script identifer : used to obtain webpage - " source identifier : used to identify current version - " and an associated comment: used to report on what's being considered - if a:0 >= 3 - let scriptid = a:1 - let srcid = a:2 - let fname = a:3 - let cmmnt = "" -" call Decho("scriptid<".scriptid.">") -" call Decho("srcid <".srcid.">") -" call Decho("fname <".fname.">") - else - let curline = getline(".") - if curline =~ '^\s*#' - let @a= rega -" call Dret("GetOneScript : skipping a pure comment line") - return - endif - let parsepat = '^\s*\(\d\+\)\s\+\(\d\+\)\s\+\(.\{-}\)\(\s*#.*\)\=$' - try - let scriptid = substitute(curline,parsepat,'\1','e') - catch /^Vim\%((\a\+)\)\=:E486/ - let scriptid= 0 - endtry - try - let srcid = substitute(curline,parsepat,'\2','e') - catch /^Vim\%((\a\+)\)\=:E486/ - let srcid= 0 - endtry - try - let fname= substitute(curline,parsepat,'\3','e') - catch /^Vim\%((\a\+)\)\=:E486/ - let fname= "" - endtry - try - let cmmnt= substitute(curline,parsepat,'\4','e') - catch /^Vim\%((\a\+)\)\=:E486/ - let cmmnt= "" - endtry -" call Decho("curline <".curline.">") -" call Decho("parsepat<".parsepat.">") -" call Decho("scriptid<".scriptid.">") -" call Decho("srcid <".srcid.">") -" call Decho("fname <".fname.">") - endif - - " plugin author protection from downloading his/her own scripts atop their latest work - if scriptid == 0 || srcid == 0 - " When looking for :AutoInstall: lines, skip scripts that have 0 0 scriptname - let @a= rega -" call Dret("GetOneScript : skipping a scriptid==srcid==0 line") - return - endif - - let doautoinstall= 0 - if fname =~ ":AutoInstall:" -" call Decho("case AutoInstall: fname<".fname.">") - let aicmmnt= substitute(fname,'\s\+:AutoInstall:\s\+',' ','') -" call Decho("aicmmnt<".aicmmnt."> s:autoinstall=".s:autoinstall) - if s:autoinstall != "" - let doautoinstall = g:GetLatestVimScripts_allowautoinstall - endif - else - let aicmmnt= fname - endif -" call Decho("aicmmnt<".aicmmnt.">: doautoinstall=".doautoinstall) - - exe "norm z\" - redraw! -" call Decho('considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid) - echo 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid - - " grab a copy of the plugin's vim.sourceforge.net webpage - let scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='.scriptid - let tmpfile = tempname() - let v:errmsg = "" - - " make up to three tries at downloading the description - let itry= 1 - while itry <= 3 -" call Decho(".try#".itry." to download description of <".aicmmnt."> with addr=".scriptaddr) - if has("win32") || has("win16") || has("win95") -" call Decho(".new|exe silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)."|bw!") - new|exe "silent r!".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile).' '.shellescape(scriptaddr)|bw! - else -" call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr)) - exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(tmpfile)." ".shellescape(scriptaddr) - endif - if itry == 1 - exe "silent vsplit ".fnameescape(tmpfile) - else - silent! e % - endif - setlocal bh=wipe - - " find the latest source-id in the plugin's webpage - silent! 1 - let findpkg= search('Click on the package to download','W') - if findpkg > 0 - break - endif - let itry= itry + 1 - endwhile -" call Decho(" --- end downloading tries while loop --- itry=".itry) - - " testing: did finding "Click on the package..." fail? - if findpkg == 0 || itry >= 4 - silent q! - call delete(tmpfile) - " restore options - let &t_ti = t_ti - let &t_te = t_te - let &rs = rs - let s:downerrors = s:downerrors + 1 -" call Decho("***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">") - echomsg "***warning*** couldn'".'t find "Click on the package..." in description page for <'.aicmmnt.">" -" call Dret("GetOneScript : srch for /Click on the package/ failed") - let @a= rega - return - endif -" call Decho('found "Click on the package to download"') - - let findsrcid= search('src_id=','W') - if findsrcid == 0 - silent q! - call delete(tmpfile) - " restore options - let &t_ti = t_ti - let &t_te = t_te - let &rs = rs - let s:downerrors = s:downerrors + 1 -" call Decho("***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">") - echomsg "***warning*** couldn'".'t find "src_id=" in description page for <'.aicmmnt.">" - let @a= rega -" call Dret("GetOneScript : srch for /src_id/ failed") - return - endif -" call Decho('found "src_id=" in description page') - - let srcidpat = '^\s*\([^<]\+\)<.*$' - let latestsrcid= substitute(getline("."),srcidpat,'\1','') - let sname = substitute(getline("."),srcidpat,'\2','') " script name actually downloaded -" call Decho("srcidpat<".srcidpat."> latestsrcid<".latestsrcid."> sname<".sname.">") - silent q! - call delete(tmpfile) - - " convert the strings-of-numbers into numbers - let srcid = srcid + 0 - let latestsrcid = latestsrcid + 0 -" call Decho("srcid=".srcid." latestsrcid=".latestsrcid." sname<".sname.">") - - " has the plugin's most-recent srcid increased, which indicates that it has been updated - if latestsrcid > srcid -" call Decho("[latestsrcid=".latestsrcid."] <= [srcid=".srcid."]: need to update <".sname.">") - - let s:downloads= s:downloads + 1 - if sname == bufname("%") - " GetLatestVimScript has to be careful about downloading itself - let sname= "NEW_".sname - endif - - " ----------------------------------------------------------------------------- - " the plugin has been updated since we last obtained it, so download a new copy - " ----------------------------------------------------------------------------- -" call Decho(".downloading new <".sname.">") - echomsg ".downloading new <".sname.">" - if has("win32") || has("win16") || has("win95") -" 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") - 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 - else -" call Decho(".exe silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id=')) - exe "silent !".g:GetLatestVimScripts_wget." ".g:GetLatestVimScripts_options." ".shellescape(sname)." ".shellescape('http://vim.sourceforge.net/scripts/download_script.php?src_id=').latestsrcid - endif - - " -------------------------------------------------------------------------- - " AutoInstall: only if doautoinstall has been requested by the plugin itself - " -------------------------------------------------------------------------- -" call Decho("checking if plugin requested autoinstall: doautoinstall=".doautoinstall) - if doautoinstall -" call Decho(" ") -" call Decho("Autoinstall: getcwd<".getcwd()."> filereadable(".sname.")=".filereadable(sname)) - if filereadable(sname) -" call Decho("<".sname."> is readable") -" call Decho("exe silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall)) - exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall) - let curdir = fnameescape(substitute(getcwd(),'\','/','ge')) - let installdir= curdir."/Installed" - if !isdirectory(installdir) - call mkdir(installdir) - endif -" call Decho("curdir<".curdir."> installdir<".installdir.">") -" call Decho("exe cd ".fnameescape(s:autoinstall)) - exe "cd ".fnameescape(s:autoinstall) - - " determine target directory for moves - let firstdir= substitute(&rtp,',.*$','','') - let pname = substitute(sname,'\..*','.vim','') -" call Decho("determine tgtdir: is <".firstdir.'/AsNeeded/'.pname." readable?") - if filereadable(firstdir.'/AsNeeded/'.pname) - let tgtdir= "AsNeeded" - else - let tgtdir= "plugin" - endif -" call Decho("tgtdir<".tgtdir."> pname<".pname.">") - - " decompress - if sname =~ '\.bz2$' -" call Decho("decompress: attempt to bunzip2 ".sname) - exe "silent !bunzip2 ".shellescape(sname) - let sname= substitute(sname,'\.bz2$','','') -" call Decho("decompress: new sname<".sname."> after bunzip2") - elseif sname =~ '\.gz$' -" call Decho("decompress: attempt to gunzip ".sname) - exe "silent !gunzip ".shellescape(sname) - let sname= substitute(sname,'\.gz$','','') -" call Decho("decompress: new sname<".sname."> after gunzip") - elseif sname =~ '\.xz$' -" call Decho("decompress: attempt to unxz ".sname) - exe "silent !unxz ".shellescape(sname) - let sname= substitute(sname,'\.xz$','','') -" call Decho("decompress: new sname<".sname."> after unxz") - else -" call Decho("no decompression needed") - endif - - " distribute archive(.zip, .tar, .vba) contents - if sname =~ '\.zip$' -" call Decho("dearchive: attempt to unzip ".sname) - exe "silent !unzip -o ".shellescape(sname) - elseif sname =~ '\.tar$' -" call Decho("dearchive: attempt to untar ".sname) - exe "silent !tar -xvf ".shellescape(sname) - elseif sname =~ '\.vba$' -" call Decho("dearchive: attempt to handle a vimball: ".sname) - silent 1split - if exists("g:vimball_home") - let oldvimballhome= g:vimball_home - endif - let g:vimball_home= s:autoinstall - exe "silent e ".fnameescape(sname) - silent so % - silent q - if exists("oldvimballhome") - let g:vimball_home= oldvimballhome - else - unlet g:vimball_home - endif - else -" call Decho("no dearchiving needed") - endif - - " --------------------------------------------- - " move plugin to plugin/ or AsNeeded/ directory - " --------------------------------------------- - if sname =~ '.vim$' -" call Decho("dearchive: attempt to simply move ".sname." to ".tgtdir) - exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".tgtdir - else -" call Decho("dearchive: move <".sname."> to installdir<".installdir.">") - exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".installdir - endif - if tgtdir != "plugin" -" call Decho("exe silent !".g:GetLatestVimScripts_mv." plugin/".shellescape(pname)." ".tgtdir) - exe "silent !".g:GetLatestVimScripts_mv." plugin/".shellescape(pname)." ".tgtdir - endif - - " helptags step - let docdir= substitute(&rtp,',.*','','e')."/doc" -" call Decho("helptags: docdir<".docdir.">") - exe "helptags ".fnameescape(docdir) - exe "cd ".fnameescape(curdir) - endif - if fname !~ ':AutoInstall:' - let modline=scriptid." ".latestsrcid." :AutoInstall: ".fname.cmmnt - else - let modline=scriptid." ".latestsrcid." ".fname.cmmnt - endif - else - let modline=scriptid." ".latestsrcid." ".fname.cmmnt - endif - - " update the data in the file - call setline(line("."),modline) -" call Decho("update data in ".expand("%")."#".line(".").": modline<".modline.">") -" else " Decho -" call Decho("[latestsrcid=".latestsrcid."] <= [srcid=".srcid."], no need to update") - endif - - " restore options - let &t_ti = t_ti - let &t_te = t_te - let &rs = rs - let @a = rega -" call Dredir("BUFFER TEST (GetOneScript)","ls!") - -" call Dret("GetOneScript") -endfun - -" --------------------------------------------------------------------- -" Restore Options: {{{1 -let &cpo= s:keepcpo -unlet s:keepcpo - -" --------------------------------------------------------------------- -" Modelines: {{{1 -" vim: ts=8 sts=2 fdm=marker nowrap diff --git a/autoload/textformat.vim b/autoload/textformat.vim deleted file mode 100644 index 67d9335..0000000 --- a/autoload/textformat.vim +++ /dev/null @@ -1,610 +0,0 @@ -" Text formatter plugin for Vim text editor -" -" Version: 2.1 -" Last Change: 2008-09-13 -" Maintainer: Teemu Likonen -" License: This file is placed in the public domain. -" GetLatestVimScripts: 2324 1 :AutoInstall: TextFormat - -"{{{1 The beginning stuff -if &compatible - finish -endif -let s:save_cpo = &cpo -set cpo&vim - -" Constant variables(s) {{{1 -let s:default_width = 80 - -function! s:Align_Range_Left(...) range "{{{1 - " The optional parameter is the left indent. If it is not given we - " detect the indent used in the buffer. - if a:0 && a:1 >= 0 - " The parameter was given so we just use that as the left - " indent. - let l:leading_ws = s:Retab_Indent(a:1) - for l:line in range(a:firstline,a:lastline) - let l:line_string = getline(l:line) - let l:line_replace = s:Align_String_Left(l:line_string) - if &formatoptions =~ 'w' && l:line_string =~ '\m\s$' - " Preserve trailing whitespace because fo=~w - let l:line_replace .= ' ' - endif - if l:line_replace =~ '\m^\s*$' - call setline(l:line,'') - else - call setline(l:line,l:leading_ws.l:line_replace) - endif - endfor - else - " The parameter was not given so we detect each paragraph's - " indent. - let l:line = a:firstline - while l:line <= a:lastline - let l:line_string = getline(l:line) - if l:line_string =~ '\m^\s*$' - " The line is empty or contains only - " whitespaces so print empty line and - " continue. - call setline(l:line,'') - let l:line += 1 - continue - endif - - " Paragraph (or the whole line range) begins here so - " get the indent of the first line and print the line. - let l:leading_ws = s:Retab_Indent(indent(l:line)) - let l:line_replace = s:Align_String_Left(l:line_string) - if &formatoptions =~ 'w' && l:line_string =~ '\m\s$' - let l:line_replace .= ' ' - endif - call setline(l:line,l:leading_ws.l:line_replace) - let l:line += 1 - - " If fo=~w, does the paragraph end here? If yes, - " continue to next round and find a new first line. - if &formatoptions =~ 'w' && l:line_string =~ '\m\S$' - continue - endif - - " If fo=~2 get the indent of the second line - if &formatoptions =~ '2' - let l:leading_ws = s:Retab_Indent(indent(l:line)) - endif - - " This loop will go through all the lines in the - " paragraph (or till the a:lastline) - starting from - " the second line. - while l:line <= a:lastline && getline(l:line) !~ '\m^\s*$' - let l:line_string = getline(l:line) - let l:line_replace = s:Align_String_Left(l:line_string) - if &formatoptions =~ 'w' - if l:line_string =~ '\m\s$' - call setline(l:line,l:leading_ws.l:line_replace.' ') - let l:line += 1 - continue - else - call setline(l:line,l:leading_ws.l:line_replace) - let l:line += 1 - " fo=~w and paragraph ends - " here so we break the loop. - " The next line is new first - " line. - break - endif - else - call setline(l:line,l:leading_ws.l:line_replace) - let l:line += 1 - endif - endwhile - endwhile - endif -endfunction - -function! s:Align_Range_Right(width) "{{{1 - let l:line_replace = s:Align_String_Right(getline('.'),a:width) - if &formatoptions =~ 'w' && getline('.') =~ '\m\s$' - let l:line_replace .= ' ' - endif - if l:line_replace =~ '\m^\s*$' - " If line would be full of spaces just print empty line. - call setline(line('.'),'') - else - " Retab leading whitespaces - let l:leading_ws = s:Retab_Indent(strlen(substitute(l:line_replace,'\v^( *).*$','\1',''))) - " Get the rest of the line - let l:line_replace = substitute(l:line_replace,'^ *','','') - call setline(line('.'),l:leading_ws.l:line_replace) - endif -endfunction - -function! s:Align_Range_Justify(width, ...) range "{{{1 - " If the optional second argument is given (and is non-zero) each - " paragraph's last line and range's last line is left-aligned. - if a:0 && a:1 - let l:paragraph = 1 - else - let l:paragraph = 0 - endif - let l:line = a:firstline - while l:line <= a:lastline - let l:line_string = getline(l:line) - if l:line_string =~ '\m^\s*$' - " The line is empty or contains only - " whitespaces so print empty line and - " continue. - call setline(l:line,'') - let l:line += 1 - continue - endif - - " Paragraph (or the whole line range) begins here so - " get the indent of the first line and print the line. - let l:indent = indent(l:line) - let l:width = a:width - l:indent - let l:leading_ws = s:Retab_Indent(l:indent) - - if l:paragraph && (l:line == a:lastline || getline(l:line+1) =~ '\m^\s*$' || (&formatoptions =~ 'w' && l:line_string =~ '\m\S$')) - let l:line_replace = s:Align_String_Left(l:line_string) - else - let l:line_replace = s:Align_String_Justify(l:line_string,l:width) - endif - if &formatoptions =~ 'w' && l:line_string =~ '\m\s$' - let l:line_replace .= ' ' - endif - call setline(l:line,l:leading_ws.l:line_replace) - let l:line += 1 - - " If fo=~w, does the paragraph end here? If yes, - " continue to next round and find a new first line. - if &formatoptions =~ 'w' && l:line_string =~ '\m\S$' - continue - endif - - " If fo=~2 get the indent of the second line - if &formatoptions =~ '2' - let l:indent = indent(l:line) - let l:width = a:width - l:indent - let l:leading_ws = s:Retab_Indent(l:indent) - endif - - " This loop will go through all the lines in the - " paragraph (or till the a:lastline) - starting from - " paragraph's second line. - while l:line <= a:lastline && getline(l:line) !~ '\m^\s*$' - let l:line_string = getline(l:line) - if l:paragraph && (l:line == a:lastline || getline(l:line+1) =~ '\m^\s*$' || (&formatoptions =~ 'w' && l:line_string =~ '\m\S$')) - let l:line_replace = s:Align_String_Left(l:line_string) - else - let l:line_replace = s:Align_String_Justify(l:line_string,l:width) - endif - if &formatoptions =~ 'w' - if l:line_string =~ '\m\s$' - call setline(l:line,l:leading_ws.l:line_replace.' ') - let l:line += 1 - continue - else - call setline(l:line,l:leading_ws.l:line_replace) - let l:line += 1 - " fo=~w and paragraph ends - " here so we break the loop. - " The next line is new first - " line. - break - endif - else - call setline(l:line,l:leading_ws.l:line_replace) - let l:line += 1 - endif - endwhile - endwhile -endfunction - -function! s:Align_Range_Center(width) "{{{1 - let l:line_replace = s:Truncate_Spaces(getline('.')) - let l:line_replace = s:Add_Double_Spacing(l:line_replace) - if &formatoptions =~ 'w' && getline('.') =~ '\m\s$' - let l:line_replace .= ' ' - endif - call setline(line('.'),l:line_replace) - execute '.center '.a:width -endfunction - -function! s:Align_String_Left(string) "{{{1 - let l:string_replace = s:Truncate_Spaces(a:string) - let l:string_replace = s:Add_Double_Spacing(l:string_replace) - return l:string_replace -endfunction - -function! s:Align_String_Right(string, width) "{{{1 - let l:string_replace = s:Truncate_Spaces(a:string) - let l:string_replace = s:Add_Double_Spacing(l:string_replace) - let l:string_width = s:String_Width(l:string_replace) - let l:more_spaces = a:width-l:string_width - return repeat(' ',l:more_spaces).l:string_replace -endfunction - -function! s:Align_String_Justify(string, width) "{{{1 - let l:string = s:Truncate_Spaces(a:string) - " If the parameter string is empty we can just return a line full of - " spaces. No need to go further. - if l:string =~ '\m^ *$' - return repeat(' ',a:width) - endif - if s:String_Width(s:Add_Double_Spacing(l:string)) >= a:width - " The original string is longer than width so we can just - " return the string. No need to go further. - return s:Add_Double_Spacing(l:string) - endif - let l:string_width = s:String_Width(l:string) - - " This many extra spaces we need. - let l:more_spaces = a:width-l:string_width - " Convert the string to a list of words. - let l:word_list = split(l:string) - " This is the amount of spaces available in the original string (word - " count minus one). - let l:string_spaces = len(l:word_list)-1 - " If there are no spaces there is only one word. We can just return - " the string with padded spaces. No need to go further. - if l:string_spaces == 0 - return l:string.repeat(' ',l:more_spaces) - endif - " Ok, there are more than one word in the string so we get to do some - " real work... - - " Make a list of which each item represent a space available in the - " string. The value means how many spaces there are. At the moment set - " every list item to one: [1, 1, 1, 1, ...] - let l:space_list = [] - for l:item in range(l:string_spaces) - let l:space_list += [1] - endfor - - " Repeat while there are no more need to add any spaces. - while l:more_spaces > 0 - if l:more_spaces >= l:string_spaces - " More extra spaces are needed than there are spaces - " available in the string so we add one more space - " after every word (add 1 to items of space list). - for l:i in range(l:string_spaces) - let l:space_list[l:i] += 1 - endfor - let l:more_spaces -= l:string_spaces - " And then another round... and a check if more spaces - " are needed. - else " l:more_spaces < l:string_spaces - " This list tells where .?! characters are. - let l:space_sentence_full = [] - " This list tells where ,:; characters are. - let l:space_sentence_semi = [] - " And this is for the rest of spaces. - let l:space_other = [] - " Now, find those things: - for l:i in range(l:string_spaces) - if l:word_list[l:i] =~ '\m\S[.?!]$' - let l:space_sentence_full += [l:i] - elseif l:word_list[l:i] =~ '\m\S[,:;]$' - let l:space_sentence_semi += [l:i] - else - let l:space_other += [l:i] - endif - endfor - - " First distribute spaces after .?! - if l:more_spaces >= len(l:space_sentence_full) - " If we need more extra spaces than there are - " .?! spaces, just add one after every item. - for l:i in l:space_sentence_full - let l:space_list[l:i] += 1 - endfor - let l:more_spaces -= len(l:space_sentence_full) - if l:more_spaces == 0 | break | endif - else - " Distribute the rest of spaces evenly and - " break the loop. All the spaces have been - " added. - for l:i in s:Distributed_Selection(l:space_sentence_full,l:more_spaces) - let l:space_list[l:i] +=1 - endfor - break - endif - - " Then distribute spaces after ,:; - if l:more_spaces >= len(l:space_sentence_semi) - " If we need more extra spaces than there are - " ,:; spaces available, just add one after - " every item. - for l:i in l:space_sentence_semi - let l:space_list[l:i] += 1 - endfor - let l:more_spaces -= len(l:space_sentence_semi) - if l:more_spaces == 0 | break | endif - else - " Distribute the rest of spaces evenly and - " break the loop. All the spaces have been - " added. - for l:i in s:Distributed_Selection(l:space_sentence_semi,l:more_spaces) - let l:space_list[l:i] +=1 - endfor - break - endif - - " Finally distribute spaces to other available - " positions and exit the loop. - for l:i in s:Distributed_Selection(l:space_other,l:more_spaces) - let l:space_list[l:i] +=1 - endfor - break - endif - endwhile - - " Now we now where all the extra spaces will go. We have to construct - " the string again. - let l:string = '' - for l:item in range(l:string_spaces) - let l:string .= l:word_list[l:item].repeat(' ',l:space_list[l:item]) - endfor - " Add the last word to the end and return the string. - return l:string.l:word_list[-1] -endfunction - -function! s:Truncate_Spaces(string) "{{{1 - let l:string = substitute(a:string,'\v\s+',' ','g') - let l:string = substitute(l:string,'\m^\s*','','') - let l:string = substitute(l:string,'\m\s*$','','') - return l:string -endfunction - -function! s:String_Width(string) "{{{1 - " This counts the string width in characters. Combining diacritical - " marks do not count so the base character with all the combined - " diacritics is just one character (which is good for our purposes). - " Double-wide characters will not get double width so unfortunately - " they don't work in our algorithm. - return strlen(substitute(a:string,'\m.','x','g')) -endfunction - -function! s:Add_Double_Spacing(string) "{{{1 - if &joinspaces - return substitute(a:string,'\m\S[.?!] ','& ','g') - else - return a:string - endif -endfunction - -function! s:Distributed_Selection(list, pick) "{{{1 - " 'list' is a list-type variable [ item1, item2, ... ] - " 'pick' is a number how many of the list's items we want to choose - " - " This function returns a list which has 'pick' number of items from - " the original list. Items are chosen in distributed manner. For - " example, if 'pick' is 1 then the algorithm chooses an item near the - " center of the 'list'. If 'pick' is 2 then the first one is about 1/3 - " from the beginning and the another one about 2/3 from the beginning. - - " l:pick_list is a list of 0's and 1's and its length will be the - " same as original list's. Number 1 means that this list item will be - " picked and 0 means that the item will be dropped. Finally - " l:pick_list could look like this: [0, 1, 0, 1, 0] - " (i.e., two items evenly picked from a list of five items) - let l:pick_list = [] - - " First pick items evenly from the beginning of the list. This also - " actually constructs the list. - let l:div1 = len(a:list) / a:pick - let l:mod1 = len(a:list) % a:pick - for l:i in range(len(a:list)-l:mod1) - if !eval(l:i%l:div1) - let l:pick_list += [1] - else - let l:pick_list += [0] - endif - endfor - - if l:mod1 > 0 - " The division wasn't even so we get the remaining items and - " distribute them evenly again to the list. - let l:div2 = len(l:pick_list) / l:mod1 - let l:mod2 = len(l:pick_list) % l:mod1 - for l:i in range(len(l:pick_list)-l:mod2) - if !eval(l:i%l:div2) - call insert(l:pick_list,0,l:i) - endif - endfor - endif - - " There may be very different number of zeros in the beginning and the - " end of the list. We count them. - let l:zeros_begin = 0 - for l:i in l:pick_list - if l:i == 0 - let l:zeros_begin += 1 - else - break - endif - endfor - let l:zeros_end = 0 - for l:i in reverse(copy(l:pick_list)) - if l:i == 0 - let l:zeros_end += 1 - else - break - endif - endfor - - " Then we remove them. - if l:zeros_end - " Remove "0" items from the end. We need to remove them first - " from the end because list items' index number will change - " when items are removed from the beginning. Then it would be - " more difficult to remove trailing zeros. - call remove(l:pick_list,len(l:pick_list)-l:zeros_end,-1) - endif - if l:zeros_begin - " Remove zero items from the beginning. - call remove(l:pick_list,0,l:zeros_begin-1) - endif - let l:zeros_both = l:zeros_begin + l:zeros_end - - " Put even amount of zeros to beginning and end - for l:i in range(l:zeros_both/2) - call insert(l:pick_list,0,0) - endfor - for l:i in range((l:zeros_both/2)+(l:zeros_both%2)) - call add(l:pick_list,0) - endfor - - " Finally construct and return a new list which has only the items we - " have chosen. - let l:new_list = [] - for l:i in range(len(l:pick_list)) - if l:pick_list[l:i] == 1 - let l:new_list += [a:list[l:i]] - endif - endfor - return l:new_list -endfunction - -function! s:Retab_Indent(column) "{{{1 - " column = the left indent column starting from 0 Function returns - " a string of whitespaces, a mixture of tabs and spaces depending on - " the 'expandtab' and 'tabstop' options. - if &expandtab - " Only spaces - return repeat(' ',a:column) - else - " Tabs and spaces - let l:tabs = a:column / &tabstop - let l:spaces = a:column % &tabstop - return repeat("\",l:tabs).repeat(' ',l:spaces) - endif -endfunction - -function! s:Reformat_Range(...) range "{{{1 - if a:0 == 2 - let l:first = a:1 - let l:last = a:2 - else - let l:first = a:firstline - let l:last = a:lastline - endif - let l:autoindent = &autoindent - setlocal autoindent - execute l:first - normal! 0 - execute 'normal! V'.l:last.'G$gw' - let &l:autoindent = l:autoindent - " The formatting may change the last line of the range so we return - " it. - return line("'>") -endfunction - -function! textformat#Visual_Align_Left() range "{{{1 - execute a:firstline.','.a:lastline.'call s:Align_Range_Left()' - call s:Reformat_Range(a:firstline,a:lastline) -endfunction - -function! textformat#Visual_Align_Right() range "{{{1 - let l:width = &textwidth - if l:width == 0 | let l:width = s:default_width | endif - - execute a:firstline.','.a:lastline.'call s:Align_Range_Right('.l:width.')' - normal! '>$ -endfunction - -function! textformat#Visual_Align_Justify() range "{{{1 - let l:width = &textwidth - if l:width == 0 | let l:width = s:default_width | endif - - execute a:firstline.','.a:lastline.'call s:Align_Range_Left()' - - let l:last = s:Reformat_Range(a:firstline,a:lastline) - let l:pos = getpos('.') - execute a:firstline.','.l:last.'call s:Align_Range_Justify('.l:width.',1)' - call setpos('.',l:pos) -endfunction - -function! textformat#Visual_Align_Center() range "{{{1 - let l:width = &textwidth - if l:width == 0 | let l:width = s:default_width | endif - - execute a:firstline.','.a:lastline.'call s:Align_Range_Center('.l:width.')' - normal! '>$ -endfunction - -function! textformat#Quick_Align_Left() "{{{1 - let l:autoindent = &autoindent - setlocal autoindent - let l:pos = getpos('.') - silent normal! vip:call s:Align_Range_Left() - call setpos('.',l:pos) - silent normal! gwip - let &l:autoindent = l:autoindent -endfunction - -function! textformat#Quick_Align_Right() "{{{1 - let l:width = &textwidth - if l:width == 0 | let l:width = s:default_width | endif - let l:pos = getpos('.') - silent normal! vip:call s:Align_Range_Right(l:width) - call setpos('.',l:pos) -endfunction - -function! textformat#Quick_Align_Justify() "{{{1 - let l:width = &textwidth - if l:width == 0 | let l:width = s:default_width | endif - let l:autoindent = &autoindent - setlocal autoindent - let l:pos = getpos('.') - silent normal! vip:call s:Align_Range_Left() - call setpos('.',l:pos) - silent normal! gwip - let l:pos = getpos('.') - silent normal! vip:call s:Align_Range_Justify(l:width,1) - call setpos('.',l:pos) - let &l:autoindent = l:autoindent -endfunction - -function! textformat#Quick_Align_Center() "{{{1 - let l:width = &textwidth - if l:width == 0 | let l:width = s:default_width | endif - let l:pos = getpos('.') - silent normal! vip:call s:Align_Range_Center(l:width) - call setpos('.',l:pos) -endfunction - -function! textformat#Align_Command(align, ...) range "{{{1 - " For left align the optional parameter a:1 is [indent]. For others - " it's [width]. - let l:pos = getpos('.') - if a:align ==? 'left' - if a:0 && a:1 >= 0 - execute a:firstline.','.a:lastline.'call s:Align_Range_Left('.a:1.')' - else - execute a:firstline.','.a:lastline.'call s:Align_Range_Left()' - endif - else - if a:0 && a:1 > 0 - let l:width = a:1 - elseif &textwidth - let l:width = &textwidth - else - let l:width = s:default_width - endif - - if a:align ==? 'right' - execute a:firstline.','.a:lastline.'call s:Align_Range_Right('.l:width.')' - elseif a:align ==? 'justify' - execute a:firstline.','.a:lastline.'call s:Align_Range_Justify('.l:width.')' - elseif a:align ==? 'center' - execute a:firstline.','.a:lastline.'call s:Align_Range_Center('.l:width.')' - endif - endif - call setpos('.',l:pos) -endfunction - -"{{{1 The ending stuff -let &cpo = s:save_cpo - -" vim600: fdm=marker diff --git a/autoload/Align.vim b/oldStyle/disabled_plugins/Align.vim similarity index 100% rename from autoload/Align.vim rename to oldStyle/disabled_plugins/Align.vim diff --git a/autoload/AlignMaps.vim b/oldStyle/disabled_plugins/AlignMaps.vim similarity index 100% rename from autoload/AlignMaps.vim rename to oldStyle/disabled_plugins/AlignMaps.vim diff --git a/plugin/statusline.vim b/oldStyle/disabled_plugins/statusline.vim.old similarity index 100% rename from plugin/statusline.vim rename to oldStyle/disabled_plugins/statusline.vim.old diff --git a/plugin/AlignMapsPlugin.vim b/plugin/AlignMapsPlugin.vim deleted file mode 100644 index 7296f7f..0000000 --- a/plugin/AlignMapsPlugin.vim +++ /dev/null @@ -1,253 +0,0 @@ -" AlignMapsPlugin: Alignment maps based upon and -" Maintainer: Dr. Charles E. Campbell. -" Date: Jan 07, 2013 -" -" NOTE: the code herein needs vim 7.0 or later -" Copyright: Copyright (C) 1999-2012 Charles E. Campbell {{{1 -" Permission is hereby granted to use and distribute this code, -" with or without modifications, provided that this copyright -" notice is copied with it. Like anything else that's free, -" AlignMaps.vim is provided *as is* and comes with no warranty -" of any kind, either expressed or implied. By using this -" plugin, you agree that in no event will the copyright -" holder be liable for any damages resulting from the use -" of this software. -" Romans 1:20 For the invisible things of Him since the creation of the {{{1 -" world are clearly seen, being perceived through the things that are -" made, even His everlasting power and divinity; that they may be -" without excuse. - -" --------------------------------------------------------------------- -" Usage: {{{1 -" Use 'a to mark beginning of to-be-aligned region, Alternative: use V -" move cursor to end of region, and execute map. (linewise visual mode) to -" The maps also set up marks 'y and 'z, and retain mark region, execute same -" 'a at the beginning of region. map. Uses 'a, 'y, and 'z. -" -" The start/end wrappers save and restore marks 'y and 'z. -" -" Although the comments indicate the maps use a leading backslash, -" actually they use (:he mapleader), so the user can -" specify that the maps start how he or she prefers. -" -" Note: these maps all use . -" -" Load Once: {{{1 -if &cp || exists("g:loaded_AlignMapsPlugin") - finish -endif -let s:keepcpo = &cpo -let g:loaded_AlignMapsPlugin = "v43" -set cpo&vim - -" ===================================================================== -" Public Interface: {{{1 -com! AlignMapsClean :call AlignMaps#AlignMapsClean() - -" ===================================================================== -" Maps: {{{1 - -" --------------------------------------------------------------------- -" WS: wrapper start map (internal) {{{2 -" Produces a blank line above and below, marks with 'y and 'z -if !hasmapto('WrapperStart') - map WS AlignMapsWrapperStart -endif -nnoremap