Emacs Tutorial: XEmacs Minibuffer (13.02.2002)

Auf meiner alten Homepage hatte ich im Februar 2002 begonnen, ein Tutorial zum XEmacs zu schreiben. Ich nannte das Ding "XEmacs Minibuffer" und habe damals einiges an Zeit darin investiert. Irgendwie erinnert mich der Text an das Tutorial. Warum ich damals XEmacs genutzt hatte, weiß ich nicht mehr. Entweder war es einfacher an Builds für Windows zu kommen oder die ganze Integration in das Betriebssystem war besser. Oder ich fand ihn einfach cooler.

Irgendwann habe ich zuletzt die alten Sicherungen der Seite gefunden und etwas melancholisch auf das alles geschaut. Am Ende hatte ich die Seite tatsächlich wie eine Linux Shell gestyled, diese Version finde ich aber nur noch im Web-Archiv. Ich habe auch lange auf den XEmacs Text geschaut und mich gefragt, was ich damit machen soll.

Ich habe mich für ein Weiterleben des Textes hier im Blog entschieden. Und möchte mit einem umgewandelten lateinischen Zitat enden: Wem nützt "Cui bono"?


Introduction

Für die grundlegende Arbeit kann vielleicht die folgende
Anleitung hilfreich sein. Gerade am Anfang mag es noch ein wenig
Probleme bei der Bedienung dieses sehr mächtigen Programmes
geben.

Als Übersicht (gerade für mich) habe ich eine Liste von Tastaturbefehle erstellt, die nach dem
jeweiligen Nutzen geordnet sind.

Weiterhin gibt es eine (wohl in Zukunft weiter wachsende) Liste von Tools im XEmacs, damit die
Unübersichtlichkeit der Features ein wenig gelichtet wird.

Einige kleine Informationen zum Newsreader
Gnus
sind ebenfalls vorhanden.

Übersicht

Ein schneller Überblick über den Aufbau des Editors

Wenn man XEmacs startet, erscheint das Fenster direkt mit einem
Text, der sozusagen den Startbildschirm sonstiger Programme
darstellt. Hier werden die Versionsnummer, die Copyrights, und
die ersten wichtigsten Tastenkombinationen aufgeführt
(siehe Screenshot "XEmacs"). Ein kleiner Klick
entfernt diesen Text automatisch, und der scratch
erscheint, ein Text, in dem man Sachen notieren kann; es wird
nicht automatisch abgespeichert (siehe Screenshot
"Emacs")
.

Screenshot: XEmacs Standard-Startbildschirm (halbe Größe) Screenshot: Emacs mit *scratch* (halbe Größe)

Wie in den meisten Programmen hat man im XEmacs nun eine
Menüleiste, und eine Buttonleiste zur
Verfügung. Darüber kann man eine Datei öffnen,
oder sich an die Tastenkombination zum Dateiöffnen halten:
STRG-X STRG-F.

In dem Fenster, indem sich momentan noch der scratch
befindet, wird der zu öffnende Text dann erscheinen. Unter
diesem Fenster befindet sich eine hervorgehobene Leiste, die die
Attribute der gerade geöffneten Datei anzeigt
(z.B. verändert, Textart, Einfügemodus oder
Überschreibmodus, Cursorposition im Dokument (Zeilen- und
Spaltenangabe und Prozentzahl)).

Darunter befindet sich noch eine Zeile, der
Minibuffer. Hier werden einzelne Interaktionen zwischen
Programm und Benutzen ausgeführt. So werden hier z.B. die
Tastenkombinationen, die man gerade anwendet bis zur
endgültigen Vollständigkeit (und manche
Tastenkombinationen können echt lang sein…) aufgelistet,
und hier wird auch beim Speichern per Tastenkombination auch
abgefragt, ob das Dokument überschrieben werden
soll. Eigentlich funktioniert der Minibuffer grundlegend
genauso, wie ein typisches kleines Dialogfeld (z.B. bei der
Abfrage zum Speichern).

Da drunter folgt eigentlich nur noch der Rahmen vom
XEmacs-Fenster.

Exkurs: Was ist C-f
und was ist M-x?

C-f ist die Tastenkombination , um sich im Text ein
Zeichen vorwärts zu bewegen (wie die
Cursor-Rechts-Taste). Es ist auch der letzte Teil der
Kombination zum Öffnen von Dateien (C-x
C-f
). C ist auf Standard-PC-Tastaturen die
STRG-Taste (entkürzelt heißt das Steuerung, englisch
Control, manche nennen das Ding auch Stragnato). In diesem
Beispiel drückt man also STRG-C STRG-F und schon
erscheint im Minibuffer der Dialog, welche Datei man zu
öffnen gedenkt.

Die M-Taste ist demgegenüber die ESC-Taste (in den
meisten Fällen liegt sie aber auch auf der ALT-Taste
(Düsseldorfer Tastatur =;-)) und ist dort
wesentlich schneller zu erreichen). M-x bedeutet also ESC-x
(ALT-x)
und im Minibuffer muss man die Funktion eingeben,
die man durchführen will.

Da es nicht auf jeder Tastatur eine STRG oder ALT-Taste gibt,
andere Computertypen somit andere Steuerungstasten benutzen,
wird in XEmacs und im Emacs immer C und M geschrieben (für
Control und Meta).

Aufbau der C- und M-Tastaturbefehle

Jede Tastenkombination führt einen Befehl aus, den man
auch im Minibuffer (mit M-x) mit der richtigen, langen
Anweisung ausführen könnte. Z.B. die Kombination
C-p kann im Minibuffer auch über den Befehl
previous-line ausgeführt werden. Das wäre
natürlich viel zu aufwendig, nur um den Cursor eine Zeile
nach oben zu bewegen…

