#include "LUGO.style"

<PAGE name="Emacs">

<H3>Emacs als Entwicklungsumgebung</H3>

Der Emacs ist wohl in jeder GNU/Linux-Distribution enthalten und meist
vorkonfiguriert. Neben dem eigentlichen Editor enthält das Paket
eine Reihe von Erweiterungen (in Emacs-LISP geschrieben), mit deren
Hilfe sich Emacs hervorragend als Entwicklungsumgebung für die C/C++
Programmierung eignet.<P>

Im folgenden sind die wohl wichtigsten Tastaturbefehle und Arbeitsweisen
zusammengefaßt, die man für diesen Verwendungszweck braucht.<P>

<EM>
M-x steht dabei für ALT-x bzw. für ESC-x, C-x für Control-x
</EM><P>

<H4>Definitionen und Vorbereitung</H4>

Ein <EM>Puffer</EM> ist ein Speicherbereich von Emacs, der Dateiinhalte, Ausgaben
etc. aufnimmt. Jeder Puffer hat einen Namen, der Name eines Dateipuffers ist
gleich dem Dateinamen. Es können zwei Puffer gleichzeitig angezeigt werden.
Besäße der Emacs eine GUI Oberfläche, würde man wohl von einem Fenster
 sprechen.<P>

Der <EM>Ringpuffer</EM> nimmt als Minipuffer beim Löschen von Blöcken
diese auf und kopiert den Inhalt auf Wunsch.
Der Start des Compilers unter Emacs setzt eine <EM>Makefile</EM> vorraus,
da der Compiler über make -k gestartet wird. Eine minimale Makefile für
die Datei demo.cpp ist<P>

<PRE>
demo:
(TAB)c++ -Wall -o a.out demo.cpp
</PRE><P>

wobei (TAB) für ein Tabulatorzeichen steht. Mit einem kleinen bash-Skript
lassen sich Mini-Makefiles auch automatisch erzeugen:<P>

Datei cppemacs (mit chmod ausführbar setzen)

<PRE>

#!/bin/sh
#Compileroptionen für normale Compilierung
cflags="-Wall"
#Compileroptionen für GNU Debugger
#cflags="-g -O0"
echo $1: > Makefile
echo -e "\tc++ $cflags -o a.out $1.cpp" >> Makefile
emacs $1.cpp

</PRE><P>
Aufruf mit cppemacs Sourcedatei OHNE die Extension .cpp

<P>

<HR>
<H4>Allgemeine Befehle</H4>
<PRE>
Emacs beenden                                   C-x C-c

Aktuellen Puffer speichern                      C-x C-s
Datei in neuen Puffer laden                     C-x C-f
Datei in aktuellen Puffer einfügen              C-x i

Zeilenanfang                                    C-a
Zeilenende                                      C-e
</PRE><P>

<HR>
<H2>Puffer</H2>
<PRE>
Puffer löschen                                  C-x k

Zum anderen angezeigten Puffer wechseln         C-x o
Aktueller Puffer auf volle Größe                C-x 1

Namen aller Puffer anzeigen                     C-x C-b
Zum Puffer name wechseln                        C-x b name
</PRE><P>

<HR>
<H4>Blockbefehle</H4>
<PRE>
Blockanfang                                     C-LEERTASTE
Blockende                                       Cursorposition

Block in Ringpuffer löschen                     C-w
Block in Ringpuffer kopieren                    M-w
Block aus Ringpuffer an Cursorpos. einfügen     C-y
</PRE><P>

<HR>
<H4>Der c-mode und c++-mode</H4>
<P>
Diese Modi führen während der Eingabe des Quellcodes bereits
einen einfachen Syntaxcheck durch. Klammerebenen werden überwacht
und die zu einer schließenden Klammer gehörende offene Klammer
angezeigt und Klammerverwechselungen bemerkt. Logische Blöcke
werden erkannt und Zeilen mit der TAB Taste automatisch eingerückt.
Dabei werden {} Blöcke, if, while, for, switch, case etc erkannt.<P>

<PRE>
Laden des c-  Modus                             M-x c-mode
Laden des c++-Modus                             M-x c++-mode
Zeile unter Cursor einrücken                    TAB-Taste
</PRE><P>

<H4>Compilieren unter Emacs</H4>


        Den als Vorgabe erscheinenden Befehl make -k kann man
        mit der Eingabetaste bestätigen (siehe oben). Die Aus-
        gaben des Compilers werden in einen eigenen Puffer ge-
        schrieben.

<PRE>
Compilerlauf starten                            M-x compile

In den Compile- Puffer wechseln                 C-x o
Cursor auf eine Fehlermeldung plazieren         Pfeiltasten
Sourcezeile zur Fehlermeldung anzeigen          C-c C-c
Nächste Fehlermeldung                           M-n
Vorhergehende Fehlermeldung                     M-p
Im Sourcepuffer: Nächster Fehler                C-x `
        (Shift-"Taste-neben-Backspace"!)
</PRE><P>

<H4>GNU Debugger unter Emacs</H4>
<P>
Damit der GNU-Debugger richtig arbeitet, muß das Programm mit den
Optionen <EM>-g -O0</EM> ("Oh null") übersetzt werden.<P>
Für den gdb wird ein eigener Puffer geöffnet, in dem die gdb- Kommandos
benutzt werden können.<P>

<PRE>
GNU Debugger und Programm a.out starten         M-x gdb a.out
Breakpoint an einer Stelle im Source setzen     C-x LEERTASTE
Breakpoint löschen                              C-x C-a C-d
</PRE>

</PAGE>

# Local variables:
# mode: html
# mode: auto-fill
# mode: iso-accents
# end:
