Tag Archives: CLI

Sessionname in Statuszeile von GNU screen

Grml ist das Live-Linux meiner Wahl für allerlei Zwecke. Das coole ist die Config, die dort für Zsh, Vim und GNU screen mitgeliefert wird und da ich wenig Lust hab, mir sowas selbst zusammenzubasteln und ich ebenso gern ein vertrautes Nutzerinterface habe, nutze ich die Configs auch auf anderen Rechnern, indem ich dort einmal grml-config.sh ausführe und dann nur noch kleine Anpassungen machen muss.

Screen benutze ich ausgiebig und meistens mit mehreren sessions und ab und zu kommt man da mal durcheinander. Deswegen habe ich die .screenrc jetzt doch mal ein bisschen angepasst und statt

  caption always "%{+b rk}$USER@%{wk}%H | %{yk}(load: %l)  %-21=%{wk}%D %d.%m.%Y %0c"

steht da jetzt bei mir

  caption always "%{+b rk}$USER@%{wk}%H | %S | %{yk}(load: %l)  %-21=%{wk}%D %d.%m.%Y %0c"

und dank des zusätzlichen Parameters %S hab ich die aktuelle Session direkt im Blick. :-)

Es gibt (k)eine perfekte Schrift für die Konsole

Ursprünglich hatte ich vor einen Beitrag darüber zu schreiben, dass ich es nicht geschafft habe, für Windows eine Schriftart zu finden, die ich zum Programmieren und als Konsolenschrift nutzen kann, also primär in PuTTY. Nun hat sich das etwas anders gegeben, aber der Reihe nach. Die Anforderungen waren folgende:

  • Festbreitenschriftart, monospace quasi
  • saubere Darstellung in Schriftgröße 9 auf dem Notebook, sprich auf TFT-Bildschirmen
  • gute Unterscheidung von den kritischen Zeichen beim Programmieren: l vs. I und 1, 0 vs. O usw.
  • »Line drawing characters« für Pseudofensteranwendungen auf der Konsole (mc, ncurses-basierte…)
  • als Bonus eine breite Auswahl an Unicode-Zeichen

Courier New

Los geht’s erstmal mit Courier New. Die ist ziemlich ausgelutscht, ist aber schon da und hat neben den Strichzeichen auch eine recht breite Unicode-Unterstützung. Die Unterscheidung zwischen kleinem l und der 1 ist nicht so schön. Die zwischen dem großen O und der 0 könnte auch besser sein, ansonsten aber ganz brauchbar.

Schriftprobe Courier New

Lucida Console

Nächster Kandidat ist die Lucida Console, ebenfalls bei Windows dabei. Die sieht sehr klar aus. Die Unterscheidung zwischen O und 0 gelingt nicht so gut. Mir persönlich ist sie in der gewünschten Schriftgröße zu breit und die Zeilenabstände sind recht eng. Das geht noch besser.

Schriftprobe Lucida Console

Consolas

Bei Windows Vista dabei, aber auch separat von Microsoft zu bekommen ist die Consolas. Die sieht unter den richtigen Voraussetzung rein optisch am besten aus. Die Schrift wurde speziell für TFT-Bildschirme und das dort verwendete Sub-Pixel-Hinting und ClearType optimiert, sieht auf alten Monitoren daher leider grauselig aus. Zum Programmieren eignet sie sich super. Leider gibt es einen ganz großen Haken: sie hat nur einen sehr kleinen Zeichenvorrat und die Strichzeichen sind nicht dabei, was sie für die Konsole komplett disqualifiziert, so bleibt sie leider nur etwas zum reinen Programmieren unter Windows.

Schriftprobe Consolas

Andale Mono

Danach habe ich lange mit der Andale Mono gearbeitet, die früher bei Windows dabei war und auch noch im Netz zu finden ist. Diese Schrift lässt recht viel Raum und wirkt recht klein, was zunächst mal ungewohnt ist, aber dann im täglichen Gebrauch nicht weiter stört. Leider hat diese Schrift einen Pferdefuß, der mich dann doch wieder auf die Suche nach einer besseren Alternative geführt hat. Bei 9pt sind ; und : kaum zu unterscheiden. Für einen Chat im irssi ist das doof, weil man ;-) und :-) kaum noch unterscheiden kann.

Schriftprobe Andale Mono

DejaVu Sans Mono