Wann ein Befehl über die C- oder M-Taste angesprochen wird
und wann zwei weitere Tasten dazu gedrückt werden
müssen ist nach einem bestimmten Schema geordnet
(folgend aufgelistet am Beispiel verschiedener
Kombinationstasten n in kursiver Schrift):

  • C-n: Die meistbenutzten Kommandos folgen der
    Control-Taste und einem weiteren Buchstaben n. So
    z.B. die Bewegung im Text (C-n, C-p usw.)
    oder auch das Beenden des Minibuffers (C-g).
  • M-n: Weniger benutzte Kommandos, v.a. System-
    und Befehlaufrufe folgen der Meta-Taste und einem Buchstaben
    n (M-x), aber auch Kommandos, um sich im Text
    zu bewegen, die sich in die engegengesetzte oder erweiterte
    Richtung wie die Control-Kommandos bewegen (so
    z.B. C-a und C-e für den Anfang und das
    Ende der Zeile und M-a und M-e für den
    Anfang und das Ende eines Abschnittes. Ein anderes Beispiel
    wäre die Bewegung seitenweise).
  • C-x-n: Einfache Editier- oder System-Kommandos
    laufen über die Control-x-Tastenkombination und einer
    weiteren Tasten. Dabei (z.B. C-x-C-c um das Programm
    zu beenden).
  • C-c-n: Mit der
    Contol-c-weitere_Taste(n)-Kombination werden meistens
    Modus-spezifische Befehle ausgeführt. Wo ich gerade
    diesen Text schreibe, zeigt mir der schnelle Tastaturbefehl
    C-c-C-c im Minibuffer an, in welchen Tags ich mich
    gerade befinde (#PCDATA in li in ul in body in
    html
    ). Diese Kombination gibt es in diesem Kontext
    natürlich nur im HTML-Modus.
  • M-x: Mit der Kombination Meta-x lassen sich wie schon
    oben erwähnt alle Tastenkombinationen auch als kompletter
    Befehl ausfüren.

Die Modeline

Jedes Dokument, das in XEmacs geöffnet wird, hat eine
eigene Modeline. In einem XEmacs-Fenster
können mehrere Dokumente gleichzeitig geöffnet sein
und in unterschiedlicher Weise horizontal und vertikal
angeordnet sein. Jedes dieser geöffneten Fenster
besitzt aber eine eigene Modeline.

Die momentan wichtigsten Elemente der Modeline sind von links
aus gesehen:

  • Der Status des Dokuments:
    • **
      Die zwei Sterne bedeuten, daß das momentan
      geöffnete Dokument geändert worden ist.
    • --
      Zwei Minuszeichen zeigen, daß das Dokument seit
      dem letzten Speichern noch nicht geändert worden
      ist.
    • %%
      Zwei Prozentzeichen bedeuten, daß das Dokument
      schreibgeschützt ist und nicht geändert werden
      kann.
  • Der Name des Editors.
  • Der Name des Dokuments.
  • Der Major-Modus, also der Hauptmodus des Dokuments
    (hier: HTML [html]). Es könnte z.B. auch der
    C-Modus geladen sein, zum Programmieren von C oder C++
    Programmen.
  • Der Minor-Modus. Hier gibt es verschiedene Varianten,
    in diesem Beispiel ist der FontFill (Font) gleich dem
    Syntaxhighligting und der AutoFill-Modus (Fill), der
    harte Zeilenumbruch nach einer bestimmten Anzahl von Zeichen
    eingeschaltet.
  • Die letzten drei, momentan sichtbaren Angaben beziehen sich
    auf die Position des Cursors im Dokument:

    • Der Cursor steht in Zeile 198 (L198) und
    • in der Spalte 40 (C40) und
    • es sind 38% des Dokuments über der aktuellen
      Position. Wenn man sich am Beginn des Textes befindet,
      steht an dieser Stelle Top, am Ende des Textes
      Bot und wenn der gesamte Text im Fenster angezeigt
      wird All.

Der Minibuffer

Der Minibuffer ermöglicht, wie schon erwähnt, die
Kommunikation zwischen Programm und Benutzer. Mit den
verschiednen Tastenkombinationen verändert sich der Text im
Minibuffer: Der eingegebene Befehlsteil (z.B. C-x) wird
angezeigt.

Mit M-x erwartet der Minibuffer die Eingabe des
auszuführenden Befehls. Das M-x steht schonmal
da. Der Minibuffer ist aktiviert und kann durch C-g
wieder deaktiviert werden. Ein Quit zeigt dies dann
an. Andererseits kann man nach dem M-x auch den Befehl
eingeben. Der Minibuffer reagiert auf die Eingabe des Befehl und
führt in dann nach einem Return aus.

Falls man den Befehlsnamen nicht genau weiß, kann man per
TAB, der Tabulatortaste alle passenden Befehle anzeigen
lassen. Man sucht beispielsweise einen Befehl, der mit
"xemacs" anfängt:

  • Man gibt die Tastenkombination für Befehle ein:
    M-x
    M-x
  • Man gibt den Anfang des Befehls ein: xemacs und
    weiß nicht mehr den Rest des gesuchten Befehls.
    M-x xemacs
  • Man drückt die Tabluatortaste TAB. Es gibt nur
    Befehle, die mit "xemacs-" (Also dem Wort und
    einem Bindestrich)
    beginnen. Warum? Würde es einen
    Befehl geben, der nur "xemacs" heißt,
    würde XEmacs dies anzeigen. Ebenso bei einem Befehl, der
    aus dem Wortteil "xemacs" und etwas dahinter
    bestehen würde (z.B. der nicht vorhandene Befehl:
    xemacsbla)


    Es gibt aber einige Befehle, die mit "xemacs-"
    anfangen, also mit dem Bindestrich. Nach dem ersten TAB zeigt
    XEmacs dies also im Minibuffer an:

    M-x xemacs-
  • Beim zweiten Druck auf TAB erscheint ein neuer Frame,
    der die möglichen passenden Befehle zu
    "xemacs-" anzeigt:

    xemacs-local-faq   xemacs-www-faq
    xemacs-splash-buffer   xemacs-www-page
  • Nun gibt man den Rest des Befehles ein, z.B. mal die Lokale
    FAQ. Also braucht man nur noch "local-faq" an den
    noch aktiven Befehlsteil im Minibuffer schreiben und der
    Befehl kann mit RETURN an das Programm abgeschickt
    werden:
    xemacs-local-faq

