" pyclewn run time file " Maintainer: " " Configure VIM to be used with pyclewn and netbeans " if exists("s:did_pyclewn") finish endif let s:did_pyclewn = 1 let s:start_err = "Error: pyclewn failed to start, " let s:start_err .= "run the 'pyclewn' program to get the cause of the problem." " The following variables define how pyclewn is started when " the ':Pyclewn' vim command is run. " They may be changed to match your preferences. let s:pgm = "pyclewn" if exists("pyclewn_args") let s:args = pyclewn_args else let s:args = "--window=top --maxlines=10000 --background=Cyan,Green,Magenta" endif if exists("pyclewn_connection") let s:connection = pyclewn_connection else let s:connection = "localhost:3219:changeme" endif " Uncomment the following line to print full traces in a file named 'logfile' " for debugging purpose. " let s:args .= " --level=nbdebug --file=logfile" " The 'Pyclewn' command starts pyclewn and vim netbeans interface. let s:fixed = "--daemon --editor= --netbeans=" . s:connection . " --cargs=" " Run the 'Cinterrupt' command to open the console function s:start_pdb(args) let argl = split(a:args) if index(argl, "--pdb") != -1 " find the prefix let prefix = "C" let idx = index(argl, "-x") if idx == -1 let idx = index(argl, "--prefix") if idx == -1 for item in argl if stridx(item, "--prefix") == 0 let pos = stridx(item, "=") if pos != -1 let prefix = strpart(item, pos + 1) endif endif endfor endif endif if idx != -1 && len(argl) > idx + 1 let prefix = argl[idx + 1] endif " hack to prevent Vim being stuck in the command line with '--More--' echohl WarningMsg echo "About to run the 'interrupt' command." call inputsave() call input("Press the key to continue.") call inputrestore() echohl None exe prefix . "interrupt" endif endfunction " Check wether pyclewn successfully wrote the script file function s:pyclewn_ready(filename) let l:cnt = 1 let l:max = 20 echohl WarningMsg while l:cnt < l:max echon "." let l:cnt = l:cnt + 1 if filereadable(a:filename) break endif sleep 200m endwhile echohl None if l:cnt == l:max throw s:start_err endif call s:info("Creation of vim script file \"" . a:filename . "\": OK.\n") endfunction " Start pyclewn and vim netbeans interface. function s:start(args) if !exists(":nbstart") throw "Error: the ':nbstart' vim command does not exist." endif if has("netbeans_enabled") throw "Error: netbeans is already enabled and connected." endif if !executable(s:pgm) throw "Error: '" . s:pgm . "' cannot be found or is not an executable." endif let l:tmpfile = tempname() " remove console and dbgvar buffers from previous session if bufexists("(clewn)_console") bwipeout (clewn)_console endif if bufexists("(clewn)_dbgvar") bwipeout (clewn)_dbgvar endif " start pyclewn and netbeans call s:info("Starting pyclewn.\n") exe "silent !" . s:pgm . " " . a:args . " " . s:fixed . l:tmpfile . " &" call s:info("Running nbstart, to interrupt.\n") call s:pyclewn_ready(l:tmpfile) exe "nbstart :" . s:connection " source vim script if has("netbeans_enabled") if !filereadable(l:tmpfile) nbclose throw s:start_err endif " the pyclewn generated vim script is sourced only once if ! exists("s:source_once") let s:source_once = 1 exe "source " . l:tmpfile endif call s:info("The netbeans socket is connected.\n") call s:start_pdb(a:args) else throw "Error: the netbeans socket could not be connected." endif endfunction function pyclewn#StartClewn(...) " command to start pdb: Pyclewn pdb foo.py arg1 arg2 .... let l:args = s:args if a:0 != 0 if a:1 == "pdb" if a:0 == 2 && filereadable(a:2) == 0 call s:error("File '" . a:2 . "' is not readable.") return endif let l:args .= " --pdb" if a:0 > 1 let l:args .= " --args \"" . join(a:000[1:], ' ') . "\"" endif else call s:error("Invalid optional first argument: must be 'pdb'.") return endif endif try call s:start(l:args) catch /.*/ call s:info("The 'Pyclewn' command has been aborted.\n") call s:error(v:exception) " vim console screen is garbled, redraw the screen if !has("gui_running") redraw! endif " clear the command line echo "\n" endtry endfunction function s:info(msg) echohl WarningMsg echo a:msg echohl None endfunction function s:error(msg) echohl ErrorMsg echo a:msg call inputsave() call input("Press the key to continue.") call inputrestore() echohl None endfunction