Irssi is an IRC client for Unix-ish platforms. It features a text mode user interface, modularity, multi-server connectivity, tab completion and a lot of automation.
One of the many great features of Irssi is its Perl scripting support. cras (Timo Sirainen), Irssi's author was smart enough to choose Perl as the scripting language instead of some awkward language like Tcl.
Because I like Irssi so much, I created stuff for it. The rest of this page is a list of my Irssi efforts.
- The Irssi header specification is my fault. The number of scripts was increasing at a very high rate, and because there was no standardized way of presenting information about the script, sometimes there was no way to know what a script did without looking through the code. Someone created a header specification, but I thought it was too restrictive. The information was put in Perl comments, which meant other scripts couldn't access it easily. My proposal got accepted by the community (#irssi on ircnet) and even though it was still a draft, people started using it and the author of the old header specs removed those and placed a link to mine. I used a normal Perl hash so that other scripts had access to the information, and I wanted no dictated formats for anything.
- Because there was none, I made a simple Scripting tutorial. A while ago, I discovered that it is linked from http://irssi.org/. At the time of writing, some features mentioned worked only with the bleeding edge CVS version, but it seems that it has finally been released. The tutorial is by no means extensive, and probably not even enough to get you scripting, but with over a thousand hits per month, it is quite popular anyhow.
- On http://irssi.org/scripts/, you can find a list of scripts. The index is generated by a little script. Probably not worth mentioning, but I am going to anyhow: I made the initial versions.
- Open source is great. If you like some program, but think it could be improved, you just bug the author and hope it'll be implemented one day. cras is one of the good guys, and he implemented most of my ideas. Each time I use a code reference in add_command or have Irssi export some functions, I'm glad I asked.
- Another reason that I like open source is that if you like a program, think it could be improved and know the language the program uses, you can implement new features yourself. You bug the author with a patch instead of a question, and the new features are available for everyone soon after that. I know Perl, and some of Irssi's scripting stuff is written in it. Irssi had its own Irssi::print, but I wanted normal Perl print, because it can do much more. I made it happen. Together with my patch that allows you to import any function in the Irssi:: namespace, approximately 75% of the current Irssi.pm file is my code. This may sound like an awful lot, but it's only 100 lines or so :)
- ../files/irssi/buf.pl saves your scrollbuffer when you use /upgrade. The upgrading feature restarts Irssi, but with this little trick, it'll be harder to notice that Irssi actually did restart. Partly because this script is slow, I still think this should be core functionality instead of a Perl script, but it seems cras disagrees with me.
- ../files/irssi/calc.pl is a very simple calculator. Well, the code is simple. It can do extremely complicated calculations, because it uses Perl's eval. The calculator is used via the /calc command script. Don't make a public command from this, as it is easy to crash your computer with it. It's safe for local use.
- ../files/irssi/dictcomplete.pl is a modified version of cras' script. Dictcomplete lets you tab-complete words from the /usr/share/dict/words file. Word lists are available for many languages. Instead of parsing the entire word list on each completion, this modified version reads the list into memory. It's a lot faster than the original, but it also uses more resources.
- ../files/irssi/figlet.pl creates ascii art text with the figlet program. You need to have figlet installed. This script is used with /figlet command, which understands IRC colour codes, and will re-assemble the generated art with the correct colours. You don't have to use colour, of course. In that case, this script still has a major advantage over /exec -out figlet -k: you won't have to think about special characters like ). Ever tried /exec -out figlet :)? :)
- ../files/irssi/follow.pl was made to show the new Perl scripting features of some CVS version of Irssi. It does nothing spectacular, but many people still like to use it. All it does is switch to active windows all the time. Quite annoying if you ask me, but it does look rather nerdish if you put it on a spare terminal, join some very active channels, and invite a less nerdy friend over. I suggest an all-green color scheme.
- ../files/irssi/foo.pl was my very first Irssi script. It "encrypts" text messages with ROT-n (that is: ROT-13 with a variable 13), and sends the n using IRC control codes so that other foo-enabled Irssis detect it and automatically decrypt the message. The command is not /foo, but /rot. Foo was only chosen because I thought rot would be a bad name for a script, and foo was available.
- ../files/irssi/guts.pl is a German Uppercase Tab Stuff thingy. If you know German, you know that they capitalize the first letters of not only sentences, but also all nouns. But, they tend to forget to do so. This is the only script I wrote on request, because it was so easy to do. Using it is easy too: type a word, hit Tab and it makes the first letter upper cased. This script now serves as an example script for the complete word signal.
- ../files/irssi/null.pl was a rather childish addition to Irssi's script archive, but I never expected the maintainer to add it. I use this script as a template for other scripts. The script does nothing but defining %IRSSI.
- ../files/irssi/scriptadmin.pl was the first automated script installer for Irssi. /script install foo is enough to install my foo-encryption script, /script search encrypt finds it. There's a script called scriptassist now, and I heard it's a lot better than my efforts.
- ../files/irssi/scriptinfo.pl reads a script's %IRSSI hash and displays it. If you use scriptadmin, it is a good idea to also have scriptinfo installed. You can of course install it *using* scriptadmin :)
- ../files/irssi/sysinfo.pl displays information about your system without useless network statistics, without colours, and without space eating parens and brackets. It hasn't been ported to other systems yet, so it works with Linux only. Just type /sysinfo to let others know about your elite 386.
- ../files/irssi/typofix.pl is a heavily modified version of cras' original typo fixing script (see the list of changes for more information). If someone types s/foo/bar/ in a channel, this actually substitutes foo for bar in the last line that person wrote. All typofix scripts are broken! Do not use them! They all use the same broken interface to Irssi's scrollbuffer, hence they all break your scroll buffer after a while.
Irssi and me now
I scripted everything I needed for myself and released them so others can use them too, if they want. The only Irssi scripting I do now is maintenance of the scripts mentioned above, and an IRC bot.