\documentclass[11pt,a4paper,titlepage]{article} 
\topmargin=-1.5cm
\headsep=0.5cm
\textheight=26.0cm
\textwidth=18.0cm
\oddsidemargin=-0.5cm
\evensidemargin=-0.5cm
\pagestyle{headings}
%%
% Packages
%%
\usepackage[bookmarks=true]{hyperref}
\hypersetup{
pdfauthor=Thomas Ruschival,
pdfsubject=Short introduction in Gnu emacs,
pdftitle=A Gnu \textsc{Emacs} Primer,
}
\usepackage[latin1]{inputenc} 
\usepackage{ngerman,latexsym,textcomp} 


\date{\today{}} 
\author{Thomas Ruschival \\ Thomas@Ruschival.de} 
\title{\Huge A GNU \textsc{Emacs} Primer}


%%
% Macros
%%
\def\comtablehead#1{
\begin{center}
\begin{tabular}{|p{3.5cm}|p{12.0cm}|}
\hline
\multicolumn{2}{|c|}{\bf #1 }\\
\hline
\hline
\bf Hotkey / Befehl & \bf Bedeutung \\
\hline
}

\def\comtablebottom{
\end{tabular}
\end{center}
}

\def\commandstyle#1{\small \texttt #1}

%%
% Dokument
%%
\begin{document}

\maketitle
\tableofcontents
\clearpage
\section{Emacs}\label{section:Emacs}
\subsection{Einleitung}
\textsc{Emacs} wurde in seiner heutigen Form (allerdings mit weniger Features) 1984 von Richard M. Stallman dem Gründer der Free Software Foundation als erstes 
GNU-Projekt unter der GPL veröffentlicht. \textsc{Emacs} sollte in jeder GNU/Linux Distribution dabei sein. \\ 
Wer will im Jahre 2004, wo es Visual Studio\texttrademark{ }, Eclipse\texttrademark{ } und Millionen anderer IDEs in denen man alles 'nur' anklicken muss, 
überhaupt einen Texteditor der mit kryptischen Hotkeys und Befehlen arbeitet. Ich, da ich beim Programmieren meistens die Tastatur benutze. Mit \textsc{Emacs} muß ich  
ein Wort nochmals nicht tippen, nur weil mir jetzt einfällt es sollte in Großbuchstaben geschrieben sein. In \textsc{Emacs} löst sich dieses Problem mit zwei 
Tastenkombinationen \texttt{M-b} (ein Wort zurück) \texttt{M-u} (Wort in Großbuchstaben). \\
Irgendjemand hat \textsc{Emacs} mal als ``thermonuclear texteditor'' bezeichnet, was der Funktionalität und Komplexität durchaus gerecht wird.\\
Diese Kurzreferenz erhebt keinerlei Ansprüche auf Vollständigkeit. Ich habe mich darauf beschränkt wie \textsc{Emacs} das tägliche Leben am Rechner vereinfacht. 
Funktionen wie Emailclient, Newsclient, Webbrowser, Terminkalender, Tetris, life und Türme von Hanoi habe ich bewusst weggelassen, ich brauche sie nicht.\\
Wenn was nicht tut, schaut bitte selbst darum warum es nicht tut. Im Internet bei gnu.org \cite{EMACSMAN} oder in \textsc{Emacs} selbst ist eine vortreffliche Hilfe eingebaut. \\
Diese Kurzreferenz soll nur als Appetitanreger dienen sich mit \textsc{Emacs} weiter zu beschäftigen. Die mehr oder minder aktuelle Version dieses Machwerks findet sich im
Internet unter http://doomgarage.de/$\tilde{ }$ ruschi/stuff/ \cite{DOOMGARAGE} zusammen mit meiner .emacs-Datei \ref{subsection:emacs-file}  und ein paar nützlichen 'modes'.
   
\subsection{Bedienung}\label{subsection:usage}
Kommandos werden in \textsc{Emacs} immer mit \texttt{C-} und \texttt{M-} eingegeben.\\
\texttt{C-} steht für die Controltaste (Strg) \\ 
\texttt{M- } steht für die Metataste (Windows, Apfel), man kann auch ESC drücken, finde ich nur nicht ergonomisch. \\
\texttt{C-x C-s } heißt also zuerst \texttt{'Control'} und \texttt{'x'} , danach \texttt{'Control'} und \texttt{'s'} gleichzeitig drücken, wobei 
man auch den kleinen Finger auf \texttt{'Control'} lassen kann und \texttt{'x'} und \texttt{'s'} hintereinander drücken. \\
Mit die wichtigsten Kommandos in \textsc{Emacs} sind:
\begin{quote}
\bf{abbrechen: } \texttt{C-g }  \bf{undo:}  \texttt{C-x u }
\end{quote}
Mit \texttt{M-x} werden im Minibuffer alle Kommandos als Wort eingeben,
\texttt{tab} zeigt die möglichen Kommandos an.\\
Beispiel: \texttt{M-x} sa \texttt{tab} zeigt einen neuen Buffer \ref{subsection:buffers} an: 
\begin{quote}
\texttt{Possible completions are:\\
save-buffer                        save-buffers-kill-Emacs\\
save-some-buffers                  say-minor-mode
}
\end{quote}
\textsc{Emacs} hilft weiterhin beim erlernen von Hotkeys, gibt es bereits einen solchen für einen bestimmten Befehl weist \textsc{Emacs} nach der Ausführung 
im Minibuffer darauf hin.