Per Mausklick in dem Frame, der die möglichen Befehle
anzeigt, hätte man den Befehl in den meisten
XEmacs-Versionen auch aktivieren können.

Praktischerweise kann man die Eingabe dieser Befehle wiederum
mit der Tabulatortaste verkürzen. In diesem Beispiel
hätte "xemacs-l" und die TAB schon gereicht, um
im Minibuffer den kompletten Befehl anzeigen zu lassen, da es
keinen anderen Befehl gibt, der auch so beginnt.

Diese vielleicht etwas komplizierte Darstellung ist eigentlich
recht einfach zu händeln. Sie soll ein wenig die
Möglichkeiten des Minibuffers zeigen. Es geht nämlich
noch weiter. Der Minibuffer merkt sich die bisher eingegebenen
Befehle. Will man ein zweites Mal die obige XEmacs-FAQ anzeigen
lassen, braucht man nur M-x einzugeben und mit
Cursor-hoch sich den Befehl zu suchen.

Dieses Feature nennt sich "Command-History". Es
gibt auch einen extra Modus dafür. Gibt man M-x
command-history-mode
ein, öffnet sich ein neuer
Frame, der die bisher eingegebenen Befehle im XEmacs-Code
anzeigt. In unserem Beispiel findet man da den Eintrag:
(xemacs-local-faq).

Mit C-x Esc Esc wird der zuletzt eingegebene Befehl
sofort im Minibuffer angezeigt. Sehr praktisch, beispielsweise
bei dem Ersetzten mit Nachfrage, hier in
diesem Tutorial. Um einen Befehl vorher aufzurufen gibt man
M-p ein.

Grundlegende Optionen

Je nach Installation kann es nützlich sein, folgende
Einstellungen für ein komfortableres Editieren zu benutzen:

  • Unter dem Menüpunkt Options - Customize - Emacs - Editing -
    Basics
    findet man die Punkte Delete Key Deletes
    Forwards...
    , Line Number Mode... und Column Number
    Mode...
    . Wenn man diese in dem dann angezeigten Optionsschema
    aktiviert und dieses als Standard abspeichert, hat man eine
    funktionierende Entf-Taste, sowie die Anzeige der
    aktuellen Zeilen- und Spaltenposition des Cursors.
  • Um einen Zeilenumbruch am Fensterrand zu erreichen, muss man
    nach der Kombination M-x im Minibuffer die Funktion
    auto-fill-mode eingeben.

    Nützlich: Mit der Tabulator-Taste kann man diese
    Eingabe etwas verkürzen. Es wird entweder ein Fenster
    im XEmacs-Fenster (ein Buffer) geöffnet, der
    alle Funktionen, die auf die momentan passende Eingabe
    passen, anzeigt, oder die schon komplette Funktion
    vervollständigt (wenn man also schon
    auto-fill-m eingegeben hat). Dieses Tool
    funktioniert auch bei der Eingabe der zu öffnenden
    Datei, u.s.w.

Die Optionen, die man über die Menüleiste eingestellt
hat, werden unter Linux in einer Datei im eigenen
Home-Verzeichnis abgespeichert: .xemacs-custom. Zur
Veranschaulichung der oben angegebenen Optionen, habe nun den
Ausschnitt meiner .xemacs-custom hier aufgelistet:


