I started trying to make a completely event driven client along these lines. The challenge is that Ruby's Readline library doesn't expose `rl_callback_handler_install` and `rl_callback_read_char` so there's no way to have a client with both a nice Readline editing interface and a `select()` driven event loop.

The best solution I could think of is a client with two modes - you're either issuing a command, or you're reading messages. Right now the only way to switch between those modes is for the command to finish, but there's no reason that something like ctrl-c couldn't be added in the future when dynamic subscriptions are implemented.

If you have better ideas I'd love to hear them.