Als Fan von Programmen für die Konsole benutze ich natürlich irssi als IRC-Client. Für viele Funktionen, die im Standard-Umfang nicht vorhanden sind, gibt es Scripte, Tux hatte da ja auch selbst mal eins geschrieben und hier im Blog vorgestellt. Um den Chatverlauf einfacher verfolgen zu können, existiert beispielsweise das Skript nickcolor.pl, das die Nicknames der Nutzer einfärbt. Die Beschreibung in der Übersicht der Skripte ist kurz und knapp:
assign a different color for each nick
Das Skript bildet per Default einen simplen Hashwert über den Nickname, wählt anhand dessen eine Farbe aus und behält diese dann bei. Bei gleichen Nicks ist das dann immer die gleiche Farbe, was ja auch ganz sinnvoll ist.
Das Skript kann darüber hinaus noch mehr, um das rauszufinden, muss man aber einen Blick in den Quelltext werfen, entscheidend ist folgende Subroutine:
sub cmd_color { my ($data, $server, $witem) = @_; my ($op, $nick, $color) = split " ", $data; $op = lc $op; if (!$op) { Irssi::print ("No operation given"); } elsif ($op eq "save") { save_colors; } elsif ($op eq "set") { if (!$nick) { Irssi::print ("Nick not given"); } elsif (!$color) { Irssi::print ("Color not given"); } elsif ($color < 2 || $color > 14) { Irssi::print ("Color must be between 2 and 14 inclusive"); } else { $saved_colors{$nick} = $color; } } elsif ($op eq "clear") { if (!$nick) { Irssi::print ("Nick not given"); } else { delete ($saved_colors{$nick}); } } elsif ($op eq "list") { Irssi::print ("nSaved Colors:"); foreach my $nick (keys %saved_colors) { Irssi::print (chr (3) . "$saved_colors{$nick}$nick" . chr (3) . "1 ($saved_colors{$nick})"); } } elsif ($op eq "preview") { Irssi::print ("nAvailable colors:"); foreach my $i (2..14) { Irssi::print (chr (3) . "$i" . "Color #$i"); } } }
Hier wird für irssi ein Befehl /color
definiert, den man mit folgendem ersten Argumenten bzw. weiteren Befehlen aufrufen kann:
- save
- set
- clear
- list
- preview
Was kann man nun mit den einzelnen Befehlen anstellen? Ich gebe mal jeweils ein Beispiel mit der dazugehörigen Ausgabe, allerdings ohne Farben.
/color save
gibt nichts weiter aus, speichert aber die mit set festgelegten Farben in der Datei ~/.irssi/saved_colors
. Diese gespeicherten Farbzuordnungen werden beim Neustart von irssi bzw. Neuladen des Skripts wieder eingelesen.
/color set foo 7
gibt ebenfalls nichts aus, legt aber eine Zuordnung der Farbe 7 zum Nickname foo fest. 7 ist in dem Fall das, was in PuTTY gelb und auf der Konsole braun, in anderen Terminals eher orange aussieht. (Mehr zu diesem verwirrenden Thema in der englischen Wikipedia.)
/color clear foo
löscht die gesetzte Farbe für foo wieder, gibt aber ebenfalls keine Statusausgabe zurück. Interessant werden dann die letzten beiden Funktionen.
/color list
zeigt die aktuell gesetzten Zuordnungen in einer Liste an, bei mir sieht das derzeit so aus, die Namen sind in den Farben, wie sie auch im Chat auftauchen, die Zahlen dahinter sind erst bei dem Kopieren aus der Konsole zum Vorschein gekommen, geben aber die Farben wieder:
Mo|23:06:25 -!- Irssi: Saved Colors: Mo|23:06:25 -!- Irssi: An-Tet (9) Mo|23:06:25 -!- Irssi: Fabian (7) Mo|23:06:25 -!- Irssi: Ge0rG (12) Mo|23:06:25 -!- Irssi: IseeU (13) Mo|23:06:25 -!- Irssi: Mupfy (3) Mo|23:06:25 -!- Irssi: priority (3) Mo|23:06:25 -!- Irssi: schlotze (4) Mo|23:06:25 -!- Irssi: StarWarsFan (12) Mo|23:06:25 -!- Irssi: StefanG (3) Mo|23:06:25 -!- Irssi: SvenG (13) Mo|23:06:25 -!- Irssi: thndr (12) Mo|23:06:25 -!- Irssi: thunder (12) Mo|23:06:25 -!- Irssi: zozi (6) Mo|23:06:25 -!- Irssi: _MrTux_ (7) Mo|23:06:25 -!- Irssi: _Tux_ (7)
Last not least kann man sich mit /color preview
auch noch eine Liste der verfügbaren Farben ausgeben lassen:
Mo|23:19:39 -!- Irssi: Available colors: Mo|23:19:39 -!- Irssi: Color #2 Mo|23:19:39 -!- Irssi: Color #3 Mo|23:19:39 -!- Irssi: Color #4 Mo|23:19:39 -!- Irssi: Color #5 Mo|23:19:39 -!- Irssi: Color #6 Mo|23:19:39 -!- Irssi: Color #7 Mo|23:19:39 -!- Irssi: Color #8 Mo|23:19:39 -!- Irssi: Color #9 Mo|23:19:39 -!- Irssi: Color #10 Mo|23:19:39 -!- Irssi: Color #11 Mo|23:19:39 -!- Irssi: Color #12 Mo|23:19:39 -!- Irssi: Color #13 Mo|23:19:39 -!- Irssi: Color #14
Alles in allem eine sehr praktische Erweiterung für irssi, wenn man weiß, wie man sie bedienen muss. ;-)