beirc is a CLIM IRC client application using the cl-irc library as a backend, initially written by Gilbert Baumann, now maintained by Dave Murray and others.

An overview of features, instructions, and screen shots are available at [2021-03-21: Some links on that page need fixing.]

Beirc requires the newest CVS version of cl-irc and McCLIM, as well as Max-Gerd Retzlaff's tab-layout-pane. Note also that beirc currently requires a lisp that supports multiple processes. The developers are using multithreaded SBCL on x86/linux and OpenMCL on ppc/darwin. CMUCL on x86 could work, as well. (More details are available in the table below. If you get beirc running on a system not noted there, please add it.)

Warning: The sound support in beirc is currently very experimental. It works on ACL, probably works on SBCL, and almost certainly only on Unix variants.

Depends on: mcclim, cl-irc, split-sequence, cl-ppcre, cl-fad


License: MIT-style


Customizable variables

These can be set in the .beirc.lisp file in your home directory (although this too can be changed in variables.lisp):

Set to url (as a string) of your local copy of the Hyperspec and specbot's clhs query answers will be rewritten appropriately.
The maximum width in characters of the message column (as distinct from the name column and the timestamp column). Defaults to 80.
The position of the timestamp column on the screen. Either :right (the default) or :left.
Your nick, as a string.
The command (as a string) to run your web browser. Should work out-of-the-box.
An alist mapping an irc server name (as a string) to a list of channels (each a string) to automatically join on connecting.
An alist mapping an irc server name (as a string) to the password (as a string) to send to the NickServ authentication bot.
A string naming a program (or a program and command-line arguments) that will read sound files from standard input and play them. Used for rudimentary sound support.
A filename (string) that specifies a file to be played (by *default-sound-player*), when your nick is mentioned. Could be NIL instead.


/Connect server nick
Identify yourself to the NickServ service.
/Join channel
/Focus nick
Display messages from nick in bold.
/Unfocus nick
Stop displaying messages from nick in bold.
/Ignore nick
Don't display any messages from nick, past or future.
/Unignore nick
Display messages from nick again.
/Nick string
Change nick to string.
/Me stuff
Do stuff.
/Msg nick message
Send message to nick.
Reload the user init file.
/Part message
Leave the channel with message.
/Close window[,window2...]
Close the list of windows. If any of these windows refers to a channel, leave each channel.
/Whois nick
Perform a WHOIS query on nick.
/Topic [:Topic new topic]
If executed without keyword arguments, shows the current channel topic. If passed the :Topic keyword argument, sets the current channel topic to new topic.
/Op nick
Give channel operator status to nick.
/Deop nick
Remove channel operator status from nick..
/Ban Nick nick
Set channel mode +b (ban) to nick!*@*.
/Ban Hostmask hostmask
Set channel mode +b (ban) to hostmask.
/Kick nick
Kick nick from the current channel.
Display the list of users on the current channel.
/Away message
Set away status to message.
/Quit message
Disconnect from the server with message and terminate beirc.
/Disconnect message
Disconnect from the server with message.
/Switch Timestamp Orientation
Sets orientation of timestamps to the left column if they are in the right column and vice versa.

Mouse Interaction

There's an awful lot of it. Many items are displayed as clickable CLIM presentations, including nicks, URLs, tabs for servers and channels, etc., allowing easy access to basic commands. Documentation for whatever you're about to do by clicking is provided, as in other CLIM apps, in the lowest, black pane; this gives you an idea of what, if anything, will happen when your Left, Middle or Right click occurs.

Working Systems

The following Hardware/OS/Lisp Implementation combinations are known to run beirc (somewhere, at least):

Hardware Platform OS OS Version Lisp Implementation
Intel x86 Debian GNU/Linux 3.1, kernel 2.6.13 Multithread SBCL 0.9.5
Intel x86 Mandriva GNU/Linux 3.1, kernel 2.6.12 Allegro CL 8.0
PowerPC G4 OS X 10.4.2 OpenMCL 0.14.4-pre-050807a

Wish List

  • /list command, or users pane a la XChat.
  • Working help.
  • Some hints about keystrokes (this is really at least partly a McCLIM issue).
  • A pony.
  • The moon. On a stick.
  • "IRC clients should show a diff on topic change."


Things that should probably be fixed, once we know what causes them.

  • URL handling for URLs that appear in the chat as (<url>) does not work. AFAICT, the url is forwarded to the browser together with the opening paren, causing failure.
  • Would be nice to have auto-identify, the same way we have auto-join.
  • Use of help command causes error. Error: attempt to call `#:STREAM44679' which is an undefined function.
  • List of commands that you get on right click should be listed alphabetically (or possibly even in nested menus, since the list is so long).
  • There are many ways to cause the system to fail with completion errors. These should be trapped. Some of this is more McCLIM problems than BEIRC proper, I figure.
  • The nick completion seems limited. E.g., if you do whois, and you give some prefix for a number of different nicks, and then press , you get a tab character (yuck) in the input buffer, you don't get a list of candidates that match the prefix. E.g., if you type "foo," I would expect to see some indication that "foo_work" "foo_home" and "foo_" would all be legitimate completions (I'm not sure how to deal with this case if "foo" is there, too.
Old bugs:
  • The box-adjuster-gadget does not work for me (rpg). It comes active, but is unable to adjust the size of the windows. Seems not to happen for others (antifuchs) with different setups (possibly more up-to-date CLX than the version included with ACL?). This seems to be a problem with the setting of min-height in the space-requirement for the tab-layout-pane. I have not yet been able to track down where this is set. fixed: There were exact pixel sizes coded in as :height and :width. By default, any window settings are copied into :min-height and :min-width. Being a little more careful about the difference between :height (resp. width) and :min-height, seems to have fixed things up.