(custom-set-variables
'(column-number-mode t)
'(line-number-mode t)
'(make-backup-files nil)
'(user-mail-address "terraerde@gmx.net" t))

Hier sind also die Spalten- und Zeilenangaben aktiviert worden,
ich lasse keine Backup-Dateien automatisch erstellen
(nil bedeutet also "nein, leer") und meine
E-Mail-Adresse ist festgelegt worden.

XEmacs als Editor

Zum Editieren eines Textes in XEmacs, muß man diesen
entweder öffnen, oder – falls es die Datei noch nicht gibt
– erstellen. Mit C-f wird im Minibuffer nach dem Pfad und
dem Dateinamen gefragt. Hier kann man nun einfach die
Informationen eintragen. Mit der Tabulator-Taste als
Eingabehilfe wird der Pfad- bzw. Dateiname vervollständigt;
gibt es mehrere Möglichkeiten wird ein kleines Fenster im
Editor geöffnet, daß diese anzeigt
(completions).

Man verfährt nun weiter, bis der vollständige Pfad
und der Dateiname im Minibuffer stehen. Die Datei wird nach
der Bestätigung mit Return angezeigt. Gibt es die
Datei noch nicht, wird sie neu erstellt und angezeigt
(natürlich steht dann noch nichts drin und XEmacs zeigt
einen leeren Buffer an). Erst nach dem ersten Abspeichern
befindet sich aber die Datei erst im angegebenen Verzeichnis auf
der Festplatte, bis dahin existiert sie sozusagen nur im
Speicher von XEmacs.

Nun kann man einfach editieren. Hat man den oben
aufgeführten Befehl des automatischen Zeilenumbruchs nicht
ausgeführt, wird bei einer zu langen Zeile am Fensterrand
ein gebogener Pfeil angezeigt (siehe Screenshot), der
darstellt, dass zwar der Text in der nächsten Zeile
fortgeführt wird, aber es keinen festen Zeilenumbruch
gibt. Daher wird auch mitten in einem langen Wort eine neue
Zeile begonnen.



Abbildung: Funktionsweise des weichen Zeilenumbruchs im
Fenster, der nicht im Text durchgeführt wird.

Abgespeichert wird mit der Tastenkombination C-x C-s,
soll die Datei unter einem anderen Namen als bisher gespeichert
werden, benutzt man C-x C-w. Möchte man die Datei
schließen, gibt man C-x C-k ein, dies führt
eventuell noch die Abfrage durch, ob die Datei vorher
abgespeichert werden soll und "killt" dann den Buffer
im Editor. Das ganze Programm beendet man mit C-x
C-c
. Auch hier wird bei noch nicht abgespeicherten Dateien
gefragt, ob dies noch nachgeholt werden soll.

Bewegen im Text

XEmacs bietet eine Fülle von Möglichkeiten, sich im
Text zu bewegen, die momentan mit vielen anderen Editoren nicht
erreicht werden. So kann man sich zeichenweise, wortweise,
zeilenweise, absatzweise, seitenweise und an den Anfang und das
Ende des Textes bewegen. Dabei ist der Aufbau der
Tastenkombinationen auch hier recht gut konzipiert worden.

Hinweise:

  1. Schnell wird man merken, dass beim XEmacs auch
    die langsam Standard gewordenen Bewegungen anderer Editoren
    funktionieren, wie z.B. CTRL-rechts und CTRL-links, um sich
    wortweise zu bewegen.
  2. Bei den folgenen Befehlen wird anfangs, wenn man sie mit M-x
    Kommandoname ausführt, im Minibuffer ein Hinweis auf
    die zugehörige Tastenkombination angezeigt.
Tastenkobination Kommandoname Aktion
C-f forward-char Ein Zeichen vorwärts (f wie forward)
C-b backward-char Ein Zeichen rückwärts(b wie backward)
C-p previous-line Eine Zeile höher (p wie previous)
C-n next-line Eine Zeile runter (n wie next)
M-f forward-word Ein Wort vorwärts (Erweiterte Bewegung des
C-f-Befehls)
M-b back-char Ein Wort rückwärts (Erweiterte Bewegung des
C-b-Befehls)
C-a beginning-of-line Zeilenanfang (a wie Anfang)
C-e end-of-line Zeilenende (e wie Ende)
M-a forward-sentence Einen Satz vorwärts (Erweiterte Bewegung des
C-a-Befehls)
M-e backward-sentence Einen Satz rückwärts (Erweiterte Bewegung des
C-e-Befehls)
M-} oder M-Cursor-runter forward-paragraph Einen Abschnitt vorwärts *)
M-{ oder M-Cursor-hoch backward-paragraph Einen Abschnitt rückwärts *)
C-x ] forward-page Eine Seite vorwärts **)
C-x [ backward-page Eine Seite rückwärts **)
C-v oder Bild-runter scroll-down-command Eine Bildschirmseite vorwärts
M-v oder Bild-hoch scroll-up-command Eine Bildschirmseite rückwärts
M-< beginning-of-buffer Zum Anfang des Dokuments ***)
M-> end-of-buffer Zum Ende des Dokuments ***)
C-l recenter Die aktuelle Zeile wird auf dem Bildschirm horizontal
zentriert
M-n digit-argument Das Kommando wird n-mal wiederholt
C-u n universal-argument Das Kommando wird n-mal wiederholt (Standard: 4mal)
*) Tastenkombinationen, bei denen man Tasten mit
AltGr erreichen muß funktionieren nur
gut, wenn man alle Tasten gleichzeitig
drückt.
**) Nur wenn man Seitenumbrüche definiert hat
(C-q C-l).
***) Je nach XEmacs-Version und Installation auch mit
Pos1 bzw. Ende zu erreichen.

Man kann auch zu einer Zeilennummer (M-x
goto-line) oder zu einem Buchtaben springen (M-x
goto-char) springen. Und hat man sich völlig in
seinem Text verwirrt kann man mit M-x what-line
sich die aktuelle Zeile und mit C-x =
(what-cursor-position) z.B. sowas anzeigen lassen:
Char: ^J (012, 10, 0xa) point=25856 of 26774(97%) column
0

Löschen von Text

Löschen von vorher eingetipptem Text geht am schnellsten
mit C-x u für "Undo". Aber es gibt weitere
Möglichkeiten:

Tastenkobination Kommandoname Aktion
DEL delete-backward-char Löscht das Zeichen vor dem Cursor
C-d delete-char Löscht das Zeichen unter dem Blockcursor (Kann in
den Optionen auf DEL gemappt werden)
M-d kill-word Löscht das nächste Wort oder das aktuelle Wort
ab Cursor bis Wortende
M-DEL backward-kill-word Löscht Wort vor dem Cursor oder das aktuelle Wort bis
zum Wortanfang
C-k kill-line Löscht die Zeile ab Cursorposition
M– C-k negative-argument kill-line Löscht die Zeile vor dem Cursor

Manche dieser Kommandos laufen über den Begriff
"delete" manche über den Begriff
"kill". Diese Kill-Kommandos löschen den Text
nicht wirklich, sondern legen ihn in den sogenannten
Kill-Ring. Dieser funktioniert wie ein Stack, von
dem man das gelöschte mit Last-in-First-out wieder
herausholen kann. Hat man aber z.B. mehrere Zeilen
hintereinander mit C-k gelöscht, werden diese Zeilen
als ein Element im Kill-Ring betrachtet und als Ganzes mit
C-y wieder eingefügt. Einzelne Buchstaben werden
nicht in den Kill-Ring gelegt, jedoch mehrere Buchtaben, die mit
dem numerischen Argument C-u gelöscht worden sind.

Tastenkobination Kommandoname Aktion
C-y yank Fügt das letzte Element des Killrings wieder am
Cursor ein
M-y yank-pop Fügt das vorherige Element des Killrings wieder am
Cursor ein

