" Author: Anton Sharonov
" Author: Eric Van Dewoestine
"
" Description: {{{
"
" License:
"
" Copyright (C) 2005 - 2010 Eric Van Dewoestine
"
" This program is free software: you can redistribute it and/or modify
" it under the terms of the GNU General Public License as published by
" the Free Software Foundation, either version 3 of the License, or
" (at your option) any later version.
"
" This program is distributed in the hope that it will be useful,
" but WITHOUT ANY WARRANTY; without even the implied warranty of
" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" GNU General Public License for more details.
"
" You should have received a copy of the GNU General Public License
" along with this program. If not, see .
"
" }}}
" Script Variables {{{
let s:python_dir = expand(":h")
" }}}
" Execute(port, command) {{{
" Sends to the eclimd server command, supplied as argument string.
" Returns server's respond.
function! eclim#client#python#nailgun#Execute(port, command)
call s:InitClient(a:port)
let result_viml = ""
let retcode = 0
let begin = localtime()
try
python << PYTHONEOF
command = vim.eval('a:command')
(retcode, result) = client.send(command)
vim.command('let retcode = %i' % retcode)
vim.command("let result = '%s'" % result.replace("'", "''"))
PYTHONEOF
finally
call eclim#util#EchoTrace(
\ 'nailgun.py (port: ' . a:port . '): ' . a:command, localtime() - begin)
endtry
return [retcode, result]
endfunction " }}}
" Reconnect(port) {{{
" Does unconditional reconnect of the python_if
" (useful to manual recover from errors in the python_if)
function! eclim#client#python#nailgun#Reconnect(port)
call s:InitClient(a:port)
python << PYTHONEOF
client.reconnect()
PYTHONEOF
endfunction " }}}
" SetKeepAlive(port, value) {{{
" Updates the in runtime value of the keepAlive flag.
function! eclim#client#python#nailgun#SetKeepAlive(port, value)
call s:InitClient(a:port)
python << PYTHONEOF
client.keepAlive = int(vim.eval('a:value'))
PYTHONEOF
endfunction " }}}
" GetKeepAlive(port) {{{
" Retrieves the value of the keepAlive flag.
function! eclim#client#python#nailgun#GetKeepAlive(port)
call s:InitClient(a:port)
let result = 0
python << PYTHONEOF
vim.command("let result = %s" % client.keepAlive)
PYTHONEOF
return result
endfunction " }}}
" GetReconnectCounter(port) {{{
" Retrieves the value of the reconnect counter.
function! eclim#client#python#nailgun#GetReconnectCounter(port)
call s:InitClient(a:port)
let result = 0
python << PYTHONEOF
vim.command("let result = %d" % client.reconnectCounter)
PYTHONEOF
return result
endfunction " }}}
" s:InitClient(port) {{{
" Initializes the python interface to the nailgun server.
function! s:InitClient(port)
python << PYTHONEOF
if not vars().has_key('clients'):
import sys, vim
sys.path.append(vim.eval('s:python_dir'))
import nailgun
clients = {}
port = int(vim.eval('a:port'))
if not clients.has_key(port):
clients[port] = nailgun.Nailgun(
port=port,
keepAlive=vim.eval('g:EclimNailgunKeepAlive'),
)
client = clients[port]
PYTHONEOF
endfunction " }}}
" vim:ft=vim:fdm=marker