GNU Emacs


Inhalt dieser Seite

Konventionen
Schreiben und Speichern
Copy and Paste
Copy and Paste mit graphischer Oberfläche
Text Ausschneiden
Arbeiten mit mehreren Puffern
Die Backup Dateien abschalten
Emacs Kommandos
Syntax Highlighting
Tabs und Indentation
ReadOnly Buffers und das Abschalten des Schreibschutzes
Die BeanShell im JDEE aktivieren
Die Schriftgröße einstellen
JDEE für Emacs installieren

Konventionen

Dieser Text benützt die Darstellung des Buches Learning GNU Emacs für die Darstellung von Emacs Befehlen. Das große C steht für Control bzw. Steuerung. Wenn sie also aufgefordert werden C-x C-f auszuführen, so drücken sie Control halten sie Control und drücken sie dann x und f. Alternativ kann man auch Control halten und x tippen, Control erneut tippen und halten und dann f drücken. Was nicht funktioniert ist Control zu halten und x zu drücken, Control loszulassen und dann einfach f zu drücken. Dies ist ein anderer Befehl, der dann durch C-x f dargestellt wird.
Wenn im Text die M Taste gedrückt werden soll, so drückt man die Alt Taste. M steht für Meta und wird zumindest unter Ubuntu 5.04 als Alt Taste aufgefasst.

Schreiben und Speichern

Dieser Abschnitt erklärt wie man eine neue Datei anfängt, Text schreibt und diesen Text abspeichert. Nachdem Sie Emacs geöffnet haben ohne direkt eine Datei zu laden, befinden Sie sich im Puffer Scratch, der immer geöffnet wird. Sie möchten ihren Text aber nicht in den Scratch Puffer sondern in einen Puffer eingeben, der extra für ihre Datei angelegt wurde. Dazu führen Sie C-x C-f aus. Ddies ist der Befehl für find file. Der find file Befehl lädt eine Datei in einen Puffer. Sie können allerdings den find file Befehl nicht nur auf existierende Dateien anwedenden. Wenn Sie find file ausführen werden Sie aufgefordert den Pfad der Datei einzugeben. Sie können hier den Pfad zu einer Datei angeben die es noch nicht gibt, dann wird find file einen neuen Puffer öffnen und die Datei anlegen sobald Sie den Pufferinhalt abspeichern.

Copy and Paste

In Emacs wird das Textstück markiert. Dieser markierte Bereich wird "region" genannt. Man bewegt den Cursor an die Stelle an der die region beginnen soll und führt den Befehl C-Space aus. Jetzt bewegt man den Cursor an die Stelle an der die Region beendet werden soll. Beim bewegen des Cursors vergrößert sich die region enstprechend, obwohl keine visuelle Rückmeldung erfolgt.
Das Ende der region muss nicht durch einen Emacs Befehl markiert werden, das Ende der Region ist automatisch dort, wo der cursor gerade steht. Hat man das gesammte Textstück markiert, kann man es mit dem Befehl C-w in den kill ring verschieben. Dabei wird das Textstück gelöscht. Das bedeutet, das man es gleich wieder dorthin pasten muss, von wo man es gelöscht hat. Man kann jetzt durch C-y aus dem kill ring an die Position des Cursors pasten (yanken). Allerdings muss der Text nicht ausgeschnitten werden. Wenn man die Area nur kopieren möchte drückt man M-w.

Copy and Paste mit Grafischer Oberfläche

Wenn man XEmacs benutzt oder eine der GNUEmacs Versionen für Windows, so hat man ein Maus zu Hand, mit der man Bereiche des Textes markieren kann. Diese Markierung wird automatisch in der KillRing verschoben ohne vorher gelöscht zu werden. Das bedeutet, das man den markierten Bereich durch eine Bewegung des Cursors unmarkiert machen kann, er lässt sich aber trotzdem noch pasten, da er im KillRing ist.
Wenn man Bereiche über C-Space markiert, muss man sie erst in den KillRing befördern, man muss sie also leider ausschneiden und wieder pasten.

Text Ausschneiden