\subsection{Einstellungen}\label{subsection:settings}
Wird \textsc{Emacs} in einer graphischen Umgebung gestartet können über den Menüpunkt Options Customize \textsc{Emacs} alle Eigenschaften 
(und das sind verdammt viele) eingestellt werden. Das Mausrad ist per default inaktiv, in Options-\textgreater Emacs-\textgreater
Environment-\textgreater Mouse kann die Unterstützung aktiviert werden.
Ich empfehle dringend, wenn man mit den Einstellungen zufrieden ist, eine Kopie seiner .emacs Datei wegzusichern.
Die Datei .emacs \ref{subsection:emacs-file} enthält alle Benutzerdefinierten Einstellungen für \textsc{Emacs}. Hier können auch 'Hotkeys' definiert werden.\\
\clearpage
\subsection{Modes}\label{subsection:modes}
'Modes' sind Verhaltensvorschriften für \textsc{Emacs}. 'major-modes' werden nach der Dateierweiterung ausgewählt, \textsc{Emacs} unterstützt damit 
Syntax-highlighting für die entsprechende Sprache, das Menü bekommt neue Unterpunkte und Coding-hilfen werden aktiv. 
Von Haus aus bringt \textsc{Emacs} schon eine ganze F\"ulle voll verschiedener 'major-' und 'minor-modes' mit. Ein 'major-mode' ist z.B. der C-mode. 
Java und C++ verwenden diesen mode per default, denn beide haben ähniche Syntax und Funktionalität. Zu jedem 'major-mode' 
gibt es 'minor-modes' die das Verhalten detailliert anpassen. Der Benutzer kann sich aber auch eigene Modes installieren, im Internet gibt es 
für {\bf jede} Sprache ausgereifte Mode-Dateien, die man entweder systemweit oder ins 
\$HOME/.emacs/more-modes/ Verzeichnis ablegen kann. Bei den meisten Gnu/Linux Distributionen sind schon eine Menge Modes und Erweiterungen für \textsc{Emacs} dabei, 
z.B. eine Java-''IDE''  die 'JDE'. 
Mit der 'JDE' hat man dann auch automatisierte Erstellung von get-/set Methoden, Hotkeys für Zeilen wie ``System.out.println()''\dots. \\
Momentan benutze ich AUCTEX einen erweiterten \LaTeX-mode. Bei Mathworks findet sich sogar ein ``matlab-mode'' , der eine Matlab\texttrademark{ } shell in \textsc{Emacs} 
ermöglicht.
Bei Modes, die manuell nachinstalliert werden, muss gegebenenfalls die Datei .emacs \ref{subsection:emacs-file} angepasst werden,
 um den mode automatisch zu laden. 
Will man manuell \textsc{Emacs} in einen bestimmten Mode zwingen reicht das Kommando \texttt{M-x 'modename'}.    

\clearpage
\section{Die Oberfläche}\label{section:interface}

%%
% Buffers und Windows
%%
\subsection{Arbeiten mit 'Buffers' \& 'Windows'}\label{section:buffers}
Buffers sind Dateien die man editiert. Alle Daten in \textsc{Emacs} sind in Buffers gespeichert\\
Windows sind Bufferansichten, nicht zu verwechseln mit 'Frames' \ref{subsection:frames} 
die vom Windowmanager verwaltet werden.\\ 
Am Anfang grüßt \textsc{Emacs} mit einem seltsamen Text:
\begin{quote}
\texttt{;; This buffer is for notes you don't want to save, and for Lisp evaluation.\\
;; If you want to create a file, visit that file with C-x C-f,\\
;; then enter the text in that file's own buffer.
}
\end{quote}
Das ist der 'scratch' Buffer, man kann sich hier Sachen notieren, Abschnitte, zum zwischenspeichern will reinwerfen oder LISP Kommandos absetzen. 
LISP ist die native Programmiersprache von \textsc{Emacs}.\\
Darunter ist der 'minibuffer',dort werden mit \texttt{M-x} Befehle Eingegeben.\\ 
Beispiel: Datei öffnen \texttt{C-x C-f},jetzt fragt \textsc{Emacs} im 'minibuffer' \texttt{Find file: \~/ }\\
\subsubsection{Buffers}\label{subsection:buffers}
Ein Buffer ist die Kopie einer Datei, erst beim Speichern wird die Datei überschrieben.   
\comtablehead{Basics}
    \texttt{C-x b} & Buffer wechseln\\
    \commandstyle{ switch-to-buffer} &\\
    \hline
    \texttt{C-x k} & aktuellen Buffer schliessen \\ 
    \commandstyle{ kill-buffer} &\\
    \hline
    \texttt{C-x C-f} & Öffnen einer Datei im aktuellen Buffer \\
    \commandstyle{ find-file} &\\
    \hline 
    \texttt{C-x C-i} & Datei an Cursorposition einfügen \\
    \commandstyle{insert-file} &\\
    \hline 
    \texttt{C-x C-v} & Öffnen im aktuellen Buffer alte Datei schliessen \\
    \commandstyle{ find-alternate-file} &\\
    \hline 
    \texttt{C-x C-s} & Speichern des aktuellen Buffers\\
    \commandstyle{ save-buffer} &\\
    \hline
    \texttt{C-x C-w} & Speichern unter einem anderen Namen\\ 
    \commandstyle{ write-file} &\\
    \hline
\comtablebottom