Gestern dann telefonierte ich mit meinem Bruder, einem studierten Experten auf dem Gebiet der Typographie. Von ihm bekam ich den Tipp es mal mit der DejaVu Sans Mono zu versuchen. Diese ist mir unter Linux natürlich schon das eine oder andere Mal begegnet. Die Schrift selbst wird als offenes Projekt auf dejavu-fonts.org entwickelt und man kann sie als OpenType TTF auch unter Windows nutzen. Sie enthält eine sehr breite Auswahl an Unicode-Zeichen und natürlich auch die gewünschten line drawing characters. Die beim Programmieren relevanten Zeichen sind ausreichend gut zu unterscheiden. Im Terminal wirkt sie sehr hoch und lässt wenig Raum zwischen den Zeilen, wirkt aber ausgewogener als die Lucida Console und ist insgesamt gut lesbar. Das macht sie nicht ganz perfekt aber sie ist frei und daher ab sofort meine erste Wahl als Konsolenschrift.

Schriftprobe DejaVu Sans Mono

Farbige Nicknames in irssi

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. ;-)

CLI siegt

Spontane Erkenntnis: Ich nutze lieber den Kommandozeilenclient als die Shell-Extension im Kontextmenü – jedenfalls wenn es um Subversion geht. Gerade Routineaufgaben wir update und commit gehen damit einfach schneller.

Mögliche Erklärung: In der KDE kommt man aus dem Dateimanager per F4 in ein Konsolenfenster mit dem aktuellen Verzeichnis. Dort muss ich dann nur noch svn up eingeben, mit das Ergebnis anschauen und die Konsole mit Strg+D wieder schließen. Das geht wesentlich schneller, als mit der Maus im Kontextmenü die entsprechende Option zu suchen.

Die HCI-Community spricht hierbei von habit, also der Gewohnheit beziehungsweise Routine. Während man bei der Mausbedienung zuerst den Mauszeiger suchen muss, um ihn dann auf die richtige Position im Dateimanager und im Kontextmenü zu navigieren, ist die Position der Tasten fest, die Tastaturbedienung bedarf also wesentlich weniger Planung und fördert daher eher ein routiniertes Vorgehen. Letztendlich entlastet das das Gehirn und wird deshalb als energiesparende Maßnahme bevorzugt. Aber wer gern Shortcuts benutzt, kennt das ja … 8)

Nachtrag: Da war ich wohl etwas eilig und hab die Abkürzungen nicht erklärt…

CLI = Command Line Interface; eine Form von Kommandozeile, entweder auf der Konsole oder in ein Programm eingebettet.

HCI = Human-Computer-Interaction oder Human-Computer-Interface, also die Schnittstelle beziehungsweise Interaktion zwischen Mensch und Computer.

irssi-Hilight mit Jabber

Seit einigen Jahren läuft in meiner Screen-Session neben ICQ und anderen Tools auch ein irssi, um mich mit der Welt des IRC zu verbinden. In den meisten Channels bin ich einfach nur anwesend, gelegentlich spricht mich dann aber doch jemand an. Dank hilight im irssi wird man darüber ja eigentlich informiert. Nur leider schaue ich viel zu selten in das irssi-Fenster, um das dann letztendlich auch zu sehen. (Ja, screen informiert ueber Pings in anderen Fenstern, aber da guck ich doch erst Recht nicht hin …)

Da irssi eine schicke Perl-API hat, liegt es doch nahe, ein Perl-Script zu schreiben, mit dessen Hilfe ich mich anderweitig informieren lassen kann. Sehr nahe liegt da der Instant Messenger, der sowieso immer läuft, wenn ich am Rechner sitze – konkret Jabber.

Mit dem Perl-Modul Net::Jabber ist das alles kein Problem (abgesehen von den lückenhaften Dokumentationen, insbesondere in der irssi API) und so gibt es nun das Script irssi2jabber.pl, das als irssi-Script geladen werden kann und mir nun bei jedem Hilight oder jeder privaten Nachricht, die auftreten, während ich /away bin, eine Nachricht an meinen Jabber-Account schicken.

Das Script ist etwas kommentiert, die notwendigen Einstellungen stehen ganz am Anfang und müssen in die irssi-Config. Unter der GPLv3 darf es jeder weiterverwenden, natürlich nehme ich auch Patches an, die, wenn sie nützlich sind, eingepflegt werden.