vim/bundle/ooze/plugin/ooze.vim @ a5c9b4b0936a

Neovim
author Steve Losh <steve@stevelosh.com>
date Wed, 09 Dec 2015 12:14:45 +0000
parents a87221e612e6
children 83aac563abc9
function! s:IsString(a)
    return type(a:a) == 1
endfunction

function! s:HandleMessage(msg)
    let stdout = get(a:msg, 'stdout')
    if s:IsString(stdout)
        echo stdout
    endif

    let stderr = get(a:msg, 'stderr')
    if s:IsString(stderr)
        echo stderr
    endif

    let value = get(a:msg, 'value')
    if s:IsString(value)
        echo value
    endif
endfunction

function! s:HandleData(data)
    for msg in bencode#BdecodeAll(a:data)
        call s:HandleMessage(msg)
    endfor
endfunction

silent! function s:JobHandler(job_id, data, event)
    if a:event == 'stdout'
        call s:HandleData(join(a:data, "\n"))
    elseif a:event == 'stderr'
        1
    else
        1
    endif
endfunction

let s:callbacks = {
\ 'on_stdout': function('s:JobHandler'),
\ 'on_stderr': function('s:JobHandler'),
\ 'on_exit': function('s:JobHandler')
\ }

if !exists("g:ooze_connection")
    let g:ooze_connection = 0
endif

function! OozeDisconnect()
    if g:ooze_connection
        call jobstop(g:ooze_connection)
        let g:ooze_connection = 0
    endif
endfunction

function! OozeConnect()
    if g:ooze_connection
        call OozeDisconnect()
    endif
    let g:ooze_connection = jobstart(['nc', 'localhost', '8675'], s:callbacks)
endfunction

function! OozeEval(code)
    if !g:ooze_connection
        throw "Not connected!"
    endif
    let msg = {"op": "eval", "code": a:code}
    call jobsend(g:ooze_connection, bencode#Bencode(msg))
endfunction

function! OozeEvalSelection()
    let z = @z
    normal! gv"zy
    call OozeEval(@z)
    let @z = z
endfunction

function! OozeMapKeys()
    nnoremap <buffer> <localleader>C :call OozeConnect()<cr>
    nnoremap <buffer> <localleader>K :call OozeDisconnect()<cr>

    nnoremap <buffer> <localleader>E :call OozeEval(input("? "))<cr>
    vnoremap <buffer> <localleader>e :<c-u>call OozeEvalSelection()<cr>
    nnoremap <buffer> <localleader>e mz:silent normal! l<cr>:call PareditFindDefunBck()<cr>vab:<c-u>call OozeEvalSelection()<cr>`z
endfunction

augroup ooze_dev
    au!
    autocmd BufWritePost ooze.vim source %
augroup END