Zu M-y ist noch zu sagen, daß bei jedem Aufruf das
vorherige Element des Kill-Rings in den Text eingefügt wird
und das dort stehende erstetzt. C-y und M-y gehen
Hand-in-Hand: Währed C-y immer das zuletzt in den Kill-Ring
gelegte Element in den Text einfügt, ist es außerdem
die Bedingung, daß M-y funktioniert. M-y kann alleine
nicht einen Text einfügen, sondern nur, wenn vorher ein
Element mit C-y eingefügt worden ist. Dieses wird dann
durch das "M-y-Element" ersetzt.

Der Kill-Ring umfaßt standardmäßig 30 Elemente,
nach dem 30 Element wird wieder das aktuellste
eingefügt. Dies ist die Ring-Struktur des Kill-Rings. Die
Anzahl der möglichen Elemente im Kill-Ring kann durch
M-x set-variable kill-ring-max angepasst
werden.

Arbeiten mit markiertem Text (Cut/Copy/Paste)

Wenn man Regionen markiert, kann man mit XEmacs diese
löschen und wieder einfügen. Diese Regionen
können horizontal (zeilenweise) und vertikal (spaltenweise)
markiert und bearbeitet werden!

Der Mark ist die Anfangsmarkierung, die Stelle, an der
die Markierung des Textes beginnen soll. Der Point ist
die Endmarkierung, er steht auf dem Zeichen, daß dann
nicht mehr gelöscht wird (siehe Abbildung)



Abbildung: Der Mark und der Point. Der Point (rote
Cursorposition) wird nicht gelöscht.

 

Tastenkobination Kommandoname Aktion
C-SPACE oder C-@ oder
C–
set-mark-command Man kann nun einen Bereich markieren
C-x C-x exchange-point-and-mark Tauscht die "Mark" und den
"Point"
M-h mark-paragraph Der Satz wird automatisch markiert
C-x h mark-whole-bufffer Der ganze Buffer wird markiert ("Mark" am
Ende)
C-w kill-region Die markierte Region wird in den Killring gelegt und aus
dem Text herausgeschnitten
M-w kill-ring-save Die markierte Region wird in den Killring kopiert. Der
Text bleibt erhalten.

Die mit C-w gekillte Region kann mit C-y wieder an
eine andere Stelle "geyankt" werden.

Absätze formatieren

Mit dem Befehl auto-fill-mode geht XEmacs in den
Fill-Modus und bricht die Zeilen nach 70 Zeichen automatisch
hart um. Hat man den Modus nicht aktiviert (oder wieder
deaktiviert), kann man die Absätze leicht mit
verschiedenene "fill-Befehlen" umformatieren:

M-q fill-paragraph führt den Zeilenumbruch
bis zur nächsten "Zeile" (durch RETURN vom
vorherigen getrennt) durch. Alternativ gibt es den Befehl
fill-region, der eine bestimmte Region umbricht.

Mit C-u (universal-argument) oder M–
(negative-argument) und anschließendem M-q werden
die Zeilen mit Leerzeichen zwisch/tten den Wörtern bis zur
70sten Spalte aufgefüllt. Ein anschließendes
C-x u empfiehlt sich, denn der Effekt bringt nicht viel
Übersicht.

Ein nettes Spielchen ist der auto-fill-Modus mit M-^:
Hierbei wird die aktuelle Zeile an die vorherige gesetzt, so
daß der Absatz neu formatiert werden kann.

Editiertips

Nun ein paar spaßige Tips, die das Editieren mit XEmacs
erleichtern. Sie behandeln das Tauschen von Text, die
Groß- und Kleinschreibung und das Überschreiben von
Text.

Tastenkobination Kommandoname Aktion
C-t transponse-chars Tauscht das Zeichen unter dem Cursor mit dem
vorherigen
M-t transponse-words Tauscht zwei Wörter. Ist der Cursor auf dem ersten
Buchstaben, wird mit dem vorherigen Wort getauscht, sonst
mit dem nächsten.
C-x C-t transpose-lines Tauscht die aktuelle Zeile mit der vorherigen.
  transponse-sentences Zwei Sätze werden getauscht.
  transponse-paragraphs Zwei Absätze werden getauscht.
M-c capitalize-word Schreibt den Buchstaben unter dem Cursor groß. Gibt
es dahinter schon großgeschriebene Wörter, werden
diese klein, d.h. es gibt nur ein einzigen großen
Buchstaben im Wort (ideal: am Wortanfang)
M-l downcase-word Ändert das Wort ab Cursor in Kleinbuchstaben (l
wie lowercase)
M-u upcase-word Ändert das Wort ab Cursor in Großbuchstaben
(u wie uppercase)

Mit dem negativen Argument M– vor den eigentlichen
Befehlen, werden die vorherigen Wörter verädert.

Weiterhin ist es möglich, mit Insert, der
Einf-Taste in den overwrite-mode, den
Überschreibmodus, zu gehen. Die Zeichen unter dem Cursor
werden durch die gerade eingetippten ersetzt.

Tastenkobination Kommandoname Aktion
C-g keyboard-quit Der Befehl im Minibuffer wird abgebrochen (Quit). Als
Kommandoname nicht gut brauchbar…
C-x u oder C-_ oder
C-/
undo oder advertised-undo Undo, Rückgängig. Auch als Redo
(Rückgängig des Rückgängig)
möglich.
  revert-buffer Ersetzt den Text mit dem voher gespeicherten, aber auch
mit dem vor dem Öffnen gespeicherten (XEmacs speichert
die einzelnen Sessions und legt Backups an).

Erweitertes Editieren

In diesem Abschnitt geht es um ein erweitertes Editieren,
d.h. das Nutzen von Funktionen, die gerade in
größeren Texten eine große Hilfe sind.

Suchen und Ersetzen

