|
#!/usr/bin/env coffee
exec = require('child_process').exec
readline = require 'readline'
# Send something to nailgun and format the result.
send_to_repl = (str) ->
child = exec "/home/lu/t/vim/clojure/client/ng vimclojure.Nail Repl -r",
(err, stdout, stderr) ->
if(err)
console.log err
exit 1
answer = JSON.parse stdout
process.stdout.write answer.stdout
if answer.stderr isnt ""
process.stderr.write answer.stderr
rl.prompt()
child.stdin.write str
child.stdin.end()
get_completion_for = (str, cb) ->
relevant_match = str.match(/[a-zA-Z][a-zA-Z0-9\-\?]+$/)
if relevant_match
relevant = relevant_match[0]
else
cb null, [[], str]
return
exec "/home/lu/t/vim/clojure/client/ng vimclojure.Nail Complete --base #{relevant}",
(err, stdout, stderr) ->
if(err)
console.log err
exit 1
answer = JSON.parse stdout
matches = (m.word for m in answer.value)
cb null, [matches, str]
is_balanced = (str) ->
n = 0
for c in str
n += 1 if c in "([\""
n -= 1 if c in ")]\""
n == 0
console.log "o'rly 0.x (clojure repl with a nailgun)"
rl = readline.createInterface process.stdin, process.stdout, get_completion_for
rl.setPrompt "> "
rl.prompt()
cmplt = ""
rl.on 'line', (cmd) ->
cmd = cmplt + cmd
if is_balanced cmd
send_to_repl cmd
else
cmplt = cmd
rl.write(" ")
|