\subsubsection{Bufferlist}\label{subsection:bufferlist}
Liste aller gerade offenen Buffer.
\comtablehead{Bufferlist \texttt{C-x C-b}}
    \texttt{\%} & Buffer schützen, nur-lese Status an- \& ausschalten \\
    \hline
    \texttt{d} & Buffer zum löschen markieren (wird noch nicht gelöscht) \\
    \hline   
    \texttt{x} & markierte Buffer löschen \\
    \hline
    \texttt{s} & Buffer speichern \\
    \hline
    \texttt{m} & Buffer zum laden markieren \\
    \hline
    \texttt{v} & mit \texttt{m} markierte buffer in Windows laden \\
    \hline
    \texttt{o} & Buffer in anderem Window laden \\
    \hline
    \texttt{f} & Bufferliste durch diesen Buffer ersetzen \\
    \hline
    \texttt{q} & Bufferliste verlassen (kann auch durch \texttt{C-x k} geschlossen werden) \\
    \hline
\comtablebottom

\clearpage
\subsubsection{Windows}\label{subsection:windows}
'Windows' sind SDI-Ansichten in \textsc{Emacs}. 'Buffers' werden in 'Windows' dargestellt.
\comtablehead{Windows}
    \texttt{C-x 3} & aktives Window vertikal teilen\\
    \commandstyle{ split-window-vertically} &\\
    \hline
    \texttt{C-x 2} & aktives Window horizontal teilen)\\
    \commandstyle{ split-window-horizontally} & \\
    \hline
    \texttt{C-x 1} & alle anderen Windows schliessen \\
    \commandstyle{ delete-other-window} &\\
    \hline
    \texttt{C-x 0} (Null) & aktives Fenster schließen \\
    \commandstyle{ delete-window} &\\
    \hline
    \texttt{C-x o} & Wechsel in anderes Fenster \\
    \commandstyle{ other-window} &\\
    \hline
    \texttt{C-x 4 f} & Datei im anderen window laden \\
    \commandstyle{ find-file-other-window} &\\
    \hline
    \texttt{C-x 4 0} & Window und Buffer schließen \\
    \commandstyle{ kill-buffer-and-window} &\\
    \hline
\comtablebottom

\subsubsection{Frames}\label{subsection:frames}
Frames sind echte Fenster, die vom Windowmanager verwaltet werden. \textsc{Emacs} kann mit mehreren Fenstern 
als MDI Programm arbeiten, ohne für jedes Fenster einen neuen Prozess zu starten. Somit kann 
übersichtlich mit verschiedenen Dateien gearbeitet werden.
\comtablehead{Frames}
    \texttt{C-x 5 2} & Neuen Frame erzeugen \\
    \commandstyle{ make-frame-command} &\\
    \hline
    \texttt{C-x 5 o} & in anderen Frame wechseln (umständlich, ich benutzte die Maus) \\
    \commandstyle{ other-frame} &\\
    \hline
    \texttt{C-x 5 0} & anderen Frame schließen  \\
    \commandstyle{ delete-frame} &\\
    \hline
    \texttt{C-x 5 f} & Datei in anderen Frame laden  \\
    \commandstyle{ find-file-other-frame} &\\
    \hline
    \texttt{C-x 5 b} & Buffer in anderen Frame anzeigen  \\
    \commandstyle{ switch-to-buffer-other-frame} &\\
    \hline
\comtablebottom
\clearpage

\section{Emacs \& Text}\label{section:edit}

\subsection{Editieren - Normalo}\label{subsection:edit_base}
\subsubsection{Cursornavigation}\label{subsection:cursor}
Pfeiltasten sind gut, um im Text von Buchstabe zu Buchstabe zu kommen, große Schritte sind schneller. 
Wortweises springen erfolgt mit \texttt{ALT Pfeiltaste}.
\comtablehead{Navigation}
    \texttt{C-a} & Zum Anfang der Zeile springen  \\
    \commandstyle{ beginning-of-line} &\\
    \hline
    \texttt{C-e} & Zum Ende der Zeile springen  \\
    \commandstyle{ end-of-line} &\\
    \hline
    \texttt{M-a} & Zum Anfang des Satzes springen  \\
    \hline
    \texttt{M-e} & Zum Ende des Satzes springen  \\
    \hline
    \texttt{M-f} & ein Wort vorspringen  \\
    \commandstyle{ forward-word} &\\
    \hline
    \texttt{M-b} & ein Wort zurückspringen  \\
    \commandstyle{ backward-word} &\\
    \hline
    \texttt{M-\textless} & zum Bufferende springen  \\
    \commandstyle{ beginning-of-buffer} &\\
    \hline
    \texttt{M-\textgreater} & zum Bufferanfang springen  \\
    \commandstyle{ end-of-buffer} &\\
    \hline
\comtablebottom

\subsubsection{Kill \& Yank - Copy \& Paste the Emacs way}\label{subsection:killyank}
\textsc{Emacs} hat theoretisch nahezu unendlich viele Zwischenablagen, den sogenannten 'killring'. Die Größe wird nur vom Speicher 
und den Benutzereinstellungen begrenzt.
Marken und Auswahlen können mit der Tastatur oder mit der Maus gesetzt werden.  
\comtablehead{Kill \& Yank}
    \texttt{C-Space} & Marke im Text setzen  \\
    \commandstyle{ set-mark-command} &\\
    \hline
    \texttt{C-x C-x} & Marke und Cursor vertauschen  \\
    \commandstyle{ exchange-point-and-mark} &\\
    \hline
    \texttt{C-w} & Text zwischen Marke und Cursor ausschneiden  \\
    \commandstyle{ kill-region} &\\
    \hline
    \texttt{C-Insert} &  Text zwischen Marke und Cursor kopieren  \\
    \commandstyle{ kill-ring-save} &\\
    \hline
    \texttt{M-d} &  nächstes Wort löschen  \\
    \commandstyle{ kill-word} &\\
    \hline
    \texttt{C-DELETE} &  vorheriges Wort löschen  \\
    \commandstyle{ backward-kill-word} &\\
    \hline
    \texttt{M-k} & Satz löschen  \\
    \commandstyle{ kill-sentence} &\\
    \hline
    \texttt{C-k} & Zeile löschen  \\
    \commandstyle{ kill-line} &\\
    \hline
    \texttt{C-y} & Letzter Eintrag aus dem 'killring' einfügen   \\
    \commandstyle{ yank} &\\
    \hline
    \texttt{M-y} &  Killring durchblättern und einfügen , nach \texttt{C-y}  \\
    \commandstyle{ yank-pop} &\\
    \hline
