Too Cool for Internet Explorer

Archive for the '(Dirty) Hacks' Category

HACK #5: Email in einer Zeile!

Monday, 22. August 2005
11:03:30 (+0200)

Es gibt immer wieder Menschen, die sich der in RFC1855 abgeleger Netiquette Guidelines widersetzen! Noch nicht einmal, dass sie HTML-Emails verschicken, sondern meistens fängt es bei der nicht wohlgeformten Signatur an und hört bei der Zeilenlänge auf! Die Signatur kann man noch ganz einfach mit dem Cursor am Anfang der Signatur und einem geschickten dG nach /dev/null wandern lassen.

Doch wie kann man (den Envolope ausgeschlossen) die Email im VIM im nachhinein auf max. 65 Zeichen pro Zeile reformatieren?

[CUT rfc1855.txt]
- Limit line length to fewer than 65 characters and end a line with a carriage return.
[/CUT]

Hier kann man sich dem Tool “fmt” – einem Textformatierungsprogramm (-; – bedienen. Ein einfaches

}!fmt -65

im Befehlsmodus dem VIM am Anfang der hässlichen Textzeile(n) und die Email des “Feindes” sieht schon besser aus!

HACK #4: Ein paar Shorties…

Monday, 22. August 2005
09:59:06 (+0200)

Häufig muss man zwischen mehreren bestimmten Textstellen hin- und herspringen. Dafür bietet der VIM eine schöne Lösung:

Strg-O: Zur vorherigen Cursorposition zurückspringen (mehrfach)
TAB: Zur neueren Cursorposition springen (mehrfach)

Des Öfteren editiert man Texte, in denen bestimmte Worte mehrfach vorkommen und evtl. aufgrund der Länge oder Buchstabenkombination schwer fehlerfrei einzutippen sind (z.B. Variablen- oder Funktionsnamen in Programmen). Dafür bietet der VIM folgende sehr schöne Lösung:

Strg-P: Wort mit vorherigem passenden vervollständigen (mehrfach)
Strg-N: Wort mit nächstem passenden vervollständigen (mehrfach)

Ein eher exotisches Feature des VIM ist die Möglichkeit, eine Zahl unter dem Cursor zu in- bzw. dekrementieren (auch oktale/hexadezimale Zahlen):

Strg-A: Zahl unter Cursor inkrementieren (mehrfach)
Strg-X: Zahl unter Cursor dekrementieren (mehrfach)

Have much fun…

HACK #3: VIM als integriertes Adressbuch nutzen

Monday, 22. August 2005
09:25:58 (+0200)

Wie Sie vorgestern *hoffentlich* im HACK #2 gelernt haben, kann man mutt ganz einfach dazu bringen, also Editor den VIM zu nutzen. Heute wollen wir uns anschauen, wie man den improved VI beim Emails Schreiben zusätzlich als integriertes Adressbuch verwenden kann.

Legen Sie dazu eine exemplarische ASCII-Datei an, in der Sie “$NAME < $EMAIL>” von ein paar Bekannten von Ihnen eintragen und speichern Sie diese dann auf ~/.addressbook ab.