XEmacs bietet verschiedene Suchfunktionen an, die vom normalen
Suchen (und Ersetzen) bis zum Suchen mit regulären
Ausdrücken reichen:

  • Die einfache Suche sucht den eingegebenen Textstring,
    wie in vielen Programmen.
  • Die inkrementelle Suche sucht – während man noch
    eintippt – das Wort. Er springt zum ersten passenden
    Buchstaben an (Bsp.: "S"), geht zum ersten
    passenden Buchstabenpaar ("Su") und so
    weiter, bis man nichts mehr eingibt.
  • Die Suche nach Wörtern sucht den String als
    gesamtes Wort (wenn man "Emacs" sucht, wird nicht
    "XEmacs" gefunden)
    .
  • Die Suche mithilfe regulärer Ausdrücke kann
    beispielsweise alle Wörter suchen, die z.B. mit
    "Com" anfangen und mit "er"
    aufhören, also von "Computer" bis
    "Comicleser".
  • Die inkrementelle Suche mit regulären
    Ausdrücken
    verbindet diese beiden Suchmechanismen.

Solange man nur Kleinbuchstaben eingibt, ist die Suche
case-insensitive, also unabhängig von der
Groß- und Kleinschreibung. Gibt man aber einen
Großbuchstaben ein, ist die Suche case-sensitive,
also abhängig von der Groß- und Kleinschreibung, denn
warum sollte man sich sonst die Mühe machen,
Großbuchstaben einzugeben?

Und genauso wie bei den Suchmechanismen gibt es auch
verschiedene Ersetzungsmechanismen:

  • Das einfache Suchen und Ersetzen sucht alle Vorkommen
    eines Wortes und ersetzt es durch ein anderes.
  • Die Query-Replace, das Suchen und Ersetzen nach Abfrage
    ist wesentlich sicherer. Man wird für jedes Ersetzen
    gefragt (Ja, Nein, Alle, Quit).
  • Das Suchen und Ersetzen mithilfe regulärer
    Ausdrücke
    geht ziemlich ab…

Einfache Suche (C-s RETURN)

Die einfache Suche startet man mit C-s RETURN (im
Gegensatz zur inkrementellen Suche!, siehe unten). Nun gibt man
das Suchwort ein und bestätigt wieder mit
RETURN. Die Suche rückwärts geht mit C-r
RETURN
. Mit weiteren C-s oder C-r kann man die Suche in
diese oder jene Richtung weiterführen.

Eine Zusammenfassung dieser und der anderen Suchfunktionen gibt
es am Ende des Kapitels.

Inkrementelle Suche (C-s)

Die inkrementelle Suche startet man mit C-s. Sie sucht,
wie schon erwähnt die ersten Vorkommen des Wortes,
während man den String noch im Minibuffer eingibt. Bis man
also das Wort "Suchen" gefunden hat, springt XEmacs zu
den Vorkommen von "S", "Su",
"Suc", "Such", "Suche", bis man
dann beim ersten Wort "Suchen" angekommen ist. Liegt
dies an der falschen Stelle, dr¨ckt man nochmal C-s,
dann springt er zum nächsten "Suchen". Mit
RETURN schließt man die inkrementelle Suche ab.

Der Minibuffer ist bis zu dem abschließenden RETURN die
Haupteingabe: Mit DEL kann man das Suchwort wieder ändern
und springt zu dem letzten dazu passendem Wort
zurück. C-g beendet die Suche am letzen gefundenen
Vorkommen. Ein zweites C-g springt zur Ausgangsposition
der Suche zurück.

Ist man am Ende des Textes angelangt, sucht man mit C-s
wieder von vorne los. Die inkrementelle Suche
rückwärts funktioniert mit C-r.

Sehr praktisch kann man mit C-s C-w den Teil des Wortes
ab Cursor in den Minibuffer kopieren und sofort damit lossuchen!
Mit C-s C-y ist die Suchzeile vom Cursor bis zum Ende der
Zeile.

Richig verrückt wird es, wenn man die Elemente des
Kill-Rings direkt in die inkrementelle Suche schickt. C-s
M-y
erledigt dies. M-p geht zum vorherigen Element,
M-n wieder zum nächsten.

Die Wortsuche (C-s RETURN C-w)

Die Wortsuche bietet den Vorteil, daß sie
Zeilenumbrüche, Leer- und Trennzeichen
ignoriert. Außerdem ist sie die einzige Suche, die nach
dem String, und nur nach dem String sucht. Wenn man
"Emacs" sucht, wird nur "Emacs" gefunden,
nicht "XEmacs". Um die Suche vorsärts zu startet,
drückt man C-s RETURN C-w, für
rückwärts C-r RETURN C-w

Zusammenfassung der Suchbefehle

Die inkrementelle Suche ist nach den Tastenkombinationen
eigentlich die Ausgangssuche. Wegen der Einfachheit der Suche
ist jedoch die "Einfache Suche" vorangestellt:

Tastenkobination Kommandoname Aktion
Einfache
Suche
C-s RETURN   Die normale Suche. Wiederholung mit C-s
C-r RETURN   Die normale Suche rückwärts. Wiederholung mit
C-r C-r
Inkrementelle
Suche
C-s isearch-forward Inkrementelle Suche vorwärts (gefolgt von
String)
C-r isearch-backward Inkrementelle Suche rückwärts (gefolgt von
String)
C-s C-w   Die Isearch wird mit dem Wortstück ab Cursor
gestartet.
C-s C-y   Die Isearch wird mit dem Zeilenstück ab Cursor
gestartet.
C-s M-y   Die Isearch wird mit dem letzten Kill-Ring-Element
gestartet. (Bewegung dort mit M-p, M-n)
C-s C-s   Die letzte Suche wird wiederholt.
Wortsuche
C-s RETURN C-w   Wortsuche vorwärts
C-r RETURN C-w   Wortsuche rückwärts

Einfaches Ersetzen

Unabhängig von Groß- und Kleinschreibung, sowie von
Ausnahmen wird mit dem "Einfachen Ersetzen" jeder
Textbaustein von Cursorposition bis Textende mit dem anderen
Text ergänzt. Also wird z.B. jedes "emacs" mit
"editor" ersetzt, auch wenn es sich im Wort
"xemacs" befindet (das gäbe dann
"xeditor").