\comtablebottom

\subsubsection{Suchen und Ersetzen}\label{subsection:search-replace}
Hier k\"onnen Regul\"are Ausdr\"ucke \ref{subsection:regexp} eingesetzt werden 
\comtablehead{Basics}
    \texttt{C-s} & inkrementell Vorwärts suchen  \\
    \commandstyle{ isearch-forward} &\\
    \hline
    \texttt{C-r} & Rückwärts suchen  \\
    \commandstyle{ isearch-backward} &\\
    \hline
    \texttt{M-\%} & ersetzen  \\
    \commandstyle{ query-replace} &\\
    \hline
    \texttt{n} & nächster Treffer  \\
    \hline
    \texttt{ \^ } & einen Treffer zurück  \\
    \hline
    \texttt{.} & diesen Treffer ersetzen und beenden  \\
    \hline
    \texttt{!} & alle Treffer ab hier ersetzen    \\
    \hline
    \texttt{SPACE} & diesen Treffer ersetzen    \\
    \hline
    \texttt{C-s} & Nach Regulärem Ausruck vorwärts suchen    \\
    \commandstyle{isearch-forward-regexp} &  \\
	\hline
    \texttt{C-r} & Nach Regulärem Ausruck rückwärts suchen    \\
    \commandstyle{isearch-backward-regexp} &  \\
	\hline
	\texttt{F4}\textsuperscript{1} & Regulären ausdruck ersetzen    \\
    \commandstyle{query-replace-regexp} &  \\
	\hline
	& Globales ersetzen ohne Rückfrage \\
    \commandstyle{replace-regexp} &\\
    \hline
	\multicolumn{2}{r}{ {\small \textsuperscript{ 1 } Hotkey wurde in .emacs \ref{subsection:emacs-file} definiert}}
\comtablebottom
 

\clearpage

\subsection{Editieren - Poweruser}\label{section:poweruser}
Allen Befehlen kann das 'universal argument' \texttt{C-u 'x'} vorangestellt werden,
wobei \texttt{'x'} eine Zahl ist. \textsc{Emacs} führt dann das nachfolgende Kommando x-mal aus.\\
Beispiel:  \texttt{C-u 5}  \texttt{ M-d} löscht die nächstem 5 Wörter im Text. \\
Wer größere Kommandos im Minibuffer eingegeben hat, wie z.B. suchen und ersetzen mit einem komplizierten regulären Ausdruck 
will den Befehl beim nächsten Gebrauch nicht nochmals eingeben. Hier bietet \textsc{Emacs} eine Befehlshistorie, die man sich mit 
\texttt{M-x list-command-history} anzeigen kann. \texttt{C-x ESC ESC} (\commandstyle{M-x repeat-complex-command}) dient zum 
wiederholen des letzten Befehls. Gibt man zusätzlich eine Nummer ein, wird der entsprechende Befehl aus der Historie wiederholt.   