Zum ausschneiden einer markierten Region drückt man C-w. Die Region wird in den kill-ring verschoben, kann also an der Cursorposition mit C-y wieder eingesetzt werden. Eine Region kann nicht nur mit der Maus sondern auch mit der Tastatur markiert werden. Wenn man C-Leertaste drückt beginnt man eine Region ab der Cursorposition zu markieren. Man erweitert die Region durch bewegen des Cursors. Dabei erhällt man keine visuelles Feedback wie beim markieren mit der Maus. Der Text wird nicht farblich hervorgehoben. Die Region endet an der Stelle an der der Cursor gerade steht. Man kann die Region jetzt mit C-w ausschneiden oder mit Alt-w kopieren.

Arbeiten mit mehreren Puffern

Ein neuer Puffer öffnet sich automatisch durch den Befehl C-x C-f. Emacs verlangt jetzt die Eingabe des Pfades der zu öffnenden Datei. Man kann hier auch einen Dateinamen von einer Datei eingeben, die es noch nicht gibt. Emacs nimmt dann an, dass man eine neue Datei erstellen möchte und erzeugt ohne Fehlermeldung einen neuen Puffer für diese Datei. Beim ersten Abspeichern erzeugt Emacs die Datei dann schließlich.
Hat man mehrere Puffer in Emacs geöffnet kann man mit dem C-x b Befehl in einen anderen Puffer wechseln. Der Befehl erwartet als Eingabe den Namen des Puffers zu dem man wechseln möchte.

Die Backup Dateien abschalten

Emacs macht standarmäßig eine Sicherheitskopie von jeder Datei und hängt an den Namen der Datei ein Tilde Zeichen an um zu zeigen, das dies die Backup Version der gespeicherten veränderten Datei ist. Man kann Emacs so einstellen, das er keine Backupdateien erzeugt. Allerdings ist dies nur eine Anleitung für Emacs Versionen, die ein Menu und eine Graphische Oberfläche bieten. Man wählt das Menu Options > Customize Emacs > Toplevel Customization Group an. In dem neuen Puffer navigiert man in die Gruppe Files und dort in die Gruppe Backup. In dieser Gruppe sucht man die Option Make Backup Files und drückt dort auf den Button Toggle damit die Einstellung von Backup Files auf keine Backup Files anlegen umgestellt wird.

Syntax Highlighting

Aktivieren von SyntaxHighlighting
Emacs kann Elemente von Programmiersprachen erkennen und diese mit Farben hervorheben. Dies erleichtert das Programmieren und wird SyntaxHighlighting genannt. Standardmäßig ist SyntaxHighlighting nicht aktiviert und kann in der .emacs Konfigurationsdatei persistent aktiviert werden.
(global-font-lock-mode t)
Die Farben anpassen
Standardmäßig ist die Farbe für Strings rosa und damit kaum zu erkennen. Eine Umstellung der Farbe für Strings ist sinnvoll. Die Umstellung für Strings kann durch ein Anpassen der .emacs Datei erreicht werden:

Alternativ kann man in Emacs auch den Befehl 
M-x customize-face
eingeben. Darauf hin wird ein Menugesteuerter Buffer geöffnet, der einem auf sehr komfortable weise das einstellen der Farben und Schriftarten für Strings und andere Syntaktische Objekte erlaubt. Eine Änderung des Standardwertes wird vorgenommen, indem man in das Edit Feld einen neuen Farbnamen einträgt und den alten Namen dadurch ersetzt. Um die Änderungen zu speichern muss man am oberen Ende des Buffers auf den Button "Save for future sessions" klicken. Das Problem an diesem Menugesteuerten Buffer und das Auswählen von Farben ist, das man die Namen der Farben kennen muss, da emacs kein Dropdownmenu mit Farbwerten darstellt. Daher ist folgende Liste von Farben ganz interessant: DarkGreen, Purple, ForestGreen. Um alle Schriftfarben anzuzeigen, für die Emacs einen Namen kennt kann man den Befehl ? ausführen oder den Menupunkt
Edit -> Text Properties -> Display Colors
ausführen.

Tabs und Indentation

