| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- " pyclewn run time file
- " Maintainer: <xdegaye at users dot sourceforge dot net>
- "
- " 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 <Enter> 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, <C-C> 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 <Enter> key to continue.")
- call inputrestore()
- echohl None
- endfunction
|