Emacs auf dem Mac

Wie jedem Leser dieses Blogs bekannt sein dürfte, habe ich mich in den letzten Monaten hingebungsvoll mit dem Emacs Editor beschäftigt. Ich empfand es immer etwas eigenartig, wie viel Konfiguration der Editor braucht, um halbwegs komfortabel auf dem Mac zu laufen, hatte mich aber damit abgefunden und dachte, dass so alte Software vermutlich einfach etwas länger braucht, um moderne Features, wie etwa den von mir hoch geschätzten Fullscreen-Mode zu nutzen. Bis ich dann am letzten Wochenende in den Genuss kam, Emacs auf einem Fedora-getriebenen Thinkpad nutzen zu müssen.

Jeder der mich kennt weiß, dass ich auf den Apfel eingeschworen bin. Mir gefallen viele Details an dem Gerät. Die Hardware stimmt von vorne bis hinten und alles ist genau an dem Ort, an den es gehört. Doch an diesem Wochenende dachte ich das erste Mal seit  über fünf Jahren darüber nach, den Mac zu verlassen.

Doch bevor ich mich hier in einem Rant verliere, möchte ich einfach einmal die Emacs-Situation auf dem Mac darlegen.

Emacs

Eine Terminalversion des Editors wird mit dem Betriebssystem ausgeliefert. Was zuerst einmal eine löbliche Ausnahme ist. Andere Betriebssysteme, wie etwa diverse Linuxdistributionen, oder auch Windows kommen ohne Emacs, in manchen Fällen sogar ohne Vim. In vielen Betriebssystemen wird man auf  Nano oder Pico verwiesen, Editoren deren Name bereits beschreibt, mit welcher Featurelast der Anwender zu rechnen hat.

Doch tippt man dann frohgemut “emacs -version” in seinen Terminal, erwartet den Nutzer schon das Grauen. Denn die vorinstallierte Version ist dem aktuellen Release mindestens zwei Major-Versionen hinterher. Wen das noch nicht stört, den wird spätestens die unmögliche Tastaturbelegung des vorinstallierten Emacs’ daran hindern, damit zu arbeiten. Es gibt keine Meta-Taste[1], Umlaute werden zu den interessantesten Sonderzeichen interpretiert und wechselt man den Space kann es schon mal passieren, dass Emacs gar keinen Inhalt mehr zeigt, wenn man zum Fullscreen-Terminal zurückkehrt.

Apropos Fullscreen …

Emacs.App

Als Alternative Variante bietet sich EmacsForMacOSX an. Diese in Cocoa geschriebene Applikation, häufig auch als Emacs.App referenziert, verspricht das volle Emacs-Erlebnis auf dem Mac, ohne krude Tastenbelegung und mit voller OS-Integration. Viel versprochen, kaum etwas gehalten. Die Tastenbelegung erscheint auf den ersten Blick tatsächlich intelligenter, so nutzt Emacs.App immerhin die Alt-Taste als Meta, doch läuft der Nutzer hier spätestens in ein Problem, wenn er versucht ein @-Symbol oder etwa {, [, ], }, oder ~ zu tippen. Denn die Tasten wurden einfach überschrieben und dienen nun als Meta-Aufrufe. Ist ja nicht so, als bräuchte man die ständig. Als Programmierer. In Ruby. Das lässt sich natürlich alles durch beherztes Selbstschreiben der init.el beheben. Was ich auch getan habe. Meine Konfiguration umfasst inzwischen für den Mac über 180 Zeilen Code. Tendenz steigend.

Zurück zum Fullscreen-Mode. Den hat Emacs.App natürlich auch nicht. Weder nativ, noch per Funktion. Es gibt die Möglichkeit, per ns-toggle-fullscreen den Emacs über den gesamten Bildschirm zu spannen. Diese Funktion ist aber weit von der nativen Lösung entfernt. So wird weder ein eigener Space kreiert, noch Menü und Dock ausgeblendet. Der Editor wird durch diese Funktion tatsächlich einfach nur gestreckt. Auf der aktuellen Arbeitsfläche und ist dadurch in 9 von 10 Fällen einfach nur im Weg.