Der Befehl dazu lautet: replace-string. Nach dem
Return, folgt das Wort das ersetzt werden soll und nach dem
nächsten Return das Wort, das dafür eingefügt werden
soll. Nach Beendigung des Ersetzens wird die Anzahl der
ersetzten Texte angezeigt.

Hinweis: Diese Suche reicht nur von der aktuellen
Cursorposition bis zum Textende!

Ersetzen mit Nachfrage

Will man bei jedem gefundenen Wort das ersetzt werden soll,
nachgefragt werden, gibt man die Tastenkombination M-%
(man muss auf deutschen Tastaturen die Shifttaste
drücken, um auf das Prozentzeichen zu kommen)

ein, oder M-x query-replace. Nach Return werden wieder
die zu ersetzenden und nach dem nächsten Return das
Ersetzerwort in den Minibuffer eingetippt.

Bei diesem Befehl dient der Minibuffer wieder als Dialogfeld des
XEmacs. XEmacs sucht das erste passende Wort, das zu ersetzen
ist und fragt dann nach:

Query replacing Blablabla with Texttexttext: (f1 for help)

Die F1-Taste bringt Licht ins Dunkel der verschiedenen Optionen
dazu, die in einem eigenen Buffer angezeigt werden. Die
wichtigsten sind "y", "n",
"!" und "q":

  • SPACE (Leertaste) oder y ersetzt das
    aktuelle Wort.
  • DEL oder n ersetzten das aktuelle Wort nicht,
    sondern springt zum nächsten Vorkommen.
  • . ersetzt nur das aktuelle Wort. Danach ist der
    gesamte Vorgang beendet.
  • , ersetzt das aktuelle Wort, zeigt das Ergebnis aber
    zuerst im Text an, bevor mit SPACE oder y weitergegangen
    wird.
  • ! ersetzt alle passenden Wörter von
    Cursoranfang bis Textende ohne weiter nachzufragen.
  • ^ geht zurück zum vorherigen Vorkommen.
  • RETURN oder q beendet die gesamte Abfrage

Da das Ersetzen nur von der aktuellen Cursorposition gestartet
wird, ist es u.U. sinnvoll mit M-x Esc Esc den gesamten
Befehl wieder vom Anfang des Dokuments
durchzuführen. Vorher muss man natürlich mit
C-< an den Anfang des Dokumentes gehen.

Rekursives Editieren:
Nun kann es vorkommen, dass man bei dem
"query-replace" in einem Teil des Textes einen
weiteren kleinen Fehler gefunden hat, den man sofort korrigieren
möchte. Man befindet sich aber dummerweise ja im
Ersetzen-Prozess. Nun, auch hier bietet XEmacs eine Lösung
an:Rekursives Editieren. D.h. dass man kurz den Ersetzen-Prozess
unterbrechen kann um ihn nach der Korrektur wieder
fortzufüren.

Dazu gibt man während einer Abfrage, ob man das aktuelle
Wort ersetzen möchte C-r ein. Das Wort wird
makriert, und man kann nun im normalen Editiermodus
weitermachen. Um wieder zurück zum Suchen-und-Ersetzen zu
kommen, gibt man Esc C-c ein. Der Dialog wird an der
Stelle an der man unterbrochen hatte wieder fortgeführt.

Suchen und Ersetzen mithilfe regulärer Ausdrücke

Mit regulären Ausdrücken ist es möglich,
Wörter im Text zu suchen, die einen oder mehrere feste
Bestandteile haben, die aber auch eines oder mehrere optionale
Zeichen enthalten können. Wie oben schon einmal
erwähnt kann man beispielsweise nach Wörtern suchen,
die mit "Comp" anfangen, beliebige Zeichen dazwischen
enthalten und mit der Zeichengruppe "er" enden. Als
Ergebnis würden dann z.B. "Computer",
"Comicleser&qout; oder auch "Commerzbankbanker"
gefunden werden.

Um in einer Suche erguläre Ausdrücke zu verwenden,
gibt es verschiedene Platzhalter für den Aufbau des
gesuchten Ausdrucks:

Zeichen Bedeutung
^ (das Dachsymbol): Der Anfang einer Zeile
$ Das Ende einer Zeile
. Ein einziges beliebiges Zeichen
* Null oder beliebig viele Zeichen
< Der Anfang eines Wortes
> Das Ende eines Wortes
[] In diesen eckigen Klammern können beliebige Zeichen
stehen. Das Alphabet der Kleinbuchstaben kann z.B. mit
[a-z] abgekürzt werden.

Um diese regulären Ausdrücke zu verwenden braucht es
natürlich ein wenig Übung. Einige Beispiele sollen zu
Darstellung dienen:

  • ^xemacs$ findet alle Vorkommen des Wortes
    "xemacs", die allein in einer Zeile stehen.
  • xem[a-z]*s findet Wörter wie "xemacs",
    "xemaaabbcaas", aber auch "AxxLxemacs".
  • <xem[a-z]*s> garantiert dagegen, das die
    gefundenen Wörter mit "xem" anfangen und mit
    "s" enden.

Um nach den Zeichen ^, $, ., *, [ oder ] zu
suchen, muss ein Backslash ("") vor das Zeichen
gesetzt werden. Also, um einen Punkt in der regulären Suche
zu finden, muss man "." eingeben.

Tastenkobination Kommandoname Aktion
ESC C-s RETURN re-search-forward Die Regulärer-Ausdruck-Suche vorwärts
ESC C-r RETURN re-search-backward Die Regulärer-Ausdruck-Suche
rückwärts
ESC C-s isearch-forward-regexp Die inkrementelle Regulärer-Ausdruck-Suche
vorwärts
ESC C-r isearch-backward-regexp Die inkrementelle Regulärer-Ausdruck-Suche
rückwärts
  query-replace-regexp Suchen und Ersetzen eines regulären Ausdrucks
  replace-regexp Ersetzen aller im Text vorkommenden regulären
