Own JS/CSS options

Saturday, December 1, 2012

Circe 1.0 released

Version 1.0 of Circe, the Client for IRC in Emacs, has been released.

It is always difficult to make a release, especially a major one such as 1.0, for software you develop yourself. Programs are really never done, so making that step can take a while. For us, it took over seven years.

Development on Circe began in August 2005. Since then, Circe has grown a lot, and today, a small group of developers are actively using and continuously improving it.

You can read more about it on the client homepage:



  • Jorgen Schäfer (forcer)
  • John Foerch (retroj)
  • mtp
  • Taylan Ulrich B (taylanub)

You can talk to us in #emacs-circe on irc.freenode.net!


Emacs 24 comes with a packaging system that makes installing Circe trivial. Add the following to your .emacs:

(require 'package)
(add-to-list 'package-archives
    '("marmalade" .

After that, M-x package-install RET circe RET should install the client. M-x circe will then ask for a server to connect to.


Circe supports most standard features one would expect of an IRC client, like per-channel and per-query windows, nick highlighting, flood protection, etc. Some of the less common features include:

  • Channel activity is tracked in the mode line. ‘C-c C-SPC‘ cycles through channels with activity, and back to the buffer you came from.
  • A fools list complements the ignore list. Lines from fools are by default hidden, but can be shown temporarily with a keyboard command. This makes it possible to ignore some annoying person, but still figure out what is going on in case someone starts talking with them.
  • Both the ignore and fool features do not only ignore people, but try to be smart about also ignoring those who address the ignored person.
  • Special netsplit handling to avoid the resulting flood.
  • Time stamps do not get copied when chat text is copied using Emacs commands.
  • Lines sent to the server are split automatically to keep them below the maximum line length for IRC. This splitting happens at word boundaries.

Lacking Features

  • DCC has not been implemented.

New in version 1.0

Circe's version history is a bit confusing. Old versions from CVS had a time stamp as a version. The commit messages at some point talked about "Circe 2", but that never got finished. There never was an official release of Circe 1.0.

The author of Circe, Jorgen Schäfer, had a lengthy break sometime from 2006 to 2012. We define the state of Circe on Januar 1st, 2007 as version 0.5.

The following lists user-visible changes since then.


  • We are now on github. As you already noticed, as you are reading this.
  • Circe, Lui, tracking and lcs are now all on the Marmalade repository, so you can install them with M-x package-install


  • Circe now uses a completely different way to configure and set up the client. The circe command takes a network name and additional options. Further options for this network are looked up in circe-network-options (for user configuration) and circe-networks (Circe's default configuration). This incorporates nickserv and autojoin settings. See circe-network-options for a list of possible options.
  • circe-server-auto-join-channels is the new unified auto join list (set via the options described above), which can be used to set channels to be joined immediately on connect, after successfull authentification, or after regaining our preferred nick.
  • Circe now does cycle completion of nicks by default. Nicks are sorted by recent activity, so you should get correct completions on the first try most of the time. Completing on an empty string even completes the last active user.
  • Circe can now protect against lurker spam. When circe-reduce-lurker-spam is set to a true value, Circe will not show JOIN, PART, QUIT or NICK messages for a user until the first time they actually talk on a channel. When they do, Circe will add a note on how long ago they had joined the channel.
  • Nicks in the current channel are now always considered correctly spelled by flyspell.
  • Circe can now regain a preferred nick via NickServ's GHOST command. See circe-nickserv-ghost-style for more information.
  • The fool system has been extended to allow setting of any property or face. See circe-default-properties.
  • When auto-joining channels, Circe can now optionally avoid popping up channel windows. See circe-new-buffer-behavior-ignore-auto-joins for how this works.
  • New user command: circe-reconnect-all. Calls circe-reconnect in all server buffers.
  • New IRC commands: /FOOL and /UNFOOL.
  • IRC color support is now enabled by default.
  • Circe now supports Bitlbee for automatic authentication.
  • TLS encrypted connections to IRC servers are now supported.
  • New supported numerics: 020 (please wait), 042 (unique ID is), 310 (WHOIS available for help), 328 (channel homepage), 329 (topic set on), 330 (WHOIS logged in as), 470 (channel forwarding), 671 (WHOIS secure connection)
  • build.sh replaces the old Makefile to create byte-compiled lisp files and a corresponding autoloads file.
  • Circe now does non-blocking connects by default, speeding up connection speed.
  • Documentation is now not in texinfo anymore, but can be found on the github wiki.


  • New commands in circe-chanop.el: /BANS
  • circe-color-nicks.el is a new extension which allows to automatically assign colors to nicks to make it easier to follow a busy channel.
  • circe-lagmon.el is a new extension that adds a lag monitor to Circe, including automatic reconnect after some time of no response from the server.
  • circe-log.el has been removed because its functionality was broken. Use lui-logging.el.


  • Lui can now place time stamps in the margin. To use this, set lui-time-stamp-position to left-margin or right-margin.
  • The completion framework has been removed in favor of the new Emacs-wide standard completion-at-point functionality. If you set lui-completion-function by hand, nothing should change, but you should consider switching.
  • Scrolling options have been expanded considerably to accomodate bad support by Emacs. See lui-scroll-behavior for more information.
  • Overlays have been replaced with text properties for everything but buttons. This should improve speed considerably.
  • lui-format now can take formatting options. (lui-format "{pi:.2f}" 3.14159) is equivalent to (format "%.2f" 3.14159).
  • lui-logging.el has been reworked to allow a queue of messages to be written to disk, to avoid continuous disk strain on very busy channels.
  • lui-autopaste.el is a new extension that will (after user confirmation) use an external paste service if the input is too long.


  • Setting the variable tracking-most-recent-first will add new entries to the front instead of the end of the list.