Hinzu kommt, dass die Konfiguration von Emacs.App über Skripte deutlich schwieriger ist, als es sein sollte. Denn auf viele Eingaben reagiert Emacs.App gar nicht. So durfte ich bereits Stunden damit verbringen, dieser App AUCTeX beizubringen und weitere Stunden, dafür globale Variablen anzulegen.

Ich habe das alles stillschweigend[2] auf mich genommen, weil ich dachte, dass es einfach so ist und wenn ich einen solch mächtigen Editor wie Emacs nutzen möchte, ich eben ein paar Hürden überwinden muss. Das dachte ich genau bis letzten Freitag, als ich Emacs das erste mal auf einer aktuellen Fedorakiste startete.

Emacs, wie es sein sollte

Ich installierte Emacs aus den offiziellen Quellen, startete es und bekam das gleiche Fenster zu sehen, das Emacs.App bietet. Damit hören die Gemeinsamkeiten aber auch schon auf. Als Metataste dient auch hier Alt, allerdings werden durch Alt aufgerufene Sonderzeichen nicht blockiert. Umlaute, Sonderzeichen und sogar der Theme-Manager funktionieren ohne Probleme. Pakete lassen sich tatsächlich über die interne Paketverwaltung installieren. Die gesicherte Konfiguration wird ordentlich in ~/.emacs.d/init.el ausgeschrieben und der Fullscreen-Mode funktioniert exakt wie von Fedora vorgesehen.

Da ich Emacs inzwischen für meine gesamte tägliche Arbeit verwende, bis auf Mail (da bleibe ich vorerst bei dem ganz hervorragenden Sparrow) und Web (Chrome oder Safari), muss ich mir nun natürlich Gedanken darüber machen, ob sich die Arbeit auf dem Mac für mich weiterhin lohnt. Ich werde zuerst einmal den Versuch wagen, Fedora auf dem Air zu installieren und hier sicher darüber berichten. Die Hardware ist einfach unschlagbar. Nur die Software ist totaler Mist.

__

Fußnoten:
[1] Tatsächlich muss die ESC-Taste als Meta-Ersatz herhalten. Die kann aber nicht als Meta-Taste bezeichnet werden, da man sie wieder loslassen muss, um die nächste Taste zu aktivieren. Hält man ESC gedrückt, passiert nämlich gar nichts.
[2] Ok, das war gelogen. Ich schimpfte wie ein Rohrspatz.

Verschlungene Pfade

Auf der Tastatur eines Mac gibt es keine Meta-Taste. Also wird von den Terminal Emulationen ein Druck auf die ESC-Taste als Meta übersetzt. Das ist in Emacs aber umständlich und behindert die tägliche Arbeit ungemein. Dabei ist die Command-Taste (⌘) vollkommen ungenutzt.

Das Mapping von Meta auf ⌘ ist nicht sehr intuitiv. Ich habe meiner Emacs-Konfigurationsdatei die Zeilen