Ausdrücke

Arbeiten mit mehreren Fenstern

Man kann mit XEmacs mehrere Dateien gleichzeitig anzeigen
lassen, oder auch gleichzeitig mehrere Teile einer Datei. Die
Aufteilung der einzelnen Fenster kann horizontal und/oder
vertikal erfolgen. Es handelt sich auch nur um ein neues Fenster
im XEmacs-Programmfenster. Es wird kein neues Programmfenster
mit Menü und Buttonleiste gestartet. Das geht aber auch
(später!).

Man kann das Fenster, in dem man sich momentan nicht befindet,
mit M-C-v scrollen lassen. Hier aber nun erstmal in
numerischer Reihenfolge die Kombinationen, die auf C-x
erfolgen:

Tastenkobination Kommandoname Aktion
C-x-0 delete-window Das Fenster wird geschlossen. Wenn es nur einen Frame
gibt, passsiert nichts.
C-x-1 delete-other-windows Alle anderen Fenster werden geschlossen; das Fenster, in
dem sich der Cursor befindet, nimmt den gesamten Platz im
Editor-Fenster aus.
C-x-2 split-window-vertically Das Fenster wird vertikal geteilt. In beiden Fenstern wird
der gleiche Inhalt angezeigt.
C-x-3 split-window-horizontally Das Fenster wird horizontal geteilt, mit einem
Scrollbalken abgetrennt. In beiden Fenstern wird der
gleiche Inhalt angezeigt.

Man kann auch beim Öffnen eines neuen Frames auch Argumente
übergeben, um dort eine Datei anzeigen zu lassen. Die
Kombinationen beginnen alle mit C-x-4:

Tastenkobination Kommandoname Aktion
C-x-4 b switch-to-buffer-other-window XEmacs fragt, welcher Buffer im neu getrennten Fenster
angezeigt werden soll.
C-x-4 f find-file-other-window Eine Datei soll in einem neuen Fenster geöffnet (oder
neu erstellt) werden.
C-x-4 d dired-other-window Dired, der XEmacs-Dateimanager wird im neuen
Fenster gestartet.

Es gäbe auch noch mail-other-window (C-x-4 m) und
das Mailprogramm würde im anderen Fenster gestartet
werden. Aber mailen wollen wir mit XEmacs noch nicht.

Eigene Tastenkombinationen

Die Datei .xemacs-custom ist die grundlegende
Konfigurationsdatei, in der alle vom Benutzer gemachten
Konfigurationen abgespeichert werden. Bei den
Grundlegenden Optionen oben, wurde schon ein kleiner
Ausschnitt gezeigt. Hier werden auch die eigenen, immer
geltenden Tastenkombinationen (die globalen
Tastenkombinationen) festgelegt und gespeichert.

Bei den von mir verwendeten Versionen von XEmacs habe ich bisher
noch wenige eigene Tasten definiert. Ein Beispiel (aus dem
User-Guide) sei hier nun aufgeführt; es kann einfach an die
.xemacs-custom angehängt werden, und definiert die
F2-Taste als Undo-Funktions-Aufrufs-Taste:


(global-set-key 'f2 'undo)

Anderes Beispiel: Die Taste F3 soll die Funktion
übernehmen, die auch schon auf den Kombinationen C-x
C-o
und C-TAB liegt: Das XEmacs-Fenster ist geteilt
und der Cursor soll zu dem anderen angezeigten Buffer
springen. Die folgende Durchführung zeigt, wie sich das
syntaktisch korrekt in die .xemacs-custom einfügen
läßt:

  1. M-x global-set-key
    Hiermit ruft man die Funktion auf, die eine
    Tastenkombintaionen für die gesamte Sitzung des XEmacs in
    allen Modi (Programmiersprachen, Outline, Fundamental)
    zuordnet(es gibt auch local-set-key).
  2. F3
    XEmacs verlangt, dass man die zuzuordnende Tastenkombination
    eingibt ("set key globally") und mit Return
    bestätigt.
  3. other-window
    XEmacs fragt, auf welches Kommando die Tastenkombination
    gesetzt werden soll ("Set key F3 to
    command:"). other-window heißt sie in diesem
    Beispiel.

    Nun hat man die Taste F3 auf die Funktion
    other-window "gemappt". Wie sieht nun die
    Syntax dazu aus, die man in die Datei
    .xemacs-custom schreiben könnte? Man kann dazu
    einen Trick verwenden, der auch in der XEmacs-FAQ steht: Die
    bis hierhin durchgeführte Festlegung der
    Tastenkombinaion wird nun über ein Redo (das die Ausgabe der
    Befehlszeile der ersten 3 Punkte im Minibuffer angibt) und
    über die Benutzung des Killrings (der erweiterten
    "Zwischenablage" des XEmacs) in die
    Konfigurationsdatei eingefügt:

  4. C-x Esc Esc
    Die Befehlszeile steht im Minibuffer
  5. C-a C-k C-g
    Die Zeile wird von Anfang bis Ende in den Killring gelegt.

Aus dem Killring kann die Befehlszeile direkt in
.xemacs-custom eingefügt werden (mit C-x
oder eventuell anschließendes M-x). Dort steht dann
die funtionierende globale Tastenkombinationszuordung:


(global-set-key [#<keypress-event f3>] (quote other-window))

Hinweis: Einen nützlichen Tip zum Umgang mit dem
Mouse-Wheel unter Linux gibt
Colas Nahaboo X mouse wheel scroll page.
So kann man nicht nur einfach sein Mausrad unter Linux
aktivieren, sondern lernt auch tolle Optionen für die
XEmacs- und die Emacs-Konfigurationsdatei. Denn dort kann man
die Beispiele hineinkopieren, so dass man scrollen kann.

abgek

Advertisements