Lisp Chat

An experimental chat irc-like written in Lisp.




You'll need in your system:

Make sure that ~/.sbclrc has a entry calling to the Quicklisp setup.

(load "~/.quicklisp/setup.lisp")

Since that ~/.quicklisp is the Quicklisp instalation distribution, clone this repository with:

git clone ~/.quicklisp/local-projects/lisp-chat

Tip for Quicklisp

As I said, we'll need a proper instalation of Quicklisp to getting this running. To accomplish that, if you are not familiar with the CL ecossystem, I'll guide you in a simple way: clone the Quicklisp Client and execute the setup.lisp with sbcl --script setup.lisp.

In general Quicklisp distribution provide the folder ~/quicklisp instead of ~/.quicklisp, but I personally don't like it much. Make sure to synchronize with the quicklisp correct folder. Maybe will need change the .sblcrc file to accomplish that, since for default as I said quicklisp set ~/quicklisp folder.


Load the server

$ ./lisp-chat-server

Get a client

$ ./lisp-chat

You can easilly setup your own configuration of *port* and *domain* for running a new instance of the server and client. For now we have a instance of lisp-chat as example running. If you really want to runs locally, you can just change the *domain* variable to "localhost" as:

(require 'lisp-chat)
(setq lisp-chat-config:*domain* "localhost")

For Non-lispers

If you want test this and don't have the Lisp environment with SBCL and Quicklisp, I have two alternative choices for you:

  • Python client
  • Netcat client (wtf?)

On Python client, I wrote in a way only using ths stdlib avoiding pain to handle the dependency hell, so you can just call that:

$ python

So finally... netcat. Yes! You can even just use netcat! An user called Chris in past days just logged in the server with the following message:

|16:30:37| [Chris]: Used netcad
|16:30:41| [Chris]: netcat*
|16:30:50| [Chris]: bye

So you can type netcat 5558 and go on! I tested on my machine and works fine! The main reason is because the communication between server and client just use raw data. For better synchronization with text data from server while you typing, I suggest you to use a readline wrapper like rlwrap calling as rlwrap netcat 5558.

Manoel Vilela