(setq mac-option-modifier 'none)
(setq mac-command-modifier 'meta)
(setq ns-function-modifier 'hyper)

hinzugefügt, was aber genau nichts bewirkt hat.

In iTerm2 gibt es dafür aber folgenden Work-Around:

  1. iTerm2 Menu > Preferences > Profiles > Keys: Right option key act as ‘+ESC’
  2. iTerm2 Menu > Preferences > Keys: Left command key: ‘Right Option’
Man muss sich dann daran gewöhnen, im Terminal für alle alternativen Symbole, wie geschweifte Klammern, oder das ‘@’-Symbol die linke Option-Taste zu benutzen, den Komfort ist es jedoch allemal wert.

Emacs Tutorial (Pt. 4)

Bisher wurde beschrieben, wie Emacs gestartet, ein Dokument in einen Buffer eingelesen und sich in diesem Buffer sinnvoll bewegt wird. In diesem Teil soll es darum gehen, Dinge zu finden.

Vom Suchen und Finden

Mit C-s wird eine Suche in Schreibrichtung initiiert. Gefunden wird also das nächste Vorkommen des gesuchten Wortes. Dabei funktioniert die Suche inkrementell, das heißt C-s kann beliebig oft wiederholt werden, um alle Vorkommen des gesuchten Wortes nacheinander zu besuchen. Kommt die Suche dabei ans Ende des Buffers, beginnt sie wieder am Anfang.

Ist bekannt, dass sich das Vorkommen des gesuchten Wortes vor der aktuellen Position des Pointers befindet, kann auf den gesamten Durchlauf des Buffers verzichtet werden, indem mit C-r eine Suche entgegen der Schreibrichtung begonnen wird. Auch diese Suche funktioniert inkrementell.

Ersatz

Es ist mühsam, jedes Vorkommen eines Wortes in einem längeren Text einzeln zu ersetzen. Wenn das Wort an jeder Stelle des Textes ersetzt werden soll, kann dazu M-x replace-string ENTER AltesWort ENTER NeuesWort verwendet werden. Dabei wird nach der exakten Entsprechung von AltesWort gesucht. Für das ersetzen von Wörtern, in denen Teilausdrücke vorkommen, oder die nach einem bestimmten Muster angelegt sind, werden reguläre Ausdrücke benutzt: M-x replace-regexp ENTER RegAusdruck ENTER NeuerAusdruck. Weil das Ersetzen von Wörtern oder Ausdrücken nur für alle Vorkommen nach der aktuellen Pointerposition geschieht, sollte zuerst mittel M-< an den Anfang des Textes gesprungen werden.

Lesezeichen

Eine sehr angenehme Art, Textstellen zu markieren, sind Lesezeichen (Bookmarks). C-x r m setzt ein Lesezeichen, dem dann noch ein Name gegeben werden muss. Mit C-x r b wird später jedes beliebige Lesezeichen angesprungen.

__

Dieser Artikel schließt vorerst das Tutorial zur Bedienung von Emacs. Die Befehlsreferenz ist inzwischen auch kräftig gewachsen und enthält noch etwas zusätzliche Information, wie etwa die Handhabung mehrere Fenster innerhalb eines Rahmens, oder den Vergleich von Dateien. Feedback erwünscht! 

Muttersprachler

[Update: Seit dem Update von Emacs auf die Version 24.1 reicht es, das Encoding der Terminal Emulation auf ISO Latin 9 umzustellen.]

Eines hat mich an Emacs bis zu diesem Moment wirklich genervt: Ich bekam partout keine Unterstützung für deutsche Umlaute eingestellt. Oder wenn, dann brachen andere Sonderzeichen auf meiner Tastatur. Jetzt funktioniert’s und ich bin glücklich. Und so geht es: [1]

An die Datei .zshrc [2] folgende Zeilen anhängen:

LANG=de_DE.ISO8859-1
MM_CHARSET=ISO-8859-1
export LANG MM_CHARSET

Außerdem sollte die Datei ~/.MacOSX/environment.plist [3] wie folgt aussehen:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyLi\
st-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>LANG</key>
    <string>de_DE</string>
  </dict>
</plist>

Zuletzt muss noch die Konfigurationsdatei [4] von Emacs um

(set-keyboard-coding-system 'iso-latin-1)

erweitert werden. Einmal den Terminal (und damit Emacs) neu starten. E voilá.

__

Fußnoten:
[1] Ich verwende Emacs 24.1 in der Terminalapplikation iTerm unter OSX Lion. Für genau diese Konfiguration funktioniert die hier vorgestellte Lösung.
[2] Die Konfigurationsdatei der benutzten Shell. Bei den meisten Nutzern dürfte das ~/.bashrc, ~/.bash_profile, ~/.profile, oder ~/.zshrc sein.
[3] Eventuell muss diese Datei erst angelegt werden.
[4] Das ist entweder ~/.emacs, ~/.emacs.el oder ~/.emacs.d/init.el.

Der Wolf und die Kreide

Es klopfte an der Tür und die Geißlein riefen: “Wer da?”“Ich bin’s, eure Mutter!”, sprach der Wolf mit rauer Stimme. Doch die Geißlein waren gewarnt worden: Der Wolf würde versuchen, sich zu verstellen um ins Haus zu gelangen. Sie erkannten seine falsche Stimme und wiesen ihn ab. Im letzten Artikel hatten Romeo und Juliet keine Chance zu erkennen, dass Lady Capulet ihre Briefe manipulierte. Doch die Mutter Geiß war schlauer. Sie setzte eine Senderverifikation ein, um den Geißlein die Chance zu geben, den Wolf zu erkennen. Noch zwei mal musste der Wolf klopfen und jedes Mal seine gesendeten Informationen verbessern, ehe die Geißlein auf sein Schauspiel herein fielen.

Die Mutter Geiß hätte es sich deutlich einfacher machen können, indem sie mit ihren Kindern ein Passwort vereinbart hätte. Das ist für symmetrische Kommunikation möglich und da die Geiß und ihre Kinder zuerst am selben Ort verweilten, wäre das problemlos möglich gewesen. Was ist aber, wenn keine symmetrische Kommunikation möglich ist, wenn sich Sender und Empfänger asymmetrisch verifizieren wollen?

Wenn die Parteien sich kennen, können sie auf gemeinsame Geheimnisse vertrauen. Die Geißlein hätten den Wolf nach den Namen aller Geschwister in der richtigen Reihenfolge befragen können. In dem Falle hätten ihm weder Kreide noch Mehl etwas genutzt.

Viel interessanter ist aber die asymmetrische Verifikation, wenn sich die Parteien nicht kennen. In dem Fall macht man sich die asymmetrische Verschlüsselung zu nutze. Wie wir bereits gelernt haben, bedeutet asymmetrische Verschlüsselung, dass zwei Parteien jeweils einen privaten und einen öffentlichen Schlüssel erzeugen und Letzteren austauschen. Dabei kann der öffentliche Schlüssel an beliebig viele Parteien weiter gegeben werden. Die Mutter Geiß berechnet also zwei Schlüssel, einen privaten Gprivate und einen öffentlichen Gpublic. Den öffentlichen Schlüssel sagt sie jedem Geißlein und schreibt ihn zur Erinnerung auch noch an die Wand. Den privaten Schlüssel behält die Geiß im Kopf und verrät ihn keiner Seele. Als sie dann das Haus verlässt, sagt sie ihren Kindern, sie wird ihnen bei ihrer Rückkehr zwei Zahlen nennen. Wenn sie den öffentlichen Schlüssel auf die zweite Zahl anwenden, sollte als Ergebnis die erste Zahl heraus kommen. Dann verbietet sie den Geißlein, irgendwem die Tür zu öffnen, außer er könne solche Zahlen nennen.

Der Wolf hat sich gut vorbereitet. Mit Kreide und Mehl bewaffnet erscheint er an der Tür. Seine Stimme klingt hell und klar, seine Pfote ist weiß wie Schnee. Die Geißlein sind begeistert und wollen schon die Tür öffnen, da fragt das Jüngste: “Nenn uns doch die Zahlen, liebe Mutter!”.

Der Wolf überlegt und späht durch das Fenster. Er sieht den öffentlichen Schlüssel, denkt sich eine Zahl aus und verschlüsselt sie mit dem Schlüssel an der Wand. Er nennt die beiden Zahlen. Als die Geißlein ihrerseits Gpublic darauf anwenden, ergibt sich alles, nur keine Gleichheit. Sie verrammeln die Tür und verwehren dem Wolf den Zutritt.

Später am Tag kommt die Mutter nach Haus. Auch sie wird von ihren Kindern mit der Frage nach den Zahlen empfangen, denkt sich spontan eine beliebige Zahl aus, berechnet mit Gprivate die zweite Zahl und nennt beide den Geißlein. Die wenden darauf Gpublic an und reißen die Tür auf, in dem Wissen, ihre Mutter davor zu finden.

__

Dieser Text ist etwas abstrakt. Ich hoffe aber doch, dass klar geworden ist, wie genau Senderverifikation funktionieren kann. Ich habe vor, in einem späteren Artikel noch einmal darauf einzugehen, wenn wir mehr über RSA und andere Algorithmen wissen, die zu Signaturen fähig sind. Nicht jeder asymmetrische Algorithmus ist in der Lage, den Sender zu verifizieren. So ist zum Beispiel das Merkle-Hellman-Kryptosystem nicht fähig, den Sender zu beglaubigen. Ich werde aber noch genauer darauf eingehen, welche Voraussetzungen es benötigt und warum man nicht einfach eine plausible Verifikation aus dem öffentlichen Schlüssel berechnen kann. Stay tuned …

Emacs Tutorial (Pt. 3)

In den ersten beiden Artikeln dieser Reihe wurden die Grundlagen gelegt. Es ist inzwischen bekannt, wie Emacs geöffnet und geschlossen wird, wie ein Buffer in eine Datei geschrieben wird und was genau es mit Buffern, Files, Windows, Frames und Pointern auf sich hat. Der vorliegende Artikel beschäftigt sich mit der Bewegung innerhalb eines Textdokuments und grundlegenden Operationen, wie Kopieren, Ausschneiden und Einfügen von Textabschnitten.

Zur Wiederholung sei erwähnt, dass C-x für das Drücken der CTRL-Taste und dem Buchstaben ‘x’ steht. M-x steht dann für die Meta-Taste (ESC oder ALT auf modernen Tastaturen) und den Buchstaben ‘x’.

Bewegung in die Sache bringen
Kleine Schritte

Mit den Pfeiltasten bewegt man den Pointer in Emacs um jeweils eine Position in die angegebene Richtung. Frühe Tastaturen hatten keine Pfeiltasten, weswegen es auch dafür Tastenkombinantionen gibt, die hier nur der Vollständigkeit halber aufgelistet sein sollen. C-f enspricht der Bewegung um ein Zeichen nach rechts (control forward) und C-b der Bewegung um ein Zeichen nach links (control backward). Mit C-p erreicht man die selbe Pointerposition eine Zeile über der aktuellen und mit C-n die Position in der Zeile darunter (Control previous / next).

Weiter ausschreiten

Die Bewegung um einzelne Zeichen ist in großen Dokumenten eine mühsame Angelegenheit. Deshalb gibt es in guten Editoren die Möglichkeit, ganze Textabschnitte zu überspringen. Der kleinste Textabschnitt ist ein einzelnes Wort, welches für Emacs eine Zeichenreihe zwischen zwei White Spaces ist. Mit M-f bewegt sich der Pointer um ein Wort in Leserichtung, mit M-b entsprechend ein Wort zurück. Das Ende der aktuellen Zeile erreicht man mit einem beherzten C-e, den Anfang mit C-a.

Siebenmeilen

Wenn das Dokument sehr groß ist, möchte man sich nicht Zeilenweise fortbewegen. Eine Seite ist in Emacs der aktuell sichtbare Bereich des Buffers. Um sich die nächste Seite anzeigen zu lassen, gibt man C-v. Mit M-v kommt man direkt zurück auf die Seite davor. Den gesamten Buffer überspringt man letztendlich mit M-> und kommt an dessen Anfang zurück mit M-<.

So einfach ist die Bewegung in einem Buffer.

Guttenberg und Co.
Text markieren

Um Text in Emacs zu markieren, setzt man seinen Pointer vor den ersten Buchstaben des zu markierenden Abschnitts und drück einmal C-Space (Space = Leertaste). Dann bewegt man den Pointer mithilfe der oben besprochenen Bewegungsfunktionen hinter das letzte Zeichen des zu markierenden Textes. Der Cursor zeigt nun auf das erste Zeichen nach dem markierten Abschnitt. Mit C-x C-x werden Beginn und Ende des markierten Bereichs vertauscht. Damit kann der Bereich dann in jede beliebige Richtung erweitert werden.

Ein markierter Bereich heißt in Emacs Region.

Ausschneiden

Ist bereits Text markiert, kann dieser mit C-w ausgeschnitten werden. Ausgeschnittener Text landet in einem Emacs-eigenen Zwischenspeicher, dem sogenannten Kill Ring. C-w könnte also heißen: control write to kill ring.

Einfügen

Das Gegenstück zum Ausschneiden ist C-y (control yank from kill ring), mit dem eine zuvor ausgeschnittene Region in den Text eingefügt wird. Dabei kann C-y beliebig oft wiederholt werden und fügt immer die zuletzt ausgeschnittene Region ein.

Kopieren

Möchte man eine Region nur kopieren, könnte man sie mittels C-w C-y ausschneiden und direkt wieder an Ort und Stelle einfügen. Da das aber unhandlich ist, gibt es dafür eine Abkürzung: M-w kopiert die Region in den Kill Ring, ohne sie auszuschneiden.

Ausblick

Nach diesem ausführlichen Lauf durch den Buffer wird es im nächsten Artikel vor allem um das Suchen und Finden von Textabschnitten gehen. Stay tuned.

Emacs Tutorial (Pt. 2)

Und wieder ein Artikel, in dem es sich voll und ganz um den Editor Emacs dreht. In diesem Teil des Tutorials soll es um die Benennung von Dingen gehen. Wer eine Software einsetzen möchte, kommt nicht darum herum, sich ein wenig mit der Philosophie dahinter auseinander zu setzen.

Der wichtigste philosophische Aspekt von Emacs erscheint mir, dass ein Nutzer niemals direkt auf einem Dokument arbeitet. An dieser Stelle sei mir ein kleiner Ausflug gestattet.

Ein gesichertes Dokument liegt auf irgendeinem persistenten Medium. Das kann eine Festplatte, ein USB-Stick, eine CD, DVD, Diskette oder ein Magnetband sein. Auf jeden Fall handelt es sich um einen Ort, an dem die Information nicht verloren geht, wenn ich den Rechner vom Strom trenne. Festspeicher haben diesen Vorteil. Aber auch einen entscheidenden Nachteil: Sie sind langsam. Ein Dokument direkt auf dem Festspeicher bearbeiten zu wollen, gleicht dem Waten abseits eines Weges durch einen Sumpf.

Dafür gibt es einen zweiten Speicher, den sogenannten Hauptspeicher. Wenn man ein Dokument bearbeiten möchte, lädt man es in diesen Speicher (weswegen er auch “Arbeitsspeicher” genannt wird). Der Hauptspeicher ist deutlich schneller als der Festspeicher, hat aber den Nachteil, dass sein Inhalt verloren geht, trennt man die Maschine vom Strom. Der Inhalt muss also vor dem Ausschalten des Rechners zurück auf den Festspeicher geschrieben werden.

Gewöhnliche Programme verbergen diesen Mechanismus vor dem Benutzer. Nicht jedoch Emacs.

Buffer

Wenn wir eine Datei in Emacs öffnen, dann liest der Editor diese Datei in einen Zwischenspeicher, den sogenannten Buffer. Wenn wir jetzt auf der Datei arbeiten, dann passiert mit der Datei auf der Festplatte erst einmal gar nichts. Erst wenn wir die Datei speichern (im Emacs-Jargon: “den Buffer ausschreiben”), wird die Datei auf der Festplatte verändert. Es wird also exakt der Prozess des “in den Arbeitsspeicher Ladens” und später “zurück auf die Festplatte Schreibens” abgebildet. Eigentlich funktionieren andere Programme genauso, nur dass bei Emacs eine geöffnete Datei “Buffer” heißt. Wenn ich also davon spreche, dass ich einen Buffer schließe, dann schließe ich eine geöffnete Datei in Emacs, nicht jedoch Emacs selbst.

Window

Buffer, Window and Frame in Emacs

Ist bei anderer Software von einem Fenster die Rede, meint das meist den gesamten sichtbaren Teil des Programms. Der Begriff der Fenster wurde dir 25 Jahre “Windows” deutlich geprägt. Bevor es jedoch graphische Software mit Fenstern gab, konnte man den Bildschirm eines Rechners, auf welchem Emacs lief, bereits in mehrere Teile unterteilen. So konnte man zwei Buffer nebeneinander betrachten. In Emacs heißt ein jeder Teil des Bildschirms, in welchem ein Buffer zu sehen ist “Fenster” (“Window”).

Frame

In perfekter Konsistenz zum Fenster ist der Rahmen das gesamte Emacs-Programm. Alle geöffneten Fenster mit allen Buffern darin innerhalb eines Emacs Programmfensters heißen zusammen “Rahmen” (“Frame”).

Pointer

In einem Terminal, bezeichnet der Cursor eine bestimmte Position. Dabei meint Cursor ein bestimmtes Zeichen, welches je nach Eingabemodus verändert wird. Beispielsweise könnte in einem Einfügemodus Text vor oder hinter dem Cursor hinzu kommen, oder in einem Löschmodus das Zeichen aus dem Text entfernt werden. Allgemein sorgt die Metapher des Cursors vor allem bei Neulingen am Terminal für einige Verwirrung. Emacs verfolgt auch hier einen anderen Ansatz, indem es den Pointer definiert, welcher der Raum vor dem Cursor ist. Alle Bearbeitung findet exakt am Pointer statt, nicht davor und nicht dahinter.