Allgemeines
Dieser Abschnitt beschreibt wie man die Emacs Reaktion auf Tab Tastendrucke einstellt und wie man mit der Emacs Fähigkeit umgeht, Quellcode automatisch zu formatieren (= Indentation).
Tabs
Die Variable indent-tabs-mode legt fest ob Emacs Spaces benutzt um Tabs darzustellen oder ob Emacs das Tabzeichen einfügt, wenn der Benutzer auf Tab drückt. Man kann das Verhalten in der .emacs Datei einstellen.
(setq-default indent-tabs-mode nil)
nil - verwende Spaces für Tabs
t - verwende Tabzeichen für Tabs

Die Tabstoplist legt fest an welcher Spaltenposition sich die Tabmarken befinden. Wenn man Tabs nicht durch Spaces darstellt, bewirkt ein druck auf
M-i
, das sich der Cursor zur nächsten Tabmarke bewegt. Die Tabstoplist legt also fest wo sich die Marken befinden.
(setq tab-stop-list '(2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40))
Wenn die tab-stop-list nicht genug Markierungen enthällt um die gesammte Emacsfensterbreite mit Markierungen zu versehen, dann bewirkt
M-i
das bewegen des Cursor um ein Spaces, sobald sich der Cursor auserhalb der vorgegebenen Markierungen befindet. Wenn z.B. die obere tab-stop-list verwendet wird und sich der Cursor auf Spalte 60 befindet, so wird er durch
M-i
nur um ein Space weiterbewegt, da er sich außerhalb der angegebenen Markierungen befindet.
mode hooks
Ein zentrales Merkmal von Emacs sind die Major Modes. Für verschiedene Arten von Dokument gibt es in Emacs verschiedene Arten von Major Modes. Jeder Major Mode erweitert Emacs um Funktionalität, die das Arbeiten mit dieser Art Dokument erleichtert. Es gibt Major Modes für verschiedene Programmiersprachen und die erweiternde Funktionalität der Major Modes für Programmiersprachen ist auch immer Indentation. Dies ist der Grund warum wir uns an dieser Stelle mit Major Modes auseinandersetzen wollen.
Jeder Buffer befindet sich zu jedem Zeitpunkt in genau einem Major Mode. Major Modes können betreten und verlassen werden. Immer wenn ein Buffer in einen Major Mode geschaltet wird, führt Emacs den zum Major Mode zugehörigen Mode Hook aus. Der Mode Hook ist eine Sammlung von Lisp Befehlen, die ausgeführt werden wenn ein Major Mode betreten wird. Die Mode Hooks sind also einer der Orte an denen man Einstellungen für den Major Mode vornehmen kann und an denen wichtige Einstellungen zu finden sind.
Genau genommen ist ein Mode Hook eine Variable, die eine Liste als Wert besitzt. In dieser Liste befinden sich Funktionen, die nacheinander aufgerufen werden, wenn der Mode Hook des Major Modes aufgerufen wird.
Um eigene Funktionen in einen Mode Hook einzufügen gibt es folgenden Aufruf:
(add-hook 'c++-mode-hook 'my-c++-indent-setup)
wobei my-c++-indent-setup die neue Funktion ist, die angehängt wird. Eigene Funktionen definiert man folgendermaßen:
(defun my-c++-indent-setup ()
  (setq c-basic-offset 3)
  (setq indent-tabs-mode nil))
Diese Funktion stellt also zwei Variablen ein. Wenn man jetzt also in den Major Mode für C++ wechselt, wird auch immer my-c++-indent-setup() aufgerufen und damit werden den beiden Variablen die gewünschten Werte zugewiesen.
Indentation des JDE einstellen
The current version of cc-mode (from which jde-mode derives) installs a standard set of indentation rules when you open a Java source file. The only way you can override the standard indentation rules is to include your settings in a jde-mode hook function. The jde-mode hook function is invoked as the last step in opening a Java source file and hence can override anything that cc-mode does, including establishing customization rules. For example, to change the indentation amount from the standard amount (four spaces) to two spaces, include the following code in your .emacs file:
(defun my-jde-mode-hook ()
  (c-add-style
    "my-java"
    '("java"
     (c-basic-offset . 2)))
  (c-set-style "my-java"))