\subsubsection{Regul\"aere Ausdr\"ucke}\label{subsection:regexp}
Reguläre Ausdrücke \cite{REGEXP} wie sie beim Suchen \& Ersetzen eingesetzt werden k\"onnen. \textsc{Emacs}-Regexps unterscheiden sich 
allerdings leicht von grep oder awk \cite{SEDAWK}. \texttt{C-h s} wird die Syntax angezeigt.
\comtablehead{Regular Expressions}
	\texttt{C-x C-j} & newline  \\
	\hline
	\texttt{C-x TAB} & tabulator  \\
	\hline
	\texttt{\.} & alle Zeichen au\ss er newline  \\
	\hline
	\texttt{$\backslash$|} & logisches Oder  \\
	\hline
	\texttt{$\backslash$} & escape f\"ur Sonderzeichen (\$,.)  \\
	\hline
	\texttt{?} & 0-1 mal zutreffend (greedy)  \\
	\hline
	\texttt{+} & 1-n mal zutreffend (greedy) \\
	\hline
	\texttt{*} & 0-n  mal zutreffend (greedy)  \\
	\hline
	\texttt{\^} &  Zeilenanfang  \\
	\hline
	\texttt{\$} & Zeilenende  \\
	\hline
	\texttt{[ ]} & Klasse von Zeichen ( $\hat{}$  am Anfang negiert die Klasse)  \\
	\hline
	\texttt{$\backslash$( $\backslash$)} & Gruppe von Zeichen  \\
	\hline
	\texttt{<$\backslash$i>} & Referenz auf Gruppe i  \\
	\hline
\comtablebottom

\subsubsection{Korrigieren}\label{subsection:correct}
Funktionen für tippfaule Menschen.
\comtablehead{Korrigieren}
    \texttt{M-u} & Nächstes Wort in GROSSBUCHSTABEN    \\
    \commandstyle{upcase-word} &  \\
	\hline
	\texttt{M-c} & Nächstes Wort mit Grossbuchstaben beginnen  \\
    \commandstyle{capitalize-word} &  \\
	\hline
    \texttt{M-l} & Nächstes Wort in kleinbuchstaben    \\
    \commandstyle{lowcase-word} &  \\
	\hline
    \texttt{C-x C-u} & Region in GROSSBUCHSTABEN    \\
    \commandstyle{upcase-region} &  \\
	\hline
    \texttt{M-t} & Worte vertauschen \\
    \commandstyle{transpose-words} &  \\
	\hline
    \texttt{C-t} & Buchstaben vertauschen \\
    \commandstyle{transpose-chars} &  \\
	\hline
    \texttt{C-x C-t} & Zeilen vertauschen \\
    \commandstyle{transpose-lines} &  \\
	\hline
    \texttt{C-x C-u} & Region in GROSSBUCHSTABEN    \\
    \commandstyle{upcase-region} &  \\
	\hline
    \texttt{C-x C-l} & Region in kleinbuchstaben    \\
    \commandstyle{lowcase-region} &  \\
    \hline
\comtablebottom

\clearpage
\subsubsection{Abbrev mode - Abkürzungen}\label{subsection:abbrevs}
Noch mehr Funktionen für tippfaule Menschen. \textsc{Emacs} unterstützt dynamische Abkürzungen und Abkürzungen aus Wordlists.\\
Dynamische Abkürzungen funktionieren immer. Mit \texttt{M-/} werden der Reihe nach alle bisherigen Worte an der Stelle ausgeschrieben,
die auf die Buchstabenkombination passen. \textsc{Emacs} schägt zuerst die letzte Möglichkeit vor, bei nochmaligem \texttt{M-/} die vorletzte.\\
Globale Abkürzungen werden automatisch bei einem Leerzeichen nach der Abkürzung ausgeschrieben. 
Deshalb ist es sinnvoll Buchstabenkombinationen zu verwenden, die nicht als Wort vorkommen.\\ 
Der 'abbrev-mode' muß erst gestartet werden, dies geschieht mit \texttt{M-x abbrev-mode}. Um den Mode schon zu Beginn einzuschalten,
genügt es folgende Zeilen in die Datei .emacs \ref{subsection:emacs-file} aufzunehmen:
\begin{verbatim}
(setq-default abbrev-mode t)
(read-abbrev-file ``~/.abbrev_defs'')
(setq save-abbrevs t)
\end{verbatim}

\comtablehead{Abbrev mode}
    \texttt{C-x a i g} & Globale Abkürzung definieren (Abk. ist das letzte getippte Wort) \\
    \commandstyle{inverse-add-global-abbrev} & Vorteil: Ganze Sätze mit Leerzeichen  \\
    \hline
	\texttt{C-x a  g} & Globale Abkürzung definieren (Ausschreibung ist das letzte Wort) \\
    \commandstyle{add-global-abbrev} &  Nachteil: Auschreibung ist maximal ein Wort\\
    \hline
    \commandstyle{write-abbrev-file} &  Wordlist speichern\\
    \hline
	\commandstyle{read-abbrev-file} &  Wordlist laden \\
    \hline
	\commandstyle{unexpand-abbrev} & letzte Auschreibung rückgängig machen \\
    \hline 
	\texttt{M-/} & dynamische Abkürzung vervollständigen  \\
    \hline
\comtablebottom


\subsubsection{Rechteck editieren}\label{subsection:rectangle}
Eine absolute Powerfunktion, besonders nützlich, wenn man strukturierten Text mit Datenspalten oder Variabledeklarationen editieren will. 
Ein Rechteck wird von Zeile/Spalte der Marke bis Zeile/Spalte des Cursors definiert.
\comtablehead{Rectangle}
    \texttt{C-x r t} & String in Rechteck einfügen    \\
    \commandstyle{string-rectangle} &  \\
    \hline
	\texttt{C-x r k} & Rechteck ausschneiden    \\
    \commandstyle{kill-rectangle} &  \\
    \hline
	\texttt{C-x r y} & Rechteck einfügen    \\
    \commandstyle{yank-rectangle} &  \\
    \hline
	\texttt{C-x r d} & Rechteck löschen    \\
    \commandstyle{delete-rectangle} &  \\
    \hline
	\texttt{C-x r c} & Leerzeichen in Rechteck einfügen    \\
    \commandstyle{clear-rectangle} &  \\
    \hline
\comtablebottom 


\subsubsection{Ausblenden}\label{subsection:narrowing}
Mit 'Narrowing' kann die Ansicht auf eine ausgewählte Region beschränkt werden, um die Übersichtlichkeit zu erhöhen.
 'Narrowing ist per default dektiviert, da es den 'Normalouser' irritiert, wenn plötzlich der Text weg ist. 
Der Text ist natürlich noch da, man sieht ihn nur nicht. Beim ersten aufruf von \texttt{C-x n n} fragt
 \textsc{Emacs} nach ob 'Narrowing' aktiviert werden soll. 
\comtablehead{Selectives Editieren}
    \texttt{C-x n n}\ & Ansicht auf markierte Region beschränken    \\
    \commandstyle{ narrow-to-region}& \\
    \hline
    \texttt{C-x n w}\ & Ansicht wieder auf ganzen Buffer setzen    \\
    \commandstyle{ widen}& \\
    \hline
    \texttt{C-x n p}\ & Ansicht aktuelle Seite setzen    \\
    \commandstyle{ narrow-to-page} & \\
    \hline
    \texttt{C-x =} & Info wo man sich befindet, wird auch in der Statusleiste gezeigt    \\
    \hline
\comtablebottom


\subsubsection{Bookmarks}\label{subsection:bookmarks}
Ist ein Dokument sehr lang (wie dieses hier) ist scrollen einfach nicht effizient. Besser man sagt direkt wo man hin will. 
\comtablehead{Bookmarks}
    \texttt{C-x r m}\ & Bookmark der aktuellen Cursorposition anlegen    \\
    \commandstyle{ bookmark-set}& \\
    \hline
    \texttt{C-x r b}\ & Zu einem bookmark springen    \\
    \commandstyle{ bookmark-jump}& \\
    \hline
	\texttt{C-x r l }\ & Alle Bookmarks anzeigen    \\
    \commandstyle{ bookmark-bmenu-list} & \\
    \hline
	\multicolumn{2}{|c|}{\bf Bookmarks-list \texttt{C-x r b}}\\
	\hline
	\texttt{d} & Bookmark zum löschen markieren \\
    \hline
	\texttt{x} & markierte Bookmarks löschen\\
    \hline
	\texttt{s} & alle Bookmarks speichern \\
    \hline
	\texttt{f} oder	\texttt{ENTER}  & Textstelle anzeigen \\
    \hline
	\texttt{r} & Bookmark umbenennen \\
    \hline
\comtablebottom

\subsubsection{Registers}\label{subsection:registers}
Der Killring ist manchmal nicht genug, um ganze Textpassagen oder Sprungmarken zu speichern dienen 'Register'. 
Ein Speicher wie ein Array, in das man alles mögliche kopieren kann und über einen Index erreicht. In der folgenden Tabelle steht 'n' 
für eine Ganze Zahl, die Adresse des Registers.

\comtablehead{'Registers'}
    \texttt{C-x r s 'n'}\ & Auswahl in Register 'n' kopieren    \\
    \commandstyle{copy-to-register}& \\
    \hline
	\texttt{C-x r i 'n'}\ & Auswahl aus Register 'n' einfügen    \\
    \commandstyle{insert-register}& \\
    \hline
	\commandstyle{append-register}& Auswahl an Register 'n' anhängen \\
	\hline
	\commandstyle{prepend-register}& Auswahl vorne an Register 'n' anhängen \\
	\hline
	\texttt{C-x r r 'n'}\ & Rechteck in Register 'n' kopieren    \\
    \commandstyle{copy-rectangle-to-register}& \\
    \hline
\comtablebottom  


\subsubsection{Schönerer Code}\label{subsection:beautycode}
Um Programmcode zu formatieren bietet \textsc{Emacs} auch einige Funktionen. Allerdings ist das mit vorsicht zu geniessen. Oft 
wird der User hier bevormundet. \textsc{Emacs} entscheidet dann in einigen modes selbst wann er einen TAB einfügt. Um diese 
Freiheit zurückzuerlangen sollte irgendwo in der Datei .emacs \ref{subsection:emacs-file} die
Zeile \begin{verbatim} (global-set-key "\C-i" `self-insert-command) \end{verbatim} stehen.\\
Alternativ kann man auch die Tastenkombination \commandstyle{M-i} benutzen ,um Tabstops einzufügen, das funktioniert in allen modes
und hat manchmal noch Extras wie relatives einrücken.\\

\comtablehead{Formatierungshilfen}
\texttt{F6} \textsuperscript{ 1 } & Region einrücken   \\
\commandstyle{indent-region} & \\
\hline
\texttt{F7} \textsuperscript{ 1 } & Region auskommentieren   \\
\commandstyle{comment-region} & \\
\hline
\texttt{F8} \textsuperscript{ 1 } & Kommentare entfernen   \\
\commandstyle{uncomment-region} & \\
\hline
\texttt{M-;} \textsuperscript{ 1 } & Kommentar einfügen   \\
\commandstyle{uncomment-region} & \\
\hline
\multicolumn{2}{r}{ {\small \textsuperscript{ 1 } Hotkey wurde in .emacs \ref{subsection:emacs-file} definiert}}
\comtablebottom


\section{Features in C/C++ \& Java Mode} \label{section:special}
Java und C sehen ähnich aus. Daher ist der Java-mode nur ein 'minor-mode' vom C-Mode. Zwar hat jeder einen eigenen Geschmack wie Code formatiert sein sollte, aber alle sinnvollen Möglichkeiten sind schon in \textsc{Emacs} eingebettet. Mit dem Befehl \commandstyle{M-x c-set-style} wird die Art wie Klammern {} gesetzt werden definiert.
Wenn man auf die Frage `` \commandstyle{Which style?}'' mit  \commandstyle{'?'} antwortet bekommt man folgende Liste:
\begin{verbatim} 
bsd cc-mode ellemtel gnu java k&r linux python stroustrup user whitesmith
\end{verbatim}
Um zu sehen sehen wie die einzelnen 'styles' die Klammern setzen und den Code einrücken nimmt man am besten eine kleinen C/Java 
Code-schnipsel, markiert ihn und wendet den Befehl \commandstyle{M-x indent-region} an.\\
Ferner ist es leicht möglich \textsc{Emacs} zu sagen wie weit Substatements und andere Codeelemente eingerückt werden soll, mit dem Befehl
\commandstyle{M-x c-set-offset} kann die Anzahl der der Leerzeichen für Substatements und andere Codeelemente festgelegt. 
Um die Liste aller Syntaxsymbole zu sehen gibt man wieder \commandstyle{'?'} ein.\\ 


\clearpage
\section{Goodies}\label{section:goodies}
\subsection{'Dired' - Mode}\label{subsection:dired}
In \textsc{Emacs}  ist \texttt{dired} ist ein eingebauter Filemanager. 
\comtablehead{Dired - mode \texttt{C-x D} oder \texttt{M-x dired} }
    \texttt{f} & Datei öffnen (anlegen falls noch nicht da)\\   
	\commandstyle{dired-find-file}&\\
    \hline
    \texttt{R} & Datei umbenennen \\    
    \commandstyle{dired-do-rename}&\\
	\hline
    \texttt{M} & Zugriffsberechtigungen ändern  \\
    \commandstyle{dired-do-chmod}&\\
	\hline
    \texttt{Q} & Ersetzen in markierten dateien \\
    \commandstyle{dired-do-query-replace}&\\
    \hline
    \texttt{G} & Gruppe ändern  \\
    \commandstyle{dired-do-chgrp}&\\
	\hline
    \texttt{g} & Verzeichnisansicht aktualisieren \\
  	\commandstyle{dired-revert-buffer}&\\
	\hline
    \texttt{d} & Datei zum löschen markieren (wird noch nicht gelöscht) \\
   	\commandstyle{dired-flag-file-deletion}&\\
	\hline
    \texttt{x} & markierte Dateien löschen \\
	\commandstyle{dired-flag-file-delete}&\\
    \hline
    \texttt{D} & Datei direkt löschen \\
	\commandstyle{dired-do-delete}&\\
    \hline
    \texttt{+} & Verzeichnis anlegen \\
	\commandstyle{dired-create-directory}&\\
	\hline
    \texttt{=} & Diff zwischen markierter und ausgewählter Datei  \\
    \commandstyle{dired-diff}&\\
	\hline
    \texttt{\~} / \texttt{C-u ~}  & Backups zum löschen markieren  / Markierung entfernen \\
    \commandstyle{dired-flag-backup-files}&\\
    \hline
    \texttt{\#} / \texttt{C-u \#} & Autosaves zum löschen markieren / Markierung entfernen \\
    \commandstyle{dired-flag-autosave-files}&\\
	\hline
    \texttt{!} & Shellbefehl auf Datei anwenden \\
    \commandstyle{dired-do-shell-command}&\\
	\hline
    \texttt{q} & 'Dired' mode beenden \\
    \hline
\comtablebottom

\subsection{'Shell' - Mode}\label{subsection:shell}
\textsc{Emacs} kann Shell Befehle direkt ausführen.
\comtablehead{Shell - mode \texttt{M-x shell}  }
    \texttt{C-c C-c} & Subprozess abschiessen\\   
	\commandstyle{comint-interrupt-subjob}&\\
    \hline
    \texttt{C-c C-d} & EOF senden \\   
	\commandstyle{comint-send-eof}&\\
    \hline
\comtablebottom


\clearpage
\section{Anhang}
\subsection{.emacs}\label{subsection:emacs-file}
Hier ist meine .emacs Datei mit eigenen 'Hotkey'-Definitionen:
\begin{verbatim}
(custom-set-variables
  ;; custom-set-variables was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 '(case-fold-search t)
 '(column-number-mode t)
 '(compilation-scroll-output t)
 '(current-language-environment "German")
 '(default-input-method "german-postfix")
 '(display-time-24hr-format t)
 '(display-time-day-and-date t t)
 '(global-font-lock-mode t nil (font-lock))
 '(jde-auto-parse-buffer-interval 80)
 '(jde-compile-option-deprecation t)
 '(jde-compile-option-directory "../classes")
 '(jde-compiler (quote ("javac" "")))
 '(jde-complete-function (quote jde-complete-in-line))
 '(jde-db-initial-step-p nil)
 '(jde-db-query-missing-source-files nil)
 '(jde-enable-abbrev-mode nil)
 '(jde-expand-classpath-p nil)
 '(jde-global-classpath (quote ("." "./lib" "./classes" "../classes" "../lib" "/files/classes")))
 '(jde-import-collapse-imports-threshold 3)
 '(jde-javadoc-gen-destination-directory "../doc")
 '(jde-read-compile-args nil)
 '(jde-run-working-directory "../classes")
 '(lpr-add-switches t)
 '(lpr-page-header-program "pr")
 '(lpr-page-header-switches (quote ("--number-lines=3" "-F")))
 '(mouse-wheel-mode t nil (mwheel))
 '(normal-erase-is-backspace t)
 '(ps-font-size (quote (8 . 10)))
 '(ps-footer-lines 1)
 '(ps-header-lines 2)
 '(ps-header-offset 14.346456692913385)
 '(ps-line-number t)
 '(ps-lpr-switches nil)
 '(ps-paper-type (quote a4))
 '(ps-print-footer-frame nil)
 '(ps-print-only-one-header nil)
 '(ps-printer-name nil)
 '(ps-right-header (quote ("/pagenumberstring load" ps-time-stamp-locale-default ps-time-stamp-hh:mm:ss)))
 '(show-paren-mode t nil (paren))
 '(speedbar-sort-tags nil)
 '(speedbar-use-images t)
 '(tab-always-indent t)
 '(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 88)))
 '(tab-width 4)
 '(transient-mark-mode t)
 '(words-include-escapes t)
 '(x-select-enable-clipboard t))
(custom-set-faces
  ;; custom-set-faces was added by Custom -- don't edit or cut/paste it!
  ;; Your init file should contain only one such instance.
 '(default ((t (:stipple nil :background "black" :foreground "white" :inverse-video nil :box nil :strike-through nil :overline nil :underline nil :slant normal :weight normal :height 95 :width condensed :family "misc-fixed"))))
 '(cursor ((t (:background "#AAAAAA"))))
 '(custom-button-face ((((type x w32 mac) (class color)) (:background "slategray" :foreground "black" :box (:line-width 2 :style released-button)))))
 '(custom-changed-face ((((class color)) (:background "steelblue" :foreground "white"))))
 '(custom-rogue-face ((((class color)) (:background "black" :foreground "pink"))))
 '(font-lock-comment-face ((((class color) (background dark)) (:foreground "olivedrab3"))))
 '(font-lock-doc-face ((t (:inherit font-lock-comment-face))))
 '(header-line ((((class color grayscale) (background light)) (:inherit mode-line :foreground "grey20" :box nil))))
 '(menu ((((type x-toolkit)) (:background "slategray" :foreground "black"))))
 '(mode-line ((((type x w32 mac) (class color)) (:background "slategrey" :foreground "black" :box (:line-width -1 :style released-button)))))
 '(region ((((class color) (background dark)) (:background "dodgerblue"))))
 '(scroll-bar ((t (:background "slategray" :foreground "black"))))
 '(show-paren-match-face ((((class color)) (:background "darkturquoise"))))
 '(widget-field-face ((((class grayscale color) (background light)) (:background "white")))))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; My personal Customization modified 5.9.2004
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq load-path (append load-path (list "~/.emacs.d/moremodes/" )))  ;; local mod path
;(global-set-key "\C-i" 'self-insert-command)  ;; take control over the tabs myself
(setq make-backup-files nil)                  ;; no backups
(which-func-mode t)  
(fset 'yes-or-no-p 'y-or-n-p)
(set-default-font "-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-15")
(put 'upcase-region 'disabled nil)            ;; n00b-saftey disabled
(put 'downcase-region 'disabled nil)
(put 'narrow-to-region 'disabled nil)
(tool-bar-mode 0) ;; turn off the tool-bar

;;
;; Hotkeys 
;;
(global-set-key "\C-x\C-d" 'dired) ;; override list-directory
(global-set-key [f1] 'goto-line)                   
(global-set-key [f2] 'kill-rectangle)         
(global-set-key [f3] 'yank-rectangle)         
(global-set-key [f4] 'query-replace-regexp)   
(global-set-key [f5] 'revert-buffer)          
(global-set-key [f6] 'indent-region)          
(global-set-key [f7] 'comment-region)
(global-set-key [f8] 'uncomment-region)	

;; got a Sun® Type 6 Keyboard - more keys to bind!!
(global-set-key [f19] 'repeat-complex-command) 
(global-set-key [f21] 'undo) 
(global-set-key [f23] 'kill-ring-save) 
(global-set-key [f25] 'yank-pop) 
(global-set-key [f27] 'kill-region)	

;;;
;; MATLAB
;;;
(autoload 'matlab-mode "matlab" "Enter MATLAB mode." t)
(setq auto-mode-alist (cons '("\\.m\\'" . matlab-mode) auto-mode-alist))
(autoload 'matlab-shell "matlab" "!!! MATLAB ® rules !!!" t)
(setq matlab-indent-function t)	        ; if you want function bodies indented
(setq matlab-verify-on-save-flag nil)	; turn off auto-verify on save
(defun my-matlab-mode-hook ()
  (setq fill-column 90))				; where auto-fill should wrap
(add-hook 'matlab-mode-hook 'my-matlab-mode-hook)
(defun my-matlab-shell-mode-hook ()
  '())
(add-hook 'matlab-shell-mode-hook 'my-matlab-shell-mode-hook)
(setq matlab-shell-command-switches '("-nodesktop"))

;;;
;; PHP
;;;
(require 'php-mode)
(add-hook 'php-mode-user-hook 'turn-on-font-lock)
(add-hook 'php-mode-user-hook
'(lambda () (define-abbrev php-mode-abbrev-table "ex" "extends")))

;;;
;; Maple
;;;
(autoload 'maple-mode "maple" "Enter MAPLE mode." t)
   (setq auto-mode-alist (cons '("\\.mws\\'" . maple-mode) auto-mode-alist))

;;;
;; C/C++ & Java Mode
;;;
;;(c-set-style "k&r")							;; my favourite code-look
(setq c-basic-offset 4
	indent-tabs-mode nil)
(c-set-offset 'case-label '++)				    ;; + is c-basic-offset
(c-set-offset 'substatement '++)
(c-set-offset 'statement-cont '++) 
(c-set-offset 'func-decl-cont '++)
(c-set-offset 'arglist-cont-nonempty '++)
(c-set-offset 'inher-intro '++)
(c-set-offset 'inher-cont '++)
(c-set-offset 'arglist-intro '++)
(c-set-offset 'topmost-intro-cont '++)

\end{verbatim} 
\begin{thebibliography}{alpha}
  \bibitem{SEDAWK} Dale Dougherty \& Arnold Robbins -  \textit{sed \& awk} - O'Reilly \& Associates 1997
  \bibitem{REGEXP} Jeffrey E.F. Friedel -  \textit{Reguläre Ausdrücke} - O'Reilly \& Associates 1998
  \bibitem{EMACS} Richard M. Stallman - \textit{Gnu Emacs Manual} - GNU Press 2002
  \bibitem{EMACSMAN} http://www.gnu.org/software/emacs/ 
  \bibitem{DOOMGARAGE} http://www.ruschival.de/stuff/
\end{thebibliography}
\end{document}