Skip to content

Tip #17: Lieblingseditor nutzen

Gestern abend organisierte unsere lokale LUG ein zsh-Gespräch. Dort sollten verschiedene interessante Einstellungen zur zsh besprochen werden. Jörg hatte einen besonders netten Tip:

EDITOR=${$(whence -p vim emacs jed xjed nano mcedit ed)[1]}

Der Befehl whence sucht im Pfad nach den angegebenen Programmen und legt die gefundenen in einem Array ab. Das erste Element des Arrays wird dann ausgewählt und als Variable EDITOR gespeichert. Wenn auf dem System kein vim installiert ist, würde emacs (sofern vorhanden) als Editor festgelegt werden. Sollte keiner der aufgeführten Editoren vorhanden sein, wird der ed genutzt. Denn dieser sollte immer installiert sein.

Wer es noch ein wenig weiter treiben will, setzt einen Alias: alias vim=$EDITOR. So kann man immer vim eingeben und bekommt den passenden Editor. Jedoch kann das Nebenwirkungen haben und du solltest gut überlegen, ob das der richtige Weg ist.

Tip #16: Automatisch Zeit messen

Hin und wieder laufen Programme recht lange und im Nachhinein fällt mir ein, dass ich gern gewusst hätte, wie lange das Programm gelaufen ist. Jetzt könnte ich das Programm nochmal starten und entsprechende Befehle mitgeben. Viel einfacher ist jedoch die Variable REPORTTIME in der zsh. Dieser wird eine natürliche Zahl übergeben, welcher als Sekunden interpretiert wird. Wenn ein Programm länger läuft als der Wert, der in REPORTTIME gesetzt ist, dann gibt die Zsh automatisch, Statistiken zur Zeit aus:

jens@jurkki: ~> export REPORTTIME=2
jens@jurkki: ~> kommando --was --lange --dauert
12,23s user 28,76s system 98% cpu 23,812 total

Tip #15: Maximum in einem Array finden

Stellt euch vor, ihr habt ein Array gut gefüllt mit verschiedenen Integer-Werten und wollt das Maximum bestimmen. Wie geht das mit zsh-Mitteln? Ganz einfach:

jens@frankenstein:~/ > a=( 12 232 45 1 56 232 124 12 3442 345)
jens@frankenstein:~/ > print -l ${${(On)a}[1]}
3442

Was macht der Ausdruck? Ganz einfach! Er sortiert das Array numerisch und gibt dann den ersten Wert aus.

Tip #14: E-Mails mit mutt automatisch verschlüsseln

Ich sinniere schon seit einiger Zeit, wie ich ausgehende E-Mails weitgehend automatisch verschlüsseln kann. Vor längerer Zeit stiess ich dabei auf das Perlskript von Martin Grandrath. Auf der Seite ist gut beschrieben, wie das einzurichten ist. Das problem am Skript ist die relativ lange Startzeit. Es vergehen in der regel mehrere Sekunden bis mutt einsatzfähig ist.

Vor kurzem unterhielt ich mich mit Jörg Sommer darüber. Er hat eine Lösung mit zsh-Mitteln gebastelt. Diese ist zudem noch wesentlich schneller als die obige Variante:


#!/bin/zsh

hook_name=send-hook
blacklist_file=$HOME/Mail/crypt_blacklist
output_file=$HOME/Mail/crypt_hook_list

setopt extendedglob

gpg_dump=( ${(f)“$(gpg --list-keys --with-colons)”} )

# filter out lines without @
people=( ${(f)"$(for line in ${(M)gpg_dump:#(pub|uid):*@*}; do 
  print ${“${(@s.:.)line}”[10]}; done)"} )

typeset -a -U addresses
# possible bad lines:
# • email@example.com  -- only an address
# • name (<…>) 
addresses=( ${${people%>}##*<} )

[[ -r $blacklist_file ]] &&
  addresses=( ${addresses:#${(j:|:)~${${(f)"$(<$blacklist_file)"}:#\#*}}} )

print -l "$hook_name\t~A\tunset crypt_autoencrypt" \
  "$hook_name\t'~t \""${(j:|:)addresses//./\\\\.}"\"'\tset crypt_autoencrypt" \
  > $output_file

Was macht das Skript? Anfangs werden zunächst ein paar Variablen festgelegt und das erweiterte Globbing der zsh eingeschalten. In der Variable gpg_dump wird alsdann die Ausgabe von gpg --list-keys --with-colons gespeichert. Nun folgt ein wenig zsh-Magic. ;-) Die Anweisung hinter people entspricht in etwa der Shellzeile awk -F: ‘/^(pub|uid)/ { print $10 }’ gpg_dump, d.h. dort liegen dann alle E-Mail-Adressen, die auf den Schlüsseln angegeben waren. Schließlich wird für alle Adressen auf der Blackliste ein enstprechender Eintrag erzeugt und die Konfiguration in die Variable output_file geschrieben.Die Adressen in der Blackliste werden entfernt. Was übrig bleibt, schreibt das Skript in Datei, deren Name in output_file gespeichert ist. Dabei muss man beachten, dass mutt nicht unendlich viele Einträge akzeptiert. Es scheint eine Begrenzung irgendwo bei 200 Einträgen zu geben.

Das ist aus meiner Sicht eine gute Alternative zu Martins Skript. Solltet ihr Anmerkungen, Fragen, Kommentare haben, schreibt mir es unten rein oder schreibt direkt eine E-Mail an Jörg.

Update: Eine Zeile im Beitrag war ungenau formuliert. Nach einem Hinweis von Jörg habe ich das verbessert.

Das deutsche zsh-Buch ist da

Cover des zsh-Buches

Beim Schlendern durch eine Bücherei fiel mir gestern, das quasi druckfrische Buch “zsh -- Die magische Shell” auf. Seit einiger Zeit schrieben Julius Plenz und Sven Guckes daran und seit etwa einer Woche ist es im Handel erhältlich.

Im Buch geht es natürlich um die beste Shell der Welt, die zsh. Auf sechs Kapiteln in insgesamt 200 Seiten wird (hoffentlich) alles Wissenswerte gesagt. Hoffentlich deswegen, weil ich das Buch noch nicht komplett gelesen habe. Sobald ich durch bin, werde ich sicher eine Rezension dazu schreiben.

In der Einleitung finden sich kurze Hinweise zur Installation, Konfiguration und zum Prompt. Das zweite Kapitel beschäftigt sich dann mit dem effizienten Arbeiten. Es werden Aliase, Shell-Funktionen und Expansionen erklärt. Der Name des dritten Kapitels “Dateien, Ausgaben und Programmaufrufe” ist selbsterklärend. Kapitel 4 erklärt die interaktive Verwendung und Kapitel 5 das Skripting. Das letzte Kapitel des Buches beschreibt, wie Completions und Widgets selbst geschrieben werden können.

Ich bin sehr gespannt und freue mich, das Buch zu lesen. :-)

Bücher vom Clay Institut online

Das Clay Mathematics Institute ist bekannt für die Förderung der so genannten Milleniumsprobleme. Der Gewinner erhält eine Million US-Dollar ausgezahlt. Ein erster Aspirant für den Preis ist der Mathematiker Perelman, der 2002 die Poincaré-Vermutung bewiesen hat.

Seit kurzem stehen alle Bücher, die von dem Institut publiziert/finanziert worden sind, zum kostenlosen Download zur Verfügung. Falls ihr euch für analytische Zahlentheorie, Ricciflüsse oder ähnliches interessiert, besucht einfach die Online-Bibliothek.

cronjob