(add-hook 'jde-mode-hook 'my-jde-mode-hook)
anderes Beispiel
(defun my-java-mode-hook()
  "Hook for running Java file..."
  (message " Loading my-java-hook...")
   ;;don't indent braces
  (c-set-offset 'substatement-open 0)
  (c-set-offset 'statement-case-open 0)
  (c-set-offset 'case-label '+))

(add-hook 'java-mode-hook     'my-java-mode-hook)

ReadOnly Buffers und das Abschalten des Schreibschutzes

Ein Schreibgeschützter Buffer hat in Emacs zwei Prozentzeichen in seiner Statusbar. Man kann einen beliebigen Buffer in schreibgeschützt machen indem man C-x C-q ausführt. Erneuten ausführen von C-x C-q nimmt den Schreibschutz wieder vom Buffer. Das C-x C-q Kommando funktioniert allerdings nicht, wenn die Datei die der Buffer anzeigt schreibgeschützt ist, dann lässt sich der Schreibschutz erst vom Buffer nehmen, wenn der User Schreibrechte für diese Datei erhalten hat. Emacs öffnet einen Buffer schreibgeschützt, wenn die Datei schreibgeschützt ist, die der Buffer darstellen soll. Um den Schreibschutz in einem solchen Fall abzustellen, muss man sich Schreibrechte für diese Datei organisieren und dann den Buffer vom Schreibschutz durch Ausführen von C-x C-q befreien.

Emacs Kommandos

C-gBefehl abbrechen
C-x C-ffind file = Datei öffnen
C-x C-ssave file = gerade geöffnete Datei speichern

Die BeanShell im JDEE aktivieren

Allgemeines
Die BeanShell ist ein Program, das Java Code Interpretiert. Man muss also nicht compilieren, sondern kann Java Quellcode in die Beanshell eintippen und das Ergebnis direkt interpretieren lassen. Damit lassen sich auch kleine Programmstücke testen ohne eine Klasse mit einer main Methode zu schreiben. Pat Niemeyer hat die BeanShell programmiert. Die BeanShell kann als Program unabhängig von anderen Programmen gestartet werden, das heisst man kann die BeanShell auch ohne Emacs benutzen, sie hat eine eigene Benutzeroberfläche. Allerdings kann die BeanShell auch innerhalb einer anderen Anwendung betrieben werden. Dies ist der Fall wenn man die BeanShell per Emacs bedient. Das JDEE benutzt die Beanshell um Kommandovervollständigung und den BeanShell ClassBrowser anzuzeigen. Daher sollte man die BeanShell in Emacs integrieren, wenn man diese Features des JDEE nutzen möchte.
Funktioniert meine BeanShell ?
Um das herauszufinden wechselt man in den Buffer namens JDEE bsh (bsh steht für BeanShell) Das JDEE erzeugt solch einen Buffer bei jedem start. Allerdings bedeutet es nicht, das die BeanShell auch funktioniert nur weil dieser Buffer vorhanden ist. Wenn man den Cursor in diesem Buffer setzt und Enter drückt und dann die Message "Current Buffer has no process" erscheint, dann weis man, das die BeanShell momentan nicht funktioniert.

Alternativ dazu kann man auch versuchen einen Buffer zu starten, der eine BeanShell enthällt
M-x bsh-run
Wenn es jetzt Fehlermeldungen mit dem Fehlertext "Cannot find the BeanShell jar file at /home/...../bsh.jar" gibt, dann stimmt die Installation der BeanShell nicht.
Lösungsansätze
JDE usually looks for the bsh.jar file based on what the function jde-find-jde-data-directory returns. If jde-find-jde-data-directory is not returning the base to from which "java/lib/bsh.jar" can be found that might be the root of your problem.

The site-wide emacs stuff is in /etc/emacs/site-start.d. You can also look in /usr/share/emacs/site-lisp/debian-startup.el for more information.

Die Schriftgröße einstellen

Die Schriftgröße kann man einstellen indem man die Shifttaste gedrückt hällt und dann mit der linken Maustaste ins Emacs Fenster klickt. Im PopUp Menu, das nun erscheint, kann man die Schriftgröße einstellen.

JDEE für Emacs installieren

Das emacs site directory
Das Emacs site directory enthällt Dinge, die ??? Es besitzt den Pfad /usr/share/emacs/site-lisp
Das CEDET Packet
Das CEDET Packet kann man über den Synaptic Package Manager herunterladen. Der Synaptic Package Manager installiert die CEDET Dateien in den Ordner /usr/share/emacs/site-lisp/cedet-common/ In diesem Ordner liegt unter anderem die Datei cedet.el, die beim Start von Emacs geladen werden muss, damit CEDET dann in Emacs zur Verfügung steht. Man veranlasst das laden der cedet.el indem man die .emacs Datei anpasst. Folgende Zeilen müssen in die .emacs Datei eingefügt werden:
;; Turn on CEDET features
(setq semantic-load-turn-useful-things-on t)
;; Load CEDET
(load-file "/usr/share/emacs/site-lisp/cedet-common/cedet.el")
Jetzt lädt emacs automatisch CEDET beim starten.
Installing the ELisp Library
Von der Hompage http://jdee.sunsite.dk/ kann man eine gezippte Datei herunterladen, die die ELisp Library enthällt. extrahieren Sie den Inhalt nach /usr/share/emacs/site-lisp und dort in den Unterordner elib-1.0. Sie müssen zusätzlich jetzt noch die ELisp Library compilieren. Führen Sie dazu den Befehl make install im elib-1.0 Ordner aus. Make ruft dabei makeinfo auf. Makeinfo ist Teil des texinfo Packetes, das Sie per Synaptic Package Manager installieren können. Damit die installation ablaufen kann, müssen Sie make install als super user aufrufen, daher sollten sie sudo make install in elib-1.0 aufrufen. No `START-INFO-DIR-ENTRY' and no `This file documents'. Fehler tritt auf.
Problem mit dem Program install-info. install-info wird in der makefile aufgerufen und macht irgendwas. Kurz bevor der Fehler auftritt und der make process abricht ist folgendes zu lesen:
install-info --infodir=/usr/local/info elib.info;
Ich denke daher, das der Fehler irgendwo in der Datei /usr/local/info elib.info liegt.
Das Linux Info System
Linux unterhällt ein zentrales Info System das man mit dem info Befehl lesen kann. Das Info System besteht unter Ubuntu aus dem Order /usr/info, das Textdateien enthällt in denen informationen über installierte Programme liegen. Wenn man neue Inhalte zum Info System hinzufügen möchte kann man das Program install-info verwenden. Das Problem liegt beim Info System von Linux. Innerhalb der Makefile von elib wird das Program install-info aufgerufen, das die Bedienungsanleitung zu elib in das Linux Info System eingliedern soll. Dies geht schief, da install-info ein Symbol nicht findet, das es zum ablaufen benötigt.
/usr/info
Im info Verzeichnis befindet sich die Datei dir, die zentral ist für das Info System. Hier werden die Info Einträge mit den Textdateien verknüpft, die die Texte zu den Infopunkten speichern.
Installing the JDEE
Von der Hompage http://jdee.sunsite.dk/ kann man eine gezippte Datei herunterladen, die JDEE enthällt. Man kann den Inhalt dieser Datei in ein beliebiges Verzeichnis entpacken (gzip -cd jde-latest.tar.gz | tar xvf -) Das Verzeichnis selbst spielt keine Rolle. Man muss jetzt den Inhalt der gezippten Datei noch compilieren. Dazu muss man die makefile im Ordner jde-2.3.5/lisp anpassen. Ein wichtiger Schritt ist es ein Java SDK zu registrieren und auszuwählen, dazu gehört, das man die Variable jde-jdk-registry und die Variable jde-jdk anpasst genau wie es in der Emacs JDE User's Guide erklärt ist. Dieser User's Guide wird zusammen mit dem JDEE installiert und ist durch den Emacs Menupunkt JDE > HELP > JDE User's Guide zu erreichen. Diesen Menupunkt gibt es allerdings nur wenn man im JDE MajorMode ist. Im JDE User's Guide sucht man den Abschnitt "Registering and Selecting a JDK". Dort wird es richtig erklärt.


Zur Hauptseite

Letzte Änderung: 16.07.2005