[slim-vim] Anyone out there? Resurrection!
Brad Beveridge
brad.beveridge at gmail.com
Tue Apr 29 09:21:05 CDT 2008
On 29/04/2008, Mikael Jansson <lists at mikael.jansson.be> wrote:
> Hi,
>
> After having worked on getting the easier parts of a Lisp IDE up and
> running (boot a Lisp and send code to it), I'm getting interested in
> what can be done to talk to SWANK.
>
> Now, while the current implementation of vim+ecl+async seems rather
> complete, barring the issues w/ thrashing internal Vim state, I'd like
> to approach the problem from a different angle.
>
> For me, what's most important is to be able to use a /small/ part of
> SWANK's possibilities for introspection (changing package, getting a
> list of symbols for completion and function lambda lists), and not
> necessarily being able to code Lisp /in/ Vim (even though it helps when
> trying to communicate with SWANK).
>
> So, I've been looking through some different approaches at asynchronous
> communication with Vim, and the most promising approach here is the
> |clientserver| feature. It gives you an asynchronous send from the
> client, and a blocking receive on the server, completely within the
> boundaries of an unpatched Vim.
>
> What I had in mind was to make a thin wrapper around SWANK, letting it
> pretend to be a Vim server. I haven't really investigated it any
> further than by testing some code by Vim user "A. Politz":
>
> ----------
> " client.vim
> "
> " $ vim --servername client
> " :source client.vim
> " :Tool "hello, world"
> " :messages
>
> "Get to know each other
> call remote_expr("SERVER","1","serverid")
>
> augroup server
> au!
> "Do something with the reply
> au RemoteReply * echom remote_read(g:serverid)
> augroup END
>
> "Send messages via SERVER
> com! -nargs=* Server :call server2client(g:serverid,<q-args>)
> ----------
>
> ----------
> " server.vim
> "
> " $ vim --servername server
> " :source server.vim
> " :let data = ReceiveDataBlocking()
> " :echo data
> " :call Reply("I, the server, received \"".data."\" from the client")
>
> "Get to know each other
> call remote_expr("CLIENT","1","clientid")
>
> func! ReceiveDataBlocking()
> "called from your tool, blocks till msg is available
> return remote_read(g:clientid)
> endfun
>
> func! Reply(msg)
> "called by the tool to reply
> call server2client(g:clientid,a:msg)
> endfun
> ----------
>
> Is this a path you've already been on?
>
> (Yes, it is very simple, but like I said, I believe having something
> simple is better than not having at at all.)
>
> Regarding my current work, it's just an extension of Larry Clapp's
> VILisp package, and is available at
> http://mikael.jansson.be/hacking/limp, so you see where I'm coming from.
>
>
> -- Mikael
> _______________________________________________
> slim-vim mailing list
> slim-vim at lispniks.com
> http://www.lispniks.com/mailman/listinfo/slim-vim
>
I don't think that anybody tried this approach, so you may have some
luck doing it this way.
I think a lot of the protocol code I wrote to talk to swank should
probably still work with your approach.
Have fun!
Brad
More information about the slim-vim
mailing list