Nun öffnen Sie den VIM und stellen sich ganz banal vor, Sie würden jetzt eine Email an Georg Merz schreiben wollen. Nur was machen, wenn Sie jetzt den Envelope-Teil “To:” ausfüllen wollen? Ganz einfach! Sie bewegen (-: den Cursor nach das “To:” und tippen nach einem [ESC] folgendes ein:

:r!cat ~/.addressbook | grep Georg

Danach brauchen Sie den als neue Zeile eingefügten Datensatz nur noch eine Zeile höher rutschen zu lassen – dies kann man z. B. im Befehlsmodus mit den Tasten kJ machen – und schon haben Sie einen wohlgeformten Empfänger-Envelope-Eintrag!

That’s it. Have much fun…

HACK #2: siggen Integration in Mutt/VIM

Saturday, 20. August 2005
18:15:17 (+0200)

Heute sehen wir uns einmal die Integration von siggen in das Email-Programm mutt, in Kombination mit VIM genauer an. siggen ist ein Signatur-Projekt, das ich letztes Jahr ins Leben gerufen habe. Es ist ein hoch integrierbares Tool zur kryptischen Verschlüsselung von Email-Signaturen in ANSI C89 oder Brainf*ck, dass sich ohne viel Mühe in viele Mail-Programme integrieren lässt, wie beispielsweise das gerade erwähnte Programm Mutt oder Pine in Kombination mit emacs, VIM, oder was auch immer (-;

Zunächst einmal wollen wir uns einen Überblick über siggen verschaffen, dazu schauen wir uns nach der Installation die Online-Hilfe an, die wir durch einfaches Aufrufen von siggen erhalten:

# siggen

TIPP: Ein `man siggen` oder `siggen -h` liefert noch mehr Informationen. Zur Installation von siggen darf ich noch darauf hinweisen, dass u. U. das Makefile vor dem Kompilieren der Sourcen angepasst werden muss (CC, Verzeichnisse) – aber ein Configure-Skript wäre hier zu konfortabel gewesen *fg*.

Gut, das (bzgl. der Online-Hilfe) ist doch relativ einfach zu bedienen – vorausgesetzt, Sie haben sich diese gerade durchgelesen! Angenommen wir wollen an jede Email folgende Signatur anhängen (nur “verschlüsselt” mit ANSI C89):


Max Mustermann

So versuchen wir es  doch einfach mal mit einem

# siggen -m -n “Max Mustermann”

und erhalten folgenden Output:


int main(){int O=0,s[]={0x9a,0xc2,0xf0,0100,0x9a,0xea,0xe6,0xe8\
,0xca,0xe4,0xda,0xc2,0xdc,0×0};while(O<14){(s[O]==0)?printf(“%c\
\n”,(110< <2)>>2):printf(“%c”,s[O]>>1);++O;}return s[--O];}

Evtl. könnte man mit der Flag “-c [COMMENT]” noch einen Kommentar einfügen, um den Quellcode blockweise formatiert zu bekommen. An dieser Stelle sei auch darauf hingewiesen, dass siggen nicht nur C “sprechen” kann, sondern auch

Brainf*ck, was Sie durch ein voranstellen von “-t bf” erreichen können.

Nun wollen wir noch

mutt so einstellen, dass man seinem Emails mit VIM verfassen (/lesen) kann. Dazu öffnet man die Datei ~/.muttrc in seinem Home-Directory:

# vim ~/.muttrc

Hier sucht man sich die folgende Zeile aus und modifiziert sie dementsprechend:

set editor=’vim -c “set t_Co=8″ -c “syntax on” -c “/^$” -c “set tw=65″‘

Also mehr als 65 Zeichen pro Zeile sind nicht RFC1855-konform und Syntax-Highlighting ist natürlich ein Muss :-)

Um dem Rest der Welt zu sagen, mit was für einem Editor man seine Emails verfasst bzw. liest, kann man noch einen Header-Eintrag in jeder Email mitschicken. Dazu muss man in ~/.muttrc noch folgendes ergänzen:

my_hdr X-editor: VIM – Vi IMproved 6.3 (http://www.vim.org)

So, nun kann man in Mutt seine Emails mit seinem Lieblings-Editor VIM schreiben ^^

Jetzt sehen wir uns doch einmal an, wie man siggen in mutt integrieren kann. Dazu ergänzen wir einfach noch die ~/.muttrc Datei in unserem Home-Verzeichnis um diese 2 Zeilen:

set signature=”siggen -c bar -l 65 foo”|
my_hdr X-siggen: siggen 1.27b (http://siggen.sf.net)

Und schon ist es eingebunden! Will man siggen etwas dynamischer gestalten, kann natürlich auch auf Variablen-Substitution zurückgreifen, wie z. B.

set signature=’siggen -c “current date/time” “`date`”‘|

um immer die aktuelle Zeit und das akutelle Datum zu “verschlüsseln”. Ein bisschen Ausprobieren ist hier allerdings angesagt…

Also, viel Spaß beim weiteren Ausprobieren…

Have much fun!

HACK #1: Reguläre Ausdrücke in VIM

Thursday, 18. August 2005
11:10:33 (+0200)

Haben Sie sich schon mal überlegt, was man mit dem VIM so alles machen kann. Nehmen wir ein kleines Fallbeispiel, um eine Problematik aus der Praxis etwas plastischer darstellen zu können.

Nehmen Sie an, Sie hätten eine C++ Source-Code File mit über 10.000 Zeilen Code. Knapp die Hälfte davon, sollen solche JavaDOC-Kommmentare sein, wie der folgende:

/**
* Escape 5 characters – ‘&’, ‘”‘, ‘>’, ‘< ' and '\'' - to the standard
* XML quotation - "&", """, ">", "<" and "&apros;".
*
* @param char* buf: output variable, perhaps with escaped characters
* @param char* data: text, which should be checked and perhaps corrected
* @param int* len: normally value of strlen(buf), means the start point of appending
* @return 1: successfully done
* @return 0: means (buf==NULL), alloc mem before!!!
* @return -1: means (data==NULL)
*/

Nun ist dem Author der C++ Source-Code Datei aber ein Fehler unterlaufen. Es darf nämlich mehrere @param’s geben, aber nur einen @return, der aber mehrzeilig sein darf! Nun können Sie fast 5000 Zeilen mit der Hand durchgehen und den Fehler korrigieren, oder Sie verwenden REGEX – reguläre Ausdrücke.

Zunächste können Sie sich die Fehler einmal markieren lassen, wenn Sie folgendermaßen in VIM suchen. Voraussetzung ist, dass in der ersten Zeile immer “@return 1: …” steht:

/@return [^1].*:

Hiermit sagen Sie dem improved VI, dass er jeden regulären Ausdruck suchen (‘/’) soll, der mit “@return ” anfangen soll, der danach keine 1 ([^1]) haben soll und bis zum ‘:’ beliebige Zeichen haben darf. Das ist doch genau, der Fehler :-) Wenn Sie zuvor noch

:set hls

sagen, zeigt Ihnen der VIM der Fehler auch hervorgehoben.

Um nun das “@return ” am Anfang jeder 2. Return-Zeile wegzulöschen, muss dieser REGEX erst einmal in Substrings zerlegt werden, um später auf einen dieser zuzugreifen und so sagen zu können, dass einer dieser Substrings stehen bleiben soll – nämlich der Return-Wert zzgl. des ‘:’. Dies geschieht mit gequoteten (‘\’) runden Klammern. Nun fehlt noch das Schlüsselwort, um auf den 2. Substring – also den Return-Wert – zugreifen zu können. Dies geschieht mit einer gequoteten (‘\’) Zahl – hier die \2:

:%s/\(@return\) \([^1].*\)/\2/g

Mit dem :%s sagen Sie VIM, dass er etwas suchen und ersetzen soll – gefolgt von dem regulären Ausdruch, den er suchen soll, gefolgt von dem Ausdruck, durch den er ihn ersetzen soll. Das ‘g’ am Schluss steht dafür, dass er dies im gesamten Dokument tun soll.

:%s/[GESUCHER_AUSDRUCK]/[NEUER_AUSDRUCK]/g

Gutes REGEX-VIM-Tutorial: TU-Chemnitz

Windoze sucks!!!

Tuesday, 02. August 2005
17:53:38 (+0200)

Heute habe ich zum 2. Tag wieder versucht meine Arbeit beim Siemens zu erledigen – schließlich werde ich als Student nicht umsonst bezahlt. Statt dessen hatte ich wieder nur Probleme mit den Windoze-Kisten. Gestern bereits fing es an, nachdem der PC nach einem CAT-Update nicht mehr laufen wollte und sich in den Zustand einer Reboot-Loop versetzt hatte. Heute habe ich feststellen müssen, dass auf dem Abteilungsnotebook, dass ich nach dem gestrigen GAU bekommen hatte, Büro 2000 installiert ist. Leider funktioniert aber Ausguck 2000 mit den neuen M$ Exchange Einstellungen nicht mehr :-( sodass ich heute vergeblich versucht habe, Büro 2004 zu installieren. Nur dafür war *angeblich* zu wenig Speicher vorhanden (um es genau zu sagen 471 MB) – das ist jedenfalls die einzige Erklärung, warum das Setup ohne Meldung ständig beendet wurde. Ab morgen werde ich mir eine SUN-Kiste greifen, da kann man wenigstens anständig daran arbeiten!!! Nur dann komme ich leider nicht, an meine PC-Mails, die ich für meine Arbeit benötige :-(

Ich sage nur, dieses Windoze geht mir so ziehmlich gegen den Strich *grrr*