Damit ich nicht immer die selben Fragen beantworten muß, sind im folgenden die beiden Dateien zu finden, mit denen ich den EMACS konfiguriere.
Diese Datei ist einfach ein LISP-Programm, das beim Starten
ausgeführt wird.
Als Kommentar habe ich dort einige grundlegenden Informationen zum
EMACS untergebracht.
In dieser Konfigurationsdatei wiederum steht ein Aufruf, eine weitere Datei mit abbreviations zu lesen: .abbrev.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -*- Emacs-Lisp -*-;;;;;; ;;; ;;; Time-stamp: "13.10.05 14:59 .emacs klaus@wachtler.de" ;;; ;;; Beispielkonfiguration für den EMACS von ;;; ;;; Klaus Wachtler ;;; Breidingstr. 17 ;;; 29614 Soltau ;;; Tel. 05191/70 2 71, 0171/45 53 039 ;;; Fax: 05191/70 2 72 ;;; email: Klaus@Wachtler.de ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ///| |||\ || |||| // ;;; ////| |||\\ || |||| // ;;; ////|| ||||\\ || |||| // ;;; //// || |||| \\ || |||| // ;;; ////==|| |||| \\|| ||||// ;;; //// || |||| \\| |||// ;;; //// || |||| \| ||// ;;; |// ;;; |||| /| // // ///| ||||=====// ////======= ;;; |||| /|| // // ////| |||| // //// ;;; |||| //|| // // ////|| |||| // //// ;;; |||| // || // // //// || |||| // //// ;;; ||||// ||// // ////==|| ||||=(( ((((======= ;;; |||// |// // //// || |||| \\ \\\\ ;;; |||/ |/ // //// || |||| \\ \\\\======= ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; Aenderungen: ;;; ;;; 05.04.1996 kw Ergaenzungen zu c-mode-common (C und C++), Korrektur ;;; fuer diverse abbreviations ;;; ;;; 11.04.1996 kw bunte Syntax auch fuer C++ ;;; ;;; 15.04.1996 kw Korrektur fuer LaTeX-em ;;; ;;; 07.06.1997 kw standard-display-european eingeschaltet ;;; ;;; 01.07.1997 kw Funktion pps definiert (gibt aktuellen Puffer mit ;;; angehaengtem .ps als buntes PS aus) ;;; ;;; 07.10.1997 kw Ergaenzungen zu fortran-mode ;;; ;;; 26.11.1997 kw Ergaenzungen zu pascal-mode ;;; ;;; 17.05.1998 kw C-7 fuer geschweifte Klammern; C-8 fuer eckige ;;; ;;; 19.05.1998 kw C-cC-i fuer indent-region ;;; ;;; 18.08.1997 kw _ soll Teil eines C-Namens sein ;;; ;;; 28.10.1998 kw je ein neues Fenster beim Aufruf über ;;; gnuclient/gnuclientw mit (setq gnuserv-frame nil) ;;; ;;; 16.11.1998 kw Etwas mehr kommentiert (für die FH-Studenten) ;;; ;;; 19.01.1999 kw copy-char-form-previous-line und ;;; copy-word-form-previous-line eingefügt (kopieren ein ;;; Zeichen/Wort aus der vorhergehenden Zeile) ;;; ;;; 14.03.1999 kw automatische Erkennung, ob NT. ;;; Nur dann wird gnuclient geladen. ;;; ;;; 07.06.2000 kw C-c M-% an query-replace-regexp gebunden, perl mode ;;; ;;; 17.08.2000 kw ishl.el ;;; ;;; 21.11.2001 kw Tabs und schließende Leerzeichen anzeigen ;;; ;;; 24.11.2001 kw Doku um Prefix und narrow erweitert ;;; ;;; 03.12.2001 kw Korrektur von for- und class-Abkürzungen aufgepeppt ;;; ;;; 10.12.2001 kw Korrektur class-Abkürzung (generiert clone(), ;;; ostream &operator<<(), und nimmt Rücksicht ;;; auf static-Elemente) ;;; ;;; 28.12.2001 kw Noch ein paar Spielereien von http://www.dotemacs.de/ ;;; und http://www.dotfiles.com geklaut ;;; (z.B. mouse-avoidance-mode) ;;; ;;; 23.01.2002 kw Summenberechnen eines markierten Rechtecks mit rect-sum, ;;; Tastenbelegung kommentiert ;;; ;;; 18.02.2002 kw Die gesetzten Tastenbelegungen werden in *Messages* ;;; ausgegeben; dann kann man schnell mal nachgucken. ;;; ;;; 01.05.2002 kw Editieren über ftp ;;; ;;; 29.06.2002 kw (toggle-uniquify-buffer-names) ;;; ;;; 10.07.2002 kw kleinere Ergänzungen, Korrekturen, getestet mit ;;; EMACS 21.2 unter Windows 2000. ;;; ;;; 13.01.2005 kw Passive mode für ftp-Verbindungen ;;; ;;; ;;; nachtragen: ;;; http://ls6-www.cs.uni-dortmund.de/~grossjoh/emacs/tutorials.html ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; ; ***** * * *** *** *** ; * ** ** * * * * * * ; * * ** * * * * * ; **** * * ***** * *** ***** ; * * * * * * * ; * * * * * * * * * ; ***** * * * * *** *** ; ; ; *** **** *** *** * * * * * * **** *** ; * * * * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * ; * **** ***** *** ***** ** * * **** *** ; * * * * * * * * * * * * * * * ; * * * * * * * * * * * * * * * * * * ; *** * * * * *** * * * * ***** * * *** ; ; ; ; Der EMACS ist im wesentlichen ein Editor, um Texte zu editieren. ; Dazu sind etliche Kommandos definiert, um beispielsweise Dateien zu laden, ; abzuspeichern, Textstellen zu suchen/ersetzen, etc. ; ; Der Emacs unterliegt der GPL (General Public License) der FSF (Free ; Software Foundation). Das heißt, daß er ; a) im Quelltext zur Verfügung steht ; b) nichts kostet ; c) frei verwendet und weitergegeben werden kann und soll (solange die ; GPL eingehalten wird) ; ; Der EMACS kann auf allen gängigen Systemen (MS-DOS, Windows, NT, 95, ; Linux, alle Unix, VMS, Mac, Atari TOS/GEM) installiert werden. ; ; Je nach Umgebung kann er sowohl auf einfachen Terminals als auch in ; eine Fensteroberfläche eingebunden verwendet werden. ; ; Unter einer Fensteroberfläche existiert eine Menüleiste, über die man ; die wichtigtsen Befehle erreicht. Für erste Übungen kann man damit ; leben. ; ; Am effektivsten wird der EMACS aber über Tastaturkommandos gesteuert. ; Während die üblichen (druckbaren) Zeichen meistens als einzugebender ; Text interpretiert wird, bestehen die EMACS-Kommandos weitgehend aus ; Tastenkombinationen mit der Control-Taste und der Meta-Taste. ; ; Da diese Kommandos eine gewisse Gewöhnung benötigen, ist der Einstieg ; etwas zäh. Dafür muß man diese Kommandos nur einmal lernen, egal auf ; welchem System und unter welcher Oberfläche man damit ; arbeitet. Zumindest wenn man im Lauf seiner Karriere mehrmals die ; Betriebssystemumgebung wechselt, spart man sich sehr viel ; Eingewöhnungszeit. Zudem ist der EMACS verblüffend leistungsfähig, so ; daß man oft mehrere andere Programme damit ersetzen kann. ; ; Da der EMACS sehr weitgehend konfigurierbar ist, kann man auch ; spezielle Anpassungen so bauen, daß sie über alle Rechnergrenzen ; hinweg funktionieren. ; ; Die Control-Taste ist das, was auf der deutschen Tastatur mit "Strg" ; beschriftet ist. ; In der gesamten EMACS-Dokumentation werden Tastenkombinationen mit der ; Control-Taste mit den Zeichen "C-" vor dem zugehörigen Buchstaben ; bezeichnet. Beispiel: ; C-x C-f (öffnet eine Datei zum Editieren) ; Das ist so einzugeben: während die [Strg]-Taste gedrückt ist, muß man ; die [x]-Taste drücken, und dann (immer noch bei gedrückter ; [Strg]-Taste) die [f]-Taste. In diesem Beispiel erscheint dann in der ; untersten Zeile die Aufforderung, den gewünschten Dateinamen ; einzugeben. ; ; Man sollte im Auge behalten, daß bei einer Tastenfolge bei jeder ; einzelnen Taste vorgegeben ist, ob sie mit oder ohne [Ctrl] gedrückt ; werden muß. Deshalb sind C-x C-s (Speichern des aktuellen buffer) und ; C-x s (Speichern aller buffer) zwei interschiedliche Kommandos! ; ; Die Meta-Taste (in der Dokumentation mit "M-" bezeichnet) dagegen ; existiert als solche nicht auf einem einfachen ; Terminal; je nach verwendetem System ist dafür etwas anderes ; einzugeben. Auf fast jeder aktuellen Tastatur gibt es eine ; [Esc]-Taste. Anstatt der fiktiven Meta-Taste tippt man vor dem ; jeweilgen Zeichen dann einmal die [Esc]-Taste. Bei vielen Systemen ist ; zusätzlich die [Alt]-Taste als Meta-Taste konfiguriert. ; Beispielsweise kann man mit M-% das "Suchen und Ersetzen" starten. ; Dazu muß man dann entweder ; a) die [Esc]-Taste drücken, dann "%" (also [Shift]+[5]), oder ; b) -wenn es so eingerichtet ist- die [Alt]-Taste drücken, und gedrückt ; lassen, dann die "%"-Taste (also [Shift]+[5]), dann die [Alt]-Taste ; loslassen. ; ; ; ; buffer, window, frame ; ##################### ; ; ; Wenn man mehrere Dateien gleichzeitig editieren will, muß man dazu den ; EMACS nur einmal auf dem Rechner laufen lassen. Jede Dateikopie, die ; im Speicher editiert wird, ist ein "buffer". ; ; Die Anzahl der Buffer ist dabei unabhängig von der Anzahl der ; sichtbaren Fenster. Das kommt daher, daß der EMACS ursprünglich für ; die Bedienung an Terminals gedacht war, wo es Fenster im Sinne von ; Windows/X-Windows nicht gibt. ; An einem Terminal hat man meistens dann nur einen buffer im Blick, ; obwohl der EMACS eventuell mehrere buffer geöffnet hat. Mit C-x b kann ; man dann von einem buffer zu einem anderen umschalten. ; Der Bildschirm sieht dann etwa so aus: ; ; +--------------------------------------------------------------+ ; |#include| ; |_ | ; |int main() | ; |{ | ; | int i; | ; | | ; | for( i=0; i<10; i++ ) printf( "i ist %d\n", i ); | ; | | ; | return 0; | ; |} | ; | | ; | | ; | | ; | | ; | | ; | | ; | | ; | | ; | | ; | | ; | | ; | | ; |-\** t.cpp 10:04 (C++ Abbrev)--L2--C1--20%-----------| ; | | ; +--------------------------------------------------------------+ ; ; Der größte Bereich ist der zu editierende Text. ; ; Die vorletzte Zeile ist eine Statuszeile, in der einige Informationen ; ausgegeben werden: ; Die beiden Sternchen hinter dem "-\" zeigen an, daß der aktuelle ; buffer geändert wurde, und die Änderungen noch nicht in die zugehörige ; Datei zurückgeschrieben wurden (also der buffer noch nicht gespeichert ; ist). ; Dahinter steht der Name des buffers, das ist meistens der Name der ; entsprechenden Datei. Werden mehrere Dateien mit unterschiedlichen ; Pfaden, aber gleichen Namen geöffnet, dann werden ab der zweiten ; solchen Datei an den buffer-Namen noch "<2>", "<3>" etc. angehängt. ; Die restliche Statuszeile ist teilweise abhängig davon, wie der EMACS ; konfiguriert ist: Die Uhrzeit, dann in Klammern der aktuelle ; Hauptmodus (hier C++), evtl. gefolgt von Untermodi (hier Abbrev), dann ; Zeilen- und Spaltennummer, und eine prozentuale Angabe der Position im ; Text. ; ; Für jeden Modus können unabhängig von anderen Modi bestimmte ; Einstellungen vorgenommen werden. Beispielsweise unterscheiden sich ; der "fortran-mode" und der "c-mode" in der Syntax, nach der ; Einrückungen vorgenommen werden. Jetzt kann gleichzeitig ein buffer ; mit einem Fortran-Quelltext geöffnet sein, und ein anderer mit einem ; C-Quelltext. Solange man den einen buffer bearbeitet, verhält sich ; der EMACS anders, als nach dem Wechsel zu dem buffer mit dem ; C-Quelltext. ; ; Die letzte Zeile des Bildschirms, also die Zeile unter der ; Statuszeile, ist der sogenannte "mini buffer", der für ; Kommandoeingaben verwendet wird. ; Um ein Kommando aufzurufen, das nicht direkt über eine ; Tastenkombination erreichbar ist, muß man den Kommandonamen kennen. ; Beispelsweise kann man mit Kommandos wie "c-mode", "c++-mode", ; "text-mode" etc. zwischen den verschiedenen Hauptmodi wechseln. ; ; Ist man im mini buffer, hat man folgende Kommandos: ; [Tab]-Taste: vervollständigen, soweit möglich ; [ ]-Taste: nur ein Wort vervollständigen ; [Ret]-Taste: vervollständigen, und ausführen ; [?]-Taste: Möglichkeiten (zum Vervollständigen) anzeigen ; M-p: letzte Eingabe holen ; M-n: nächste Eingabe holen ; (und weitere). ; ; Um ein solches Kommando einzugeben, muß man vorher M-x drücken. Um ; also von irgendeinem Modus in den Textmodus zu wechseln, tippt man: ; [Esc]-Taste [x]-Taste [t]-Taste [e]-Taste [x]-Taste [t]-Taste ; [-]-Taste [m]-Taste [o]-Taste [d]-Taste [e]-Taste [Return]-Taste ; , oder kürzer geschrieben: ; M-x text-mode ; ; Soviel zum Umgang mit einem Fenster. ; ; Leider werden die Bezeichnungen beim Umgang mit mehreren Fenstern ; etwas verwirrend. Da es den EMACS schon länger ; gibt, als die fensterorientierten Benutzeroberflächen, hatte damals ; niemand ein schlechtes Gewissen dabei, den Begriff "window" für etwas ; zu verwenden, was kein Fenster im Sinne von MS-Windows oder X-Windows ; ist. Vielmehr versteht der EMACS unter "window" einen Teil seines ; Bildschirms, also auf einem Terminal einen Teil der ; Bildschirmfläche. Verwendet man den EMACS auf einem System mit ; grafischer Benutzeroberfläche, dann entspricht der Terminalbildschirm ; einem Fenster der Benutzeroberfläche, und das kann nun mal im Sinne ; von EMACS in mehrere windows geteilt sein. ; ; Der gesamte Bildschirm eines Terminals, beziehungsweise ein Fenster im ; Sinne der Benutzeroberfläche, heißt für den EMACS "frame". ; ; ; Mit dem Kommando C-x 2 kann man den aktuellen "frame" in zwei (EMACS-) ; windows unterteilen. Auf einem Terminal könnte das so aussehen: ; ; +--------------------------------------------------------------+ ; |#include | ; |_ | ; |int main() | ; |{ | ; | int i; | ; | | ; | for( i=0; i<10; i++ ) printf( "i ist %d\n", i ); | ; | | ; | return 0; | ; |} | ; | | ; |-\** t.cpp 10:04 (C++ Abbrev)--L2--C1--20%-----------| ; |#include | ; |_ | ; |int main() | ; |{ | ; | int i; | ; | | ; | for( i=0; i<10; i++ ) printf( "i ist %d\n", i ); | ; | | ; | return 0; | ; |} | ; | | ; |-\** t.cpp 10:04 (C++ Abbrev)--L2--C1--20%-----------| ; | | ; +--------------------------------------------------------------+ ; ; Dadurch hat man zwei Ansichten auf ein und denselben buffer. Editiert ; man in einem der beiden (EMACS-) Fenster, dann wirkt sich das auch auf ; den Inhalt des anderen aus. ; Mit C-x o kann man zwischen den beiden (EMACS-) Fenstern wechseln, so ; daß man beispielsweise zwei Abschnitte einer Datei leicht im Wechsel ; bearbeiten kann. Je nach Bedarf kann man auch zwei verschiedene ; Dateien in die (EMACS-) Fenster laden, und so beim Editieren schnell ; zwischen den Dateien (besser gesagt: deren buffer) springen. ; (Unter einer grafischen Benutzeroberfläche kann man zum Wechseln ; des aktiven window auch einfach in das gewünschte klicken; dann ; wird dort der Cursor positioniert.) ; ; Mit C-x 1 kann man das aktuelle (EMACAS-) window zum einzigen in ; diesem frame machen (also auf maximale Größe bringen). ; ; Ein frame kann also einen oder mehrere (EMACS-) Fenster ; beinhalten. Zudem kann unter einer grafischen Benutzeroberfläche ein ; laufender EMACS auch beliebig viele frames (also Fenster im Sinne der ; Benutzeroberfläche) öffnen, in denen jeweils eines oder mehrere ; (EMACS-) Fenster zu sehen sind. In den (EMACS-) Fenstern können nun ; lauter unterschiedliche Datei-buffer erscheinen, oder solche buffer ; können auch mehrfach sichtbar sein. ; ; Soweit (EMACS-) Fenster und frames (Fenster im Sinne der Oberfläche) ; ähnliche Funktionen haben, sind auch die Kommandos ähnlich. ; (Emacs-) Fenster-Befehle lauten immer "C-x irgendwas", während die ; entsprechenden Befehle für frames "C-x 5 irgendwas" lauten. ; Beispiel: ; C-x 2 teilt das aktuelle (EMACS-) Fenster in zwei auf, wobei ; beide anfangs den gleichen buffer an derselben Stelle ; darstellen. ; C-x 5 2 öffnet ein neues frame, wobei das alte und das neue ; frame anfangs den gleichen buffer an derselben Stelle ; darstellen. ; ; Mit C-x o kann man zwischen den (Emacs-) Fenstern eines frames ; springen, mit C-x 5 o zwischen den frames. ; ; Mit C-x 0 kann man ein (EMACS-) Fenster schließen; der freigewordene ; Bildschirmbereich wird von dem/den anderen Fenster(n) belegt. ; C-x 5 0 schließt ein frame. ; ; ; Im folgenden Beispiel sind zwei frames offen. Der hintere frame ; (rechts unten, teilweise verdeckt) zeigt den buffer t.cpp; der Cursor ; steht hier gerade in Zeile 8 und Spalte 1. ; Das vordere frame dagegen ist in zwei (EMACS-) Fenster aufgeteilt. Das ; untere stellt ebenfalls den buffer t.cpp darf, steht aber gerade an ; einer anderen Stelle. Das obere Fenster des vorderen frames zeigt ; einen anderen buffer, nämlich test.txt: ; ; +--------------------------------------------------------------+ ; | * test.txt_________________________________________________#X| ; | Buffers Files Tools Edit Search Help | ; +--------------------------------------------------------------+ ; |Wuff, wuff, meine Name ist Rex! |^| ; |Wuff, wuff, meine Name ist Rex! | | ; |Wuff, wuff, meine Name ist Rex! | | ; |Wuff, wuff, meine Name ist Rex! | | ; |Wuff, wuff, meine Name ist Rex!_ | |-----------+ ; | | |_________#X| ; | | | | ; | | |-----------+ ; | |-| |^| ; | | | | | ; | |v| | | ; |-\** test.txt 10:04 (Text Fill)---L5--32--100%--------|-| | | ; |#include |^| | | ; |_ | | | | ; |int main() | | | | ; |{ | | | | ; | int i; | | | | ; | | | | | ; | for( i=0; i<10; i++ ) printf( "i ist %d\n", i ); | | | | ; | | | | | ; | return 0; |-| | | ; |} | | | | ; | |v| | | ; |-\** t.cpp 10:04 (C++ Abbrev)--L2--C1--20%---------|-| | | ; | | | | | ; +--------------------------------------------------------------+ | | ; | | | ; | |v| ; |-\** t.cpp 10:04 (C++ Abbrev)--L8--C1--20%---------|-| ; | | | ; +--------------------------------------------------------------+ ; ; Bewaffnet mit diesem Grundwissen sollte man die grundlegenden ; Kommandos auf der "EMACS Reference card" verwenden können. ; Diese ist hoffentlich bei jeder EMACS-Installation als ; Postscript-Datei (refcard.ps) mit dabei. ; ; ; Selektieren ; ########### ; ; Etwas gewöhnungsbedürftig ist das Markieren (Selektieren) von Text. ; Dazu geht man zum einen Ende des zu markierenden Bereichs. Dort drückt ; man C-Leertaste. Dann geht man mit dem Cursor an das andere Ende des ; Bereichs. Der Cursor ist immer ein Ende des selektierten ; Bereichs. ; Alternativ kann man je nach Benutzeroberfläche auch mit der Maus ; markieren, indem man die linke Taste gedrückt hält. Oder man klickt ; mit der linken Maustaste an das eine Ende des zu markierenden ; Bereichs, und mit der rechten an das andere Ende. ; Mit einem Klick mit der mittleren Maustaste (falls vorhanden) kann man ; den markierten Bereich an eine beliebigen Stelle kopieren. ; ; Die Stelle im Text, an der gerade eine Eingabe eingefügt wird (also ; üblicherweise "Cursor" genannt) heißt beim EMACS "point". ; Die Stelle, die man mit C-space markiert hat, heißt "mark". ; Der markierte Bereich (die "region") erstreckt sich also von mark ; zum point. ; ; ; Makros ; ###### ; ; Man kann mit ; C-x ( ; eine Makroaufzeichnung starten. Dabei wird alles in einem Makro ; gemerkt, bis man ; C-x ) ; tippt. Dieses Makro kann dann jederzeit mit ; C-x e ; ausgeführt werden. ; ; An ein bereits definiertes Makro kann man auch noch etwas anhängen mit ; C-u C-x ( ; Dadurch wird das bereits definierte Makro ausgeführt, und jede weitere ; Eingabe bis zum nächsten C-x ) aufgezeichnet und angehängt. ; ; Ganz praktisch ist gelegentlich das Kommando ; M-x apply-macro-to-region-lines ; Damit wird ein aufgezeichnetes Makro auf jede Zeile des gerade ; markierten Bereichs angewandt. ; ; ; Argumente: ; ########## ; ; Manche Kommandos benötigen ein Argument. Das ist eine ganze Zahl, die ; man mit M- beziehungsweise nach einem [Esc], und vor dem eigentlichen ; Kommando eingeben kann. ; ; Die meisten Kommandos benötigen kein Argument, und verwenden ein ; trotzdem eingegebenes Argument als Wiederholungsfaktor. ; Beispielsweise kann man mit der Tastenfolge ; M-1 2 # ; zwölfmal das Zeichen "#" einfügen. ; M-2 5 C-x e ; führt das zuletzt aufgezeichnete Makro 25 mal aus. ; ; Dann gibt es weiterhin ein "prefix", das kein Argument mit einem ; konkreten Wert ist, aber trotzdem existieren kann. ; Dieses Präfix kann man durch Drücken von C-u vor dem eigentlichen ; Kommando eingeben. Manche Kommandos verhalten sich dann daraufhin ; anders; beispielsweise kann man in C-Programmen mit C-c C-c einen ; markierten BEreich auskommentieren, dagegegn mit C-u C-c C-c die ; Kommentarzeichen von einem auskommentierten Bereich wieder ; entfernen. ; ; ; Narrow, widen ; ############# ; ; Man kann bei Bedarf die Sichtbarkeit aller Aktionen auf einen Teil ; eines buffers begrenzen. ; Dann werden alle Operationen wie Suchen, Ersetzen, jedes Umformatieren ; etc. nur in diesem begrenzten Teil stattfinden. ; Den buffer derart zu begrenzen heißt "narrow" (narrow-to-region, C-x n n, ; oder narrow-to-page C-x n p, oder narrow-to-defun C-x n d), ; ; Das Erweitern zurück auf den gesamten buffer heißt "widen" (widen, ; C-x n w). ; ; Bei narrow-to-region wird der aktuell als "region" markierte Teil als ; verbleibender Bereich verwendet, bei narrow-to-page der aktuelle ; Inhalt des Bildschirmfensters (meist ist dieses Kommando aber ; inaktiv). Bei narrow-to-defun ist es vom aktuellen Modus abhängig, ; welcher Bereich verwendet wird. Im lisp-mode ist es die umgebende ; Funktionsdefinition, in C oder C++ dagegen der äußerste umgebende ; Block, als der Rumpf der aktuellen Funktion oder der aktuellen Klasse, ; je nachdem wo der Cursor (in EMACS "point" genannt) gerade steht. ; ; ; Die wichtigsten Kommandos auf einen Blick ; ######################################### ; ; Die folgende Tabelle ist i.w. ein Auszug aus refcard.ps. ; ; -------------+------------------------------------------------------------ ; | ; C-z | EMACS in den Hintergrund bringen/Icon ; | ; C-x C-c | beenden (wenn noch Puffer offen sind, wird man gefragt, ; | ob man sie nicht speichern möchte) ; | ; C-x C-f | Datei öffnen (in neuen buffer einlesen) ; | ; C-x C-s | buffer in der zugehörigen Datei speichern ; C-x s | alle buffer speichern ; C-x C-w | buffer unter neuem Namen speichern (save as...) ; | ; C-x i | am Cursor eine andere Datei einfügen ; | ; C-x 0 | das aktuelle (EMACS-) window verschwindet, andere ; | belegen den Platz im frame ; C-x 1 | das aktuelle (EMACS-) window wird zum einzigen im frame, ; | und erhält den ganzen Platz im frame. ; C-x o | zu einem anderen (EMACS-) window im gleichen frame springen ; | ; C-_ | Undo (mehrfach möglich, geht ziemlich weit zurück) ; | ; C-g | ein begonnenes Kommando abbrechen ; | ; C-s | inkrementelles Suchen vorwärts ; C-r | dto. rückwärts ; | ; C-M-s | Suche nach regulärem Ausdruck vorwärts ; C-M-r | dto. rückwärts ; M-p | (bei der Eingabe des Suchstrings:) den letzten String nehmen ; M-n | dto. den nächsten ; | ; C-b | ein Zeichen rückwärts/nach links (backward) ; C-f | ein Zeichen vorwärts/nach rechts (forward) ; M-b | ein Wort rückwärts/nach links ; M-f | ein Wort vorwärts/nach rechts ; C-M-b | eine Zeile rückwärts/nach oben ; C-M-f | eine Zeile vorwärts/nach unten ; | ; C-a | zum Start der Zeile ; C-e | zum Ende der Zeile ; M-a | zum Anfang des Satzes/Ausdrucks ; M-e | zum Ende des Satzes/Ausdrucks ; C-M-a | zum Anfang des sexp (syntactical expression) ; C-M-e | zum Ende des sexp (syntactical expression) ; M-< | zum Anfang des buffer ; M-> | zum Ende des buffer ; C-v | Seite vorwärts ; M-v | Seite rückwärts ; C-l | aktuelle Zeile mittig in Fenster, Bildschirm komplett ; | neu aufbauen ; | ; C-d | ein Zeichen löschen ; M-d | Wort löschen ; M-0 C-k | Zeile bis Cursor löschen ; C-k | Zeile ab Cursor löschen ; C-M-k | sexp löschen ; M-k | Satz/Ausdruck löschen ; C-w | markierten Bereich löschen und in Puffer (unter Windows: ; | auch in Clipboard) kopieren ; M-w | markierten Bereich in Puffer (unter Windows: auch in ; | Clipboard) kopieren ; C-y | letzten Inhalt aus dem Puffer wieder am Cursor einfügen ; | ; C-Leertaste | aktuelle Stelle als Blockanfang merken ; | ; C-x C-x | Blockanfang und Cursor tauschen ; | ; M-% | Suchen und ersetzen (wenn man dabei reguläre Ausdrücke ; | verwenden will, muß man tippen: ; | M-x query-replace-regexp ; | Bei jedem Vorkommen des zu ersetzenden Textes hat man ; | folgende Möglichkeiten: ; | Leertaste: Ersetzen, und weitergehen ; | [,]-Taste: Ersetzen, nicht mehr weitergehen ; | [Del]-Taste: Nicht ersetzen, aber weitergehen ; | [!]-Taste: Dieses, und alle weiteren ersetzen ; | [^]-Taste: Das letzte Ersetzen rückgängig machen ; | [Return] : Fertig ; | ; [Tab]-Taste | je nach Modus richtig einrücken ; C-x [Tab] | alle Zeilen im markierten Bereich um (Argument) ; | Spalten nach rechts einrücken (wenn Argument>0) ; | bzw. nach links. ; | ; M-u | Das folgende Wort in Großbuchstaben verwandeln ; M-l | dto. in Kleinbuchstaben ; M-c | Den nächsten Buchstaben groß, Rest des Wortes klein ; C-x u | markierten Bereich in Großbuchstaben ; C-x l | dto. in Kleinbuchstaben ; | ; C-x b | anderen buffer wählen ; C-x C-b | alle buffer in einem (EMACS-) window listen ; | (Auswählen eines buffers mit mittlerer Maustaste) ; C-x k | buffer löschen ; | ; C-t | zwei Zeichen vertauschen (das unter dem Cursor, und ; | das davor). ; | Wenn unter dem Cursor kein Zeichen ist, weil man am ; | Ende der Zeile ist, dann halt die zwei Zeichen vor ; | dem Cursor. ; M-t | Zwei Worte vertauschen ; C-x C-t | Zwei Zeilen vertauschen ; C-M-t | Zwei sexp vertauschen ; | ; C-x r k | (markiertes) Rechteck löschen und merken ; C-x r y | gemerktes Rechteck an Cursor einfügen ; C-x r r | (markiertes) Rechteck in Register kopieren ; | (Nach dem Befehl ist ein Zeichen anzugeben, das ist ; | der Name des Registers) ; C-x r i | Inhalt des Registers einfügen (nach dem Befehl ; | ist wieder das Zeichen des Registers beim Abspeichern ; | anzugeben) ; | NB: In Registern kann man nicht nur Rechtecke, ; | sondern auch andere Dinge speichern (Fenster- ; | konfigurationen, Textausschnitte, Cursorpositionen ; | etc.; siehe Doku). ; C-x r o | Rechteck nach rechts schieben ; C-x r c | Rechteck löschen ; | ; C-x ( | Start einer Makroaufzeichnung ; C-x ) | Ende der Makroaufzeichnung ; C-x e | Makro ausführen ; C-u C-x e | Makro ausführen, und weitere Kommandos aufzeichnen ; | (bis wieder ein C-x ) kommt. ; | Das neue Makro enthält alles aus dem bisherigen, ; | plus das neu aufgezeichnete. ; | ; | Mit ; | M-x name-last-kbd-macro ; | kann man einem Makro einen Namen geben. ; | Mit ; | M-x insert-kbd-macro ; | kann man im aktuellen buffer den LISP-Code zu ; | einem Makro einfügen (z.b., um es dann auszuschneiden ; | und in der Initialisierungsdatei zu hinterlegen). ; | Ein benamstes Makro kann man mit ; | M-x name ; | wieder ausführen. ; | ; ; ; FTP-Adressen ; ############ ; ; Als Dateiname (beispielsweise zum Öffnen einer Datei mit C-x C-f) ; kann man auch eine ftp-Adresse angeben, falls auf dem entsprechenden ; Rechner ein ftp-Server läuft und man eine Zugangsberechtigung hat. ; Wenn ich eben mal in einer HTML-Datei meiner Homepage, die von ; einem Provider gehostet wird, etas ändern will, dann kann ich diese ; Datei direkt vom EMACS aus öffnen: ; C-x C-f /ftp31331@www.wachtler.de:/www.wachtler.de/index.html ; Das Schema einer solchen Datei ist: ; /username@rechnername:/pfad/zur/datei ; Nach einem [Return] wird man nach dem Passwort gefragt, der EMACS holt ; sich die Datei per ftp, und man kann fröhlich darin editieren. ; Bei jedem Abspeichern wird der aktuelle Inhalt dann wieder per ftp ; zurückgeschrieben. ; ; ; Debuggen ; ######## ; ; Mit M-x gdb kann man den gdb aufrufen zum Debuggen eines ; kompilierten Programms. ; Dazu wird ein neues Fenster geöffnet (kein frame!), in dem man die ; gdb-Kommandos eingeben kann (das ist das GUD-Fenster). ; Als Abkürzung kann man im GUD-Fenster einige Kommandos ; mit C-c... eingeben, oder mit C-x C-a... in jedem Fenster. ; Das was nach C-c bzw. nach C-x C-a kommt, ist jeweils gleich: ; ; -------------+------------------------------------------------------------ ; | ; C-c C-l | display last line referred to in another window ; C-x C-a C-l | ; | ; C-c C-s | step (zur nächsten Quelltextzeile gehen, ggf. in ; C-x C-a C-s | einer aufgerufenen Funktion) ; | ; C-c C-n | next (wie step, aber nur in der aktuellen Funktion ; C-x C-a C-n | oder beim Aufrufer) ; | ; C-c C-i | step instruction (einen Maschinenbefehl weitergehen) ; C-x C-a C-i | ; | ; C-c C-r | continue (laufe bis zum nächsten break point, oder ; C-x C-a C-r | Signal, oder Programmende) ; | ; C-c C-d | delete break point on current line ; C-x C-a C-d | ; | ; C-c C-t | set break point on current line ; C-x C-a C-t | ; | ; C-c C-f | finish (run program until selected stack frame ; C-x C-a C-f | returns) ; | ; C-c C-< | up (select next enclosing stack frame) ; C-x C-a C-< | ; | ; C-c C-> | down (select next inner stack frame) ; C-x C-a C-> | ; | ; ; Zudem kann man mit C- (also Ctrl und Leertaste) an der aktuellen ; Stelle einen break point setzen. ; ; ; LISP ; #### ; ; Etwas anspruchsvoller ist es, den EMACS gezielt anzupassen. Da der ; EMACS eigentlich nur ein LISP-Interpreter ist, der mit entsprechenden ; LISP-Programmen erst zum Editor wird, kann man eigene Anpassungen ; vornehmen, indem man LISP-Funktionen schreibt, und diese an passenden ; Stellen aufruft. ; ; Einige kleinere Anpassungen kann man direkt mit EMACS-Kommandos ; vornehmen (z.B. Definition von Makros, oder Ändern der ; Tastaturbelegung). Auf Dauer kommt man aber an einem Minimum ; LISP-Wissen nicht vorbei. Dies beginnt schon bei der ; Initialisierungsdatei, mit der jeder Benutzer sich "seinen" EMACS ; basteln kann. Diese Datei (auf Unix-Systemen .emacs, in der DOS-Welt ; _emacs) ist nichts anderes als LISP-Code. ; Die hier vorliegende Datei ist in Beispiel für eine solche ; Initialisierungsdatei. ; ; ; ; Weitere Unterlagen ; ################## ; ; ; a) GNU Emacs Manual (ca. 200 Seiten, über ftp: emacs-manual-6_0_dvi.gz) ; b) Einführung in EMACS LISP (ca. 250 Seiten, emacs-lisp-intro_1_05_tar.gz) ; c) EMACS LISP Referenz (ca. 900 Seiten, elisp-manual-20-2_5_tar.gz) ; d) NT-Emacs-FAQ ; e) info (online) ; f) Von O'Reilly gibt es ein Buch über den GNU-Emacs ; ... und tausend andere ; ; Das GNU Emacs Manual paßt zur nicht mehr aktuellen Version 19. Derzeit ; im Umlauf ist die Version 21. Der Inhalt des Buches ist nicht ; falsch, aber inzwischen etwas unvollständig. ; ; ; Bei neueren Versionen hat sich insbesondere die Anpassung an ; Benutzervorstellungen vereinfacht: Man kann Anpassungen teilweise vom ; EMACS direkt in der Initialisierungsdatei vornehmen zu lassen, ohne ; von Hand den LSIP-Code ändern zu müssen. ; ; Die jeweils aktuelle Version ist im EMACS selbst dokumentiert, in Form ; sogenannter info-Dateien. Diese können im EMACS direkt gelesen werden ; (C-h i), oder mit TeX in eine druckbare Form gebracht werden. Es gibt ; auch andere Programme, um die Dateien online anzuzeigen (info, xinfo, ; tkinfo, ...). ; ; ; ; Zu den hier verwendeten LISP-Befehlen ; ##################################### ; ; ; Mit ; (setq variablenname wert) ; kann man einer (evtl. neuen) Variable einen Wert zuweisen. ; Der Typ der Variable ergibt sich dabei aus der Zuweisung. ; ; Mit ; (setq-default variablenname wert) ; kann man einer Variable, die in verschiedenen Modi (C, C++, Text, ...) ; vorkommen kann, einen Standarwert geben. Dieser Wert wird dann als ; Anfangswert genommen, wenn DANACH ein Puffer in einen anderen Modus ; übergeht (also beispielsweise eine neue Datei geladen wird). ; Mit ; (global-set-key "Tastenkombination" 'funktionsname) ; kann man einer Tastenkombination einen Funktionsaufruf zuordnen. ; Diese Einstellung gilt dann für alle Modi, die nicht selbst diese ; Kombination übersteuern (daher "global"). ; Der Apostroph vor dem Funktiosnanmen bewirkt, daß hier nicht die ; Funktion aufgerufen wird, und ihr Ergebnis an global-set-key ; übergeben würde. ; Da viele Erweiterungspakete für den Emacs existieren und ständig ; neue entstehen, sollte man etwas darauf achten, welche ; Tastenkombinationen man sich selbst definiert, um nicht mit bereits ; existierenden oder noch auftauchenden Kommandos zu kollidieren. ; Recht gefahrlos ist die Verwendung von Tastenkombinationen, die mit ; C-c (also Strg+c) beginnen. Denn diese sind für privaten Gebrauch ; reserviert. ; Wenn man also eigene Kommandos auf Tastatutkombinationen legen möchte, ; guckt man am besten nach, ob eine Wunschkombination noch frei ist, die ; mit C-c beginnt. ; Das kann man mit M-x describe-variable machen. ; ; ; Wenn der EMACS in einen neuen Modus wechselt (beispielsweise in ; den c-mode), dann werden alle Funktionen einer dafür vorgesehenen ; Liste abgearbeitet. ; Mit einem Aufruf von add-hook wird an eine solche Liste eine eigene ; Funktion angehängt. ; Für jeden Modus existiert eine solche Liste. ; Man könnte also mit ; (add-hook 'c-mode-hook 'meine-funktion-fuer-c-mode) ; eine solche Funktion für den c-mode anhängen. ; Da für C und C++ viele Dinge gleich sind, gibt es einen ; c-mode-common-hook, der wowohl für c-mode als auch für c++-mode ; verwendet wird. ; ; ; ; Informationen und Literatur ; ########################### ; ; Zum EMACS gibt es natürlich Literatur bis zum Abwinken. ; ; Die wichtigsten Dokus sind: ; ; - dieser Text :-)) ; ; - GNU-EMACS-Howto (im EMACS mit C-h F zu erreichen, oder ; - beispielsweise von ; ftp://ftp.uni-paderborn.de/pub/doc/FAQ/comp/emacs/) ; - oder bei Linux gleich mit dabei ; ; - GNU-EMACS FAQ for Windows 95/98/ME/NT/XP and 2000 ; ; - GNU EMACS Manual (Richard M. Stallman) ; - http://www.gnu.org/manual/emacs/ps/emacs.ps.gz (Postscript) ; - http://www.gnu.org/manual/emacs/index.html (HTML) ; - oder bei Linux gleich mit dabei ; ; - Emacs Lisp Reference Manual ; - http://www.gnu.org/manual/elisp-manual-21-2.6/elisp.html (HTML) ; - ftp://ftp.gnu.org/pub/gnu/emacs/elisp-manual-21-2.6.tar.gz (Info) ; - oder bei Linux gleich mit dabei ; ; - Programming in EMACS LISP ; An Introduction ; (elispint.ps beispielsweise) ; ; - Die eingebauten Hilfen (C-h C-f für jede Funktion, C-h F für die ; FAQ, C-h i oder M-x info zum Lesen von Dateien im Info-Format, ; C-h v zum Anzeigen der Beschreibung und des Werts jeder Variable, ; usw.) ; ; - http://www.dotemacs.de/ ; ; - http://tiny-tools.sourceforge.net/emacs-keys.html ; ; - http://www.dotfiles.com ; ; - NT-EMACS: http://www.gnu.org/software/emacs/windows/ntemacs.html ; ; - http://wonderworks.com/ ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Meine momentane Tastenbelegung: ; F1 Vervollständigen eines angefangenen Worts ; F2 springt zwischen öffnender und schießender Klammer hin und her ; F3 fügt das Datum an der Cursorposition ein ; S-F3 wie F3, aber zusätzlich mit Uhrzeit ; F4 addiert alle Zahlen in einem markierten Rechteck ; F5 fügt "Mit freundlichen Grüßen, Klaus Wachtler" ein ; S-F5 fügt "Viele Grüße, Klaus Wachtler" ein ; F6 step instruction in gdb ; F7 step in gdb ; F8 next in gdb ; F9 cont in gdb ; F12 in C/C++: Einfügen von "->" ; in TeX: markierten Bereich in ein \index{} hineinkopieren ; C-c C-i markierten Bereich richtig einrücken (indent-region) ; C-7 Einfügen von "{}" ; C-8 Einfügen von "[]" ; M-, ein Zeichen aus der Zeile drüber kopieren ; M-; ein Wort aus der Zeile drüber kopieren ; C-c _ undo (weil das dafür vorgesehene C-_ unter Windows zumindest ; früher nicht ging) (global-set-key [f1] 'dabbrev-expand) (message "F1 gesetzt: dynamische Abkuerzung einfuegen") ; load-path um einen Eintrag ergänzen, der ins Homeverzeichnis zeigt: (setq load-path (cons "~/.elisp" load-path)) ;;;; ;;;; Mit [F2] zwischen öffnenden und schließenden Klammern springen: ;;;; ;; ;; Here's my take on it: ;; (defun joc-bounce-sexp () "Will bounce between matching parens "[{(<" && ">)}]" just like % in vi" (interactive) (let ((prev-char (char-to-string (preceding-char))) (next-char (char-to-string (following-char))) ) (cond ((string-match "[[{(<]" next-char) (forward-sexp 1)) ((string-match "[]})>]" prev-char) (backward-sexp 1)) (t (error "%s" "Not on a paren, brace, or bracket")) ) ) ) ;; ----- bounce back & forth between matching parens, braces or brackets ----- (global-set-key [f2] 'joc-bounce-sexp) (message "F2 gesetzt: zwischen oeffnender und schliessender Klammer springen") ;; ;; I'm not quite sure I'm using the word sexp right, but the function works.... ;; Regards, ;; joe ;; joc@netaxs.com ;insert date into buffer (defun insert-date () "Insert date at point." (interactive) ;(insert (format-time-string "%a %b %e, %Y %l:%M %p")) (insert (format-time-string "%02e.%02m.%Y")) ) ;insert date into buffer (defun insert-date-time () "Insert date at point." (interactive) ;(insert (format-time-string "%a %b %e, %Y %l:%M %p")) (insert (format-time-string "%02e.%02m.%Y %02H:%02M")) ) (global-set-key [f3] 'insert-date) (message "F3 gesetzt: aktuelles Datum einfuegen") (global-set-key [\S-f3] 'insert-date-time) (message "S-F3 gesetzt: Datum und Uhrzeit einfuegen") ; Mit freundlichen Grüßen, Viele Grüße: (defun insert-mfg () "Insert: Mit freundlichen Grüßen, Klaus Wachtler" (interactive) (insert "Mit freundlichen Grüßen, Klaus Wachtler") ) (defun insert-viele-gruesse () "Insert: Viele Grüße, Klaus Wachtler" (interactive) (insert "Viele Grüße, Klaus Wachtler") ) (global-set-key [f5] 'insert-mfg) (message "F5 gesetzt: Mit freundlichen Grüßen") (global-set-key [\S-f5] 'insert-viele-gruesse) (message "S-F5 gesetzt: Viele Grüße") (defun rect-sum() "Addiert alle Zahlen im markierten Rechteck,\ngibt die Summe als message aus,\nund speichert sie auch im kill-ring (zum Wiedereinfuegen)\n23.01.2002 Klaus Wachtler" (interactive) ( let( (r (extract-rectangle (mark) (point))) ; Rechteck nach r holen: woerter (summe 0) ) ; In r steht jetzt eine Liste der einzelnen Zeilen des Rechtecks. ; Schleife über alle Zeilen des Rechtecks: (while r (setq woerter (split-string (car r))) ; Zeile zu Liste von Wörtern machen ; Schleife über die Wörter einer Zeile: (while woerter (setq summe (+ summe (string-to-number (car woerter)))) ; addieren (setq woerter (cdr woerter)) ; Liste um erstes Wort kürzen ) (setq r (cdr r)) ; Liste um erste Zeile erleichtern ) ; Summe im mini buffer und in den *Message*-buffer ausgeben: (message "Summe ist %s" summe) ; in kill-ring setzen (dann kann der String mit yank, z.B. C-y ; jederzeit wieder eingefügt werden): (kill-new (number-to-string summe)) ) ) (global-set-key [f4] 'rect-sum) (message "F4 gesetzt: alle Zahlen im markierten Rechteck addieren") (global-auto-revert-mode 1) ; autorevert buffers if files change ;(auto-insert-mode 1) ; bei neuen Dateien gleich ein Template laden ;(setq auto-insert-directory "~/.emacstemplates") ; Wenn ein buffer größer ist als dieser Wert, dann wird er nicht ; gemäß Syntaxregeln bunt eingefärbt (je nach mode) (setq font-lock-maximum-size 1000000) ;;; > ;;; > To insert a time stamp, you want time-stamp.el. ;;; > ;;; > ; time stamp (Time-stamp: " " in first eight lines of file) ;;; > ;;; > (add-hook 'write-file-hooks 'time-stamp) ;;; > (setq time-stamp-active t) ;;; > (setq time-stamp-format "%02d %:b %:y %02H:%02M:%02S") ;;; > ;;; > So if your header text has the special time stamp text in the first 8 ;;; > lines, you'll get a time stamp every time you write the file. ;;; > ;;; > I don't know how to add the current user name. ; time stamp (Time-stamp: " " in first eight lines of file) (add-hook 'write-file-hooks 'time-stamp) (setq time-stamp-active t) (setq time-stamp-format "%02d.%02m.%02y %02H:%02M %f %u@%h") ; aus time-stamp.el: ; A string is used verbatim except for character sequences beginning with %: ; ; %:a weekday name: `Monday'. %#A gives uppercase: `MONDAY' ; %3a abbreviated weekday: `Mon'. %3A gives uppercase: `MON' ; %:b month name: `January'. %#B gives uppercase: `JANUARY' ; %3b abbreviated month: `Jan'. %3B gives uppercase: `JAN' ; %02d day of month ; %02H 24-hour clock hour ; %02I 12-hour clock hour ; %02m month number ; %02M minute ; %#p `am' or `pm'. %P gives uppercase: `AM' or `PM' ; %02S seconds ; %w day number of week, Sunday is 0 ; %02y 2-digit year: `97' %:y 4-digit year: `1997' ; %z time zone name: `est'. %Z gives uppercase: `EST' ; ; Non-date items: ; %% a literal percent character: `%' ; %f file name without directory %F gives absolute pathname ; %s system name ; %u user's login name %U user's full name ; %h mail host name ; ; Decimal digits between the % and the type character specify the ; field width. Strings are truncated on the right; years on the left. ; A leading zero causes numbers to be zero-filled. (global-set-key [f6] 'gud-stepi) (message "F6 gesetzt: gud step instruction (naechst. Maschinenbefehl)") (global-set-key [f7] 'gud-step) (message "F7 gesetzt: gud step (naechste Anw., ggf. in f())") (global-set-key [f8] 'gud-next) (message "F8 gesetzt: gud next (naechste Anw., f() ueberspringen)") (global-set-key [f9] 'gud-cont) (message "F9 gesetzt: gud continue") ; Unter Linux tritt manchmal folgendes Problem auf: ; Wenn man in einem xterm ein "su -" macht, dann wird zwar die TERM-Variable ; (TERM=xterm) an die neue shell weiterverebt, aber nicht die DISPLAY-Variable. ; Wenn man dann den EMACS aufruft, bewirkt ein Drücken der Backspace-Taste ; ein C-h, was wiederum als Prefix (für die Hilfefunktionen) interpretiert ; wird. In einem solchen Fall wird mit der folgenden Anpassung ein Umdefinieren ; erreicht. Die Hilfefunktionen sind dann nicht erreichbar (mit C-h), und ; stattdessen hat man wieder ein Backspace. (defun Ctrl-h-als-DEL () "Ctrl-h-als-DEL definiert die Tastaturtabelle so um, daß C-h nicht mehr als Prefix für Hilfe zählt, sondern Backspace ermöglicht" (keyboard-translate ?\C-h ?\C-?) (keyboard-translate ?\C-? ?\C-h) ) (if (and (string= (getenv "TERM") "xterm") (not (getenv "DISPLAY") ) ) (Ctrl-h-als-DEL) ) ; ; ersetzt den Text unter dem Cursor (zwischen dem vorhergehenden und dem ; ; nachfolgenden Leerzeichen) durch das aktuelle Datum. ; ; geht nur unter Unix/Linux, nicht NT ; (defun update-datum () "ersetzt das aktuelle Wort durch das aktuelle Datum" ; (interactive) ; (search-forward " ") ; (backward-char) ; (push-mark) ; (set-mark (point)) ; (search-backward " ") ; (forward-char) ; (delete-region (mark) (point)) ; (pop-mark) ; (shell-command "echo -n `date +%d.%m.%Y`" t ) ; ) ; ; (global-set-key [f1] 'update-datum) ; mit C-c M-% startet ein Suchen und Ersetzen mit regulären Ausdrücken: ;(global-set-key "\C-c\M-%" 'query-replace-regexp) ; mit C-c i kann man den markierten Bereich gemäß aktueller ; Syntax einrücken lassen: (global-set-key "\C-c\C-i" 'indent-region) (message "C-c C-i gesetzt: markierten Block einruecken") ; zusammengehörige Klammernpaare anzeigen lassen: (show-paren-mode t) ;; Maus mit Rad: Mit dem Rad rauf und runter blättern: (defun scroll-up-half () "Scroll up half a page." (interactive) (scroll-up (/ (window-height) 2)) ) (defun scroll-down-half () "Scroll down half a page." (interactive) (scroll-down (/ (window-height) 2)) ) (global-set-key [(mouse-5)] 'scroll-up-half) (global-set-key [(mouse-4)] 'scroll-down-half) ;; 03.10.2003 kw: scheint nicht mehr zu gehen unter akutellem Linux (Debian) ;; ;;; For imwheel ;; (setq imwheel-scroll-interval 3) ;; (defun imwheel-scroll-down-some-lines () ;; (interactive) ;; (scroll-down imwheel-scroll-interval)) ;; (defun imwheel-scroll-up-some-lines () ;; (interactive) ;; (scroll-up imwheel-scroll-interval)) ;; (global-set-key [?\M-\C-\)] 'imwheel-scroll-up-some-lines) ;; (global-set-key [?\M-\C-\(] 'imwheel-scroll-down-some-lines) ;; ;; (define-key global-map [(control \))] 'imwheel-scroll-up-some-lines) ;; (define-key global-map [(control \()] 'imwheel-scroll-down-some-lines) ;; ;;; end imwheel section (defun c-deref-operator () "Einfuegen eines deref-operators (->)" (interactive) (insert "->") ) ; bei jedem Suchen mit C-s oder C-r springt der Cursor wie gehabt zum nächsten ; gefundenen Vorkommen. Zusätzlich werden die dann folgenden Vorkommen gleich ; farblich markiert. ; Benötigt die Datei ishl.el oder ishl.elc im lisp-Verzeichnis: (require 'ishl) (ishl-mode t) ; Falls der EMACS auch als IRC-Client fungieren soll: ERC ; (require 'erc) ;(require 'cc-mode) ;(modify-syntax-entry ?_ "w" c++-mode-syntax-table) ;(require 'c-mode) ;(modify-syntax-entry ?_ "w" c-mode-syntax-table) ; ich will keine TABs im Text haben (sonst stimmt beim Austausch mit anderen ; Editoren (DevStudio) die Formatierung nicht mehr). (setq-default indent-tabs-mode nil) ; Eine LISP-Funktion wird mit "defun" definiert: ; ( defun funktionsname ; ( parameterliste ) ; "beschreibender Text" ; (interactive) ; (Anweisung 1) ; (Anweisung 2) ; (Anweisung ...) ; ) ; ; Wenn man keine Parameterliste hat, dann läßt man die Klammern leer. ; ; Der beschreibende Text wird angezeigt, wenn der Benutzer ; M-x describe-function zu dieser Funktion aufruft. ; ; Durch das (interactive) kann man die Funktion als Benutzer direkt ; aufrufen. ; ; Die darauf folgenden Anweisungen werden in der angegebenen Reihenfolge ; ausgeführt. ; ; Die i.F. definierte Funktion geschweifte-klammern fügt ein paar ; geschweifter Klammern ein, und geht dann wieder mit dem Cursor ein ; Zeichen nach links, damit man zwischen den Klammern weiterschreiben kann. ; ; Aufrufen kann man eine LISP-Funktion in der Form: ; (funktionsname parameter1 parameter2 ... ) ; ; (defun geschweifte-klammern () "Einfuegen von geschweiften Klammern {}" (interactive) (insert "{}") (backward-char 1) ) (global-set-key "\C-c7" 'geschweifte-klammern) (message "C-c 7 gesetzt: '{}' einfuegen") (defun eckige-klammern () "Einfuegen von eckigen Klammern []" (interactive) (insert "[]") (backward-char 1) ) (global-set-key "\C-c8" 'eckige-klammern) (message "C-c 8 gesetzt: '[]' einfuegen") ; kopiert aus der vorhergehenden Zeile ein Zeichen in die aktuelle: (defun copy-char-from-previous-line() "kopiert ein Zeichen aus der letzten Zeile in die aktuelle Zeile" (interactive) (push-mark) ; merken, um danach die ursprüngliche (set-mark (point)) ; Stelle zu finden ; aus irgendwelchen kühlen Gründen wird manchmal nicht kopiert, wenn man ; wenn man am Zeilenende steht, ; sondern man springt stattdessen in die nächste ; Zeile. Wenn man vorher allerdings etwas schreibt, und wieder löscht, dann ; klappts.?!? ; Also etwas schreiben, und wieder löschen: (insert " ") (backward-delete-char 1) (push-mark) (previous-line 1) ; eine Zeile hoch (set-mark (point)) ; Markierung setzen (forward-char 1) ; ein Zeichen weiter (copy-region-as-kill ; das markierte Zeichen in yank-Puffer kopieren (mark) (point) ) (pop-mark) (exchange-point-and-mark) ; ursprüngliche Stelle wiederfinden (pop-mark) (yank) ; das Zeichen aus dem Puffer einfügen ) (defun copy-word-from-previous-line() "kopiert ein Wort aus der letzten Zeile in die aktuelle Zeile" (interactive) (push-mark) ; merken, um danach die ursprüngliche (set-mark (point)) ; Stelle zu finden (push-mark) (previous-line 1) ; eine Zeile hoch (set-mark (point)) ; Markierung setzen (forward-word 1) ; ein Wort weiter (copy-region-as-kill ; das markierte Wort in yank-Puffer kopieren (mark) (point) ) (pop-mark) (exchange-point-and-mark) ; ursprüngliche Stelle wiederfinden (pop-mark) (yank) ; das Wort aus dem Puffer einfügen ) (global-set-key "\M-," 'copy-char-from-previous-line) (message "M-, gesetzt: ein Zeichen aus der Zeile drueber kopieren") (global-set-key "\M-;" 'copy-word-from-previous-line) (message "M-; gesetzt: ein Wort aus der Zeile drueber kopieren") ; \index{}-Befehl für LaTeX: (defun latex-region-to-index () "latex-region-to-index kopiert region in einen \index{}-Befehl hinter der region. Beispiel: Wenn im Text: \"...was ist ein DBMS?...\" das Wort \"DBMS\" markiert ist, dann macht die Funktion daraus: \"...was ist ein DBMS\\index{DBMS}?...\"" (interactive) (copy-region-as-kill (mark) (point)) (insert "\\index{") (yank) (insert "}") ) ;;; To use it, copy it to _emacs in a directory where emacs will ;;; search it. Were will emacs search it? If emacs installed in a ;;; directory named `bin', it will search _emacs in the parent ;;; directory, else it will search it in the directory it is installed ;;; in. Setting the environment variable `HOME' probably interferes ;;; with this scheme. (standard-display-european 1) ;;; 1. 7.97 kw: Funktion pps: ;;; Damit kann man den emacs so aufrufen, daß er eine Datei in Postscript ;;; konvertiert, den PS-Code abspeichert, und sich dann beendet. ;;; Unter NT geht das so: runemacs %1 -f pps --kill ;;; Unter Linux: emacs -nw %1 -f pps --kill (defun pps() "pps gibt den aktuellen Puffer in eine PS-Datei aus. Dateiname ist der Dateiname des Puffers mit angehaengtem .ps. 1. 7.97 AnyWare Klaus Wachtler" (interactive) (ps-print-buffer (concat buffer-file-name ".ps" ) ) ) (defun ppsc() "pps gibt den aktuellen Puffer mit Syntaxhighlighting in eine PS-Datei aus. Dateiname ist der Dateiname des Puffers mit angehaengtem .ps. 1. 7.97 AnyWare Klaus Wachtler" (interactive) (ps-print-buffer-with-faces (concat buffer-file-name ".ps" ) ) ) ; Mit dem Paket gnuserv wird der EMACS zu einem Server, der durch Kommandos ; von außen fernbedienbar ist. Diese Kommandos kommen meist aus dem Programm ; gnuclient (oder unter Windows gnuclientw). ; Wenn man gnuclient aufruft, aber noch kein EMACS läuft, dann wird er ; halt gestartet, ansonsten wird der bereits laufende verwendet um die ; Kommandos auszuführen. ; Wenn man nun nie den EMACS aufruft, sondern zum Editieren nur noch gnuclient, ; dann muß EMACS nur noch einmal gestartet werden -> geht schneller, außerdem ; hat man dann immer aller buffer gleichzeitig im Zugriff. ; (require 'gnuserv) ; (gnuserv-start) ; (setq gnuserv-frame (selected-frame)) ; ;(setq gnuserv-frame (selected-frame)) ; immer im gleichen frame ; (setq gnuserv-frame nil) ; jeweils ein neuer frame ;;; 14. 3.99 Klaus Wachtler: Unterscheidung zwischen Win95/NT einerseits, ;;; und X-Windows andererseits. ;;; Grund: das Paket gnuclientw kann und braucht man nur unter Windows ;;; laden. (defun meine-win32-anpassungen() "macht Anpassungen an Win32" (message "Anpassungen an Win32") ; die folgenden will ich jetzt (13.06.2002) auch unter Unix haben; ; deshalb nach oben verschoben: ; (require 'gnuserv) ; mit diesen beiden Zeilen ; (gnuserv-start) ; kann man eine Verbindung von ; VC++ 5.0 aus ; herstellen. ; Nötig sind die Pakete ; gnuserv (für den EMACS) ; und VisEmacs (für ; DeveloperStudio). ) (defun meine-x-anpassungen() "macht Anpassungen an X-Windows" (message "Anpassungen an X-Windows") ; ... ) (if (string= "w32" window-system) (meine-win32-anpassungen) (if (string= "x" window-system) (meine-x-anpassungen) (message "kein X-Windows, kein Win32!") ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; Ergaenzungen 5.4.96 Klaus Wachtler: ;;; ;;; a) ob beim Suchen Gross-/Kleinschreibung unterschieden wird, ist ;;; eigentlich egal. Aber wenn case-fold-search auf t steht, dann ;;; klappen auch Ergaenzungen (M-/) nicht so recht. ZB. wird nach dem ;;; Text: "AnyWare" das Wort "An" durch M-/ zu "Anyware" anstatt ;;; "AnyWare" ergaenzt. So gehts besser (dann klappt's auch mit dem ;;; Nachbarn): (defun kw-ergaenzungen-zu-c-c++-mode() "Ergaenzungen zu c-mode: a) schaltet Unterscheidung Gross-/Klein ein b) schaltet abbrev-mode ein 5.4.96 kw" (local-set-key [f12] 'c-deref-operator) (message "F12 gesetzt: '->' einfuegen (nur C/C++)") ;if (0) becomes if (0) ; { { ; ; ; ; } } (c-set-offset 'substatement-open 0) ;first arg of arglist to functions: tabbed in once ;(default was c-lineup-arglist-intro-after-paren) ;(c-set-offset 'arglist-intro '+) ;second line of arglist to functions: tabbed in once ;(default was c-lineup-arglist) ;(c-set-offset 'arglist-cont-nonempty '+) ;switch/case: make each case line indent from switch (c-set-offset 'case-label '+) ;make open-braces after a case: statement indent to 0 (default was '+) (c-set-offset 'statement-case-open '+) ;make a #define be left-aligned (setq c-electric-pound-behavior (quote (alignleft))) ; c-auto-state fügt selbständig LF ein (z.B. nach ';'), ; c-hungry-state löscht statt eines whitespace gleich alle: (c-toggle-auto-hungry-state 1) ;(set-frame-height (selected-frame) 45) ;(set-frame-width (selected-frame) 72) ( setq case-fold-search nil ) ( setq abbrev-mode t ) ( setq c-auto-newline nil ) ; die folgenden Zeilen, um mit filladapt Kommentare besser zu ; formatieren (benötigt filladapt.el/filladapt.elc von ; http://cc-mode.sourceforge.net/filladapt.php und klappt am besten mit ; cc-* http://download.sourceforge.net/cc-mode/cc-mode-5.28.tar.gz); '(require 'filladapt) ;(cc-setup-filladapt) '(filladapt-mode 1) ; und wenn das mit dem automatischen Formatieren in den Kommentaren ; schon so schön klappt, dann kann man das auch gleich laufend ; automatisch machen lassen: (auto-fill-mode t) ) (add-hook 'c-mode-common-hook 'kw-ergaenzungen-zu-c-c++-mode) (add-hook 'cc-mode-hook 'kw-ergaenzungen-zu-c-c++-mode) ;;; (einfach mit (setq...) setzen reicht nicht, da case-fold-search ;;; offenbar durch den c-mode danach noch uebersteuert wird. ;;; ;;; b) Bei kleinen Texten (Buffer ;;; To: Jason Diamond ;;; Cc: help-emacs-windows@gnu.org ;;; Subject: Re: [h-e-w] View Whitespace ;;; ;;; Jason Diamond wrote: ;;; > ;;; > Hi. ;;; > ;;; > Is there a Lisp function that toggles whether or not whitespace (horizontal ;;; > tabs, line feeds, carriage returns, and spaces) are "visible"? ;;; > ;;; > Thanks, ;;; > Jason. ;;; ;;; I don't know where I got this from, but it does tabs and trailing ;;; spaces. ;;; ;;; ;;; Editor behavior: color tabs ;;; (custom-set-faces ;;; '(my-tab-face ((((class color)) (:background "Khaki"))) t) ;;; '(my-trailing-space-face ((((class color)) (:background "Gold"))) t)) ;;; (add-hook 'font-lock-mode-hook ;;; (function ;;; (lambda () ;;; (setq font-lock-keywords ;;; (append font-lock-keywords ;;; '(("\t+" (0 'my-tab-face t)) ;;; ("[ \t]+$" (0 'my-trailing-space-face ;;; t)))))))) ;;; ;;; -- ;;; Tom Schutter ;;; t.schutter@att.net ;;; ;;; Editor behavior: color tabs (custom-set-faces '(my-tab-face ((((class color)) (:background "Khaki"))) t) '(my-trailing-space-face ((((class color)) (:background "Gold"))) t)) (add-hook 'font-lock-mode-hook (function (lambda () (setq font-lock-keywords (append font-lock-keywords '(("\t+" (0 'my-tab-face t)) ("[ \t]+$" (0 'my-trailing-space-face t)))))))) ;;; From: Christian Mallwitz ;;; To: "'ntemacs-users@cs.washington.edu'" ;;; Subject: RE: Trailing spaces ;;; Date: Wed, 20 Jun 2001 09:52:58 +0200 ;;; X-Mailer: Internet Mail Service (5.5.2650.21) ;;; Precedence: bulk ;;; X-FAQ: http://www.gnu.org/software/emacs/windows/ntemacs.html ;;; ;;; Mike, ;;; ;;; I use this in my .emacs ;;; ;;; ;; special customization for coloring leading and trailing spaces ;;; ;;; (custom-set-faces ;;; '(my-tab-face ((((class color)) (:background "lavender blush"))) ;;; t) ;;; '(my-trailing-space-face ((((class color)) (:background "cornsilk"))) t)) ;;; ;;; (add-hook 'font-lock-mode-hook ;;; (function ;;; (lambda () ;;; (setq font-lock-keywords ;;; (append font-lock-keywords ;;; '(("\t+" (0 'my-tab-face t)) ;;; ("[ \t]+$" (0 'my-trailing-space-face t)))))))) ;;; ;;; which you may treak for your purposes ... ;;; Bye ;;; Christian ;show ascii table (defun ascii-table () "Print the ascii table. Based on a defun by Alex Schroeder " (interactive) (switch-to-buffer "*ASCII*") (erase-buffer) (insert (format "ASCII characters up to number %d.\n" 254)) (let ((i 0)) (while (< i 254) (setq i (+ i 1)) (insert (format "%3d 0x%3x %c\n" i i i)))) (beginning-of-buffer)) ; Mouse avoidance mode. ; Dadurch wird der Mauszeiger irgendwohin verschoben, wenn er dem ; Textcursor im Weg ist. ; So sieht man immer, was man schreibt. ; Und es sieht einfach cool aus. (if window-system (mouse-avoidance-mode 'animate)) ; So muß man nicht immer "yes" und "no" eingeben, ein einfaches ; "y" oder "n" genügt: (fset 'yes-or-no-p 'y-or-n-p) ;; ; Mailcrypt ;; (load-library "mailcrypt") ;; (mc-setversion "gpg") ; use GPG as default ;; (autoload 'mc-install-write-mode "mailcrypt" nil t) ;; (autoload 'mc-install-read-mode "mailcrypt" nil t) ;; (add-hook 'mail-mode-hook 'mc-install-write-mode) ;; ;; The first time you save the state of the Emacs session, you must ;; do it manually, with the command M-x desktop-save. Once you have ;; done that, exiting Emacs will save the state again -- not only ;; the present Emacs session, but also subsequent sessions. You can ;; also save the state at any time, without exiting Emacs, by typing ;; M-x desktop-save again. (load "desktop") (desktop-load-default) (desktop-read) (setq ange-ftp-ftp-program-args '("-i" "-n" "-g" "-v" "-p")) ; Normalerweise wird ein buffer den selben Namen haben, wie die zugehörige ; Datei (aber ohne Pfadangabe). ; Lädt man eine zweite (dritte...) Datei mit demselben Namen aus einem ; anderen Verzeichnis, dann wird deren buffer zur Unterscheidung eine ; Zahl angehängt bekommen ("<2>", "<3>" etc.). ; Das kann man ändern; dann wird der Pfadname in den buffer-Namen ; mit aufgenommen anstatt einer Zahl. ; ; Mögliche Werte für uniquify-buffer-name-style: ; forward bar/mumble/name quux/mumble/name ; reverse name\mumble\bar name\mumble\quux ; post-forward name|bar/mumble name|quux/mumble ; post-forward-angle-brackets name name ; nil name name<2> (require 'uniquify) (setq uniquify-buffer-name-style 'post-forward-angle-brackets) ; Anm.: In jedem Fall kann man mit C-x C-b eine Liste aller buffer ; zusammen mit den zugehörigen vollen Pfadnamen anzeigen lassen ; (und ggf. durch Anklicken mit der mittleren Maustaste dorthin ; springen). ; tool bars brauchen viel Platz, und machen mich auch nicht glücklicher. ; also weg damit: (tool-bar-mode nil) ; Für ftp-Zugriff PASV verwenden ; ; Tweaked by eraatikidotfi based on code from ; ; http://mail.gnu.org/pipermail/help-gnu-emacs/2001-April/006468.html: ; ;; From: Ehud Karni ehudatunixdotsimonwieseldotcodotil ; ;; Date: Wed, 18 Apr 2001 19:45:08 +0300 ; ;; Subject: Ange-ftp: passive mode transfers? ; ; (defvar ange-ftp-hosts-no-pasv '("localhost") ; "*List of hosts that do not need PASV (e.g. hosts within your firewall). ; Used by `ange-ftp-set-passive'.") ; rephrased, added "*" // era ; ; (defun ange-ftp-set-passive () ; "Function to send a PASV command to hosts not named in the variable ; `ange-ft-hosts-no-pasv'. Intended to be called from the hook variable ; `ange-ftp-process-startup-hook'." ; rephrased significantly // era ; (if (not (member host ange-ftp-hosts-no-pasv)) ; (ange-ftp-raw-send-cmd proc "passive"))) ; ; (add-hook 'ange-ftp-process-startup-hook 'ange-ftp-set-passive) ;
(define-abbrev-table 'idl-mode-abbrev-table '( )) (define-abbrev-table 'text-mode--abbrev-table '( ("LIM" "Local Improvement Movement" nil 0) )) (define-abbrev-table 'c++-mode-abbrev-table '( ("switch10" " switch( ) { case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch10 0) ("ifpp" "#if" abbrev-korrekt-ifpp 1) ("ifepp" "#if" abbrev-korrekt-ifepp 1) ("ifdef" "#ifdef" abbrev-korrekt-ifdef 1) ("ifdefe" "#ifdef" abbrev-korrekt-ifdefelse 1) ("ifndef" "#ifndef" abbrev-korrekt-ifndef 1) ("print" "printf( \"\\n\" )" abbrev-korrekt-printf 0) ("ifdeb" "#ifndef NDEBUG" abbrev-korrekt-ifdeb 1) ("forever" "for(;;) { } // for(;;)" abbrev-korrekt-forever 0) ("if" "if( ) { }" abbrev-korrekt-if 9) ("templ" "template" nil 0) ("try" "try { } catch( std::exception &Fehler ) { std::cerr << \"Fehler: <\" << Fehler.what() << \"> in \" << __PRETTY_FUNCTION__ << \"\\n\"; //throw( Fehler ); } catch( ... ) { std::cerr << \"unbekannter Fehler in \" << __PRETTY_FUNCTION__ << \"\\n\"; //throw; }" abbrev-korrekt-try 0) ("scan" "scanf( \"%\", & )" abbrev-korrekt-scanf 0) ("cout" "std::cout << \"\" << << std::endl;" abbrev-korrekt-cout 0) ("cerr" "std::cerr << \"\" << << std::endl;" abbrev-korrekt-cout 0) ("cin" "std::cin >>;" abbrev-korrekt-cin 0) ("whil" "while( ) { }" abbrev-korrekt-while 1) ("main" "// Time-stamp: \"abc\" // // //#include //#include //#include //#include //#include #include //#include //#include //#include // Ausnahmen für Fehler: #define DERIVEEXCEPTION( NAME, BASENAME, TEXT ) \\ class NAME : public BASENAME \\ { \\ public: \\ NAME( const std::string &_what = #NAME ) \\ : BASENAME( std::string( TEXT ) + std::string( \"\\n\" ) + _what ) \\ {} \\ } int main( int nargs, char **args ) { return 0; } // main( int nargs, char **args )" nil 1) ("dlprint" "#ifdef DEBUG lgprintf( LogHandle, \"\\n\" ) #endif // DEBUG" nil 9) ("sstream" "std::stringstream" nil 0) ("isstream" "std::istringstream" nil 0) ("osstream" "std::ostringstream" nil 0) ("ifstream" "std::ifstream" nil 0) ("ofstream" "std::ofstream" nil 0) ("s" "std::string" nil 0) ("vec" "std::vector< >" abbrev-korrekt-backeins 0) ("map" "std::map< >" abbrev-korrekt-backeins 0) ("mmap" "std::multimap< >" abbrev-korrekt-backeins 0) ("set" "std::set< >" abbrev-korrekt-backeins 0) ("mset" "std::multiset< >" abbrev-korrekt-backeins 0) ("list" "std::list< >" abbrev-korrekt-backeins 0) ("sscan" "sscanf( puffer, \"%\", & )" abbrev-korrekt-scanf 0) ("lprint" "lgprintf( \"\\n\" )" abbrev-korrekt-printf 0) ("switch9" " switch( ) { case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch9 0) ("def" "#define" nil 1) ("switch8" " switch( ) { case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch8 0) ("class" "class { }; // class " abbrev-korrekt-class 0) ("switch7" " switch( ) { case : break; case : break; case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch7 0) ("fprints" "fprintf( stderr, \"\\n\" )" abbrev-korrekt-printf 0) ("switch6" " switch( ) { case : break; case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch6 0) ("switch5" " switch( ) { case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch5 0) ("do" "do { } while( );" abbrev-korrekt-do 0) ("else" "else" c-electric-continued-statement 0) ("switch4" " switch( ) { case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch4 0) ("switch3" " switch( ) { case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch3 0) ("switch" " switch( ) { case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch4 3) ("switch2" " switch( ) { case : break; case : break; default : break; }" abbrev-korrekt-switch2 0) ("switch1" " switch( ) { case : break; default : break; }" abbrev-korrekt-switch1 0) ("dfprint" "#ifdef DEBUG fprintf( stderr, \"\\n\" ) #endif // DEBUG" nil 0) ("sprint" "sprintf( puffer, \"\" )" abbrev-korrekt-printf 0) ("aprint" "ads_printf( \"\\n\" )" abbrev-korrekt-printf 0) ("catch" "catch" c-electric-continued-statement 0) ("myinc" "#include \".h\" " abbrev-korrekt-include 0) ("snprint" "snprintf( puffer, sizeof(puffer), \"\" )" abbrev-korrekt-printf 0) ("fprint" "fprintf( , \"\\n\" )" abbrev-korrekt-printf 0) ("for" "for(; ; ) { }" abbrev-korrekt-for 0) ("fscan" "fscanf( f, \"%\", & )" abbrev-korrekt-scanf 0) ("inc" "#include <> " abbrev-korrekt-backzwei 0) )) (define-abbrev-table 'c-mode-abbrev-table '( ("switch10" " switch( ) { case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch10 0) ("ifdef" "#ifdef" abbrev-korrekt-ifdef 1) ("print" "printf( \"\\n\" )" abbrev-korrekt-printf 0) ("ifdeb" "#ifdef DEBUG #else /* nicht DEBUG */ #endif /* DEBUG */" abbrev-korrekt-ifdeb 1) ("forever" "for(;;) { }" abbrev-korrekt-for 0) ("if" "if( ) { }" abbrev-korrekt-if 9) ("scan" "scanf( \"%\", & )" abbrev-korrekt-scanf 0) ("whil" "while( ) { }" abbrev-korrekt-while 1) ("main" "/* Time-stamp: \"abc\" * */ #include #include #include #include int main( int nargs, char **args ) { return 0; } /* main( int nargs, char **args ) */" nil 0) ("dlprint" "#ifdef DEBUG lgprintf( LogHandle, \"\\n\" ) #endif // DEBUG" nil 9) ("sscan" "sscanf( puffer, \"%\", & )" abbrev-korrekt-scanf 0) ("lprint" "lgprintf( LogHandle, \"\\n\" )" abbrev-korrekt-printf 0) ("switch9" " switch( ) { case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch9 0) ("def" "#define" nil 1) ("switch8" " switch( ) { case : break; case : break; case : break; case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch8 0) ("switch7" " switch( ) { case : break; case : break; case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch7 0) ("fprints" "fprintf( stderr, \"\\n\" )" abbrev-korrekt-printf 0) ("switch6" " switch( ) { case : break; case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch6 0) ("switch5" " switch( ) { case : break; case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch5 0) ("do" "do { } while( );" abbrev-korrekt-do 0) ("else" "else" c-electric-continued-statement 0) ("switch4" " switch( ) { case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch4 0) ("switch3" " switch( ) { case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch3 0) ("switch" " switch( ) { case : break; case : break; case : break; case : break; default : break; }" abbrev-korrekt-switch4 3) ("switch2" " switch( ) { case : break; case : break; default : break; }" abbrev-korrekt-switch2 0) ("switch1" " switch( ) { case : break; default : break; }" abbrev-korrekt-switch1 0) ("dfprint" "#ifdef DEBUG fprintf( stderr, \"\\n\" ) #endif /* DEBUG */" nil 0) ("sprint" "sprintf( puffer, \"\" )" abbrev-korrekt-printf 0) ("aprint" "ads_printf( \"\\n\" )" abbrev-korrekt-printf 0) ("myinc" "#include \".h\" " abbrev-korrekt-include 0) ("snprint" "snprintf( puffer, sizeof(puffer), \"\" )" abbrev-korrekt-printf 0) ("fprint" "fprintf( , \"\\n\" )" abbrev-korrekt-printf 0) ("for" "for(; ; ) { }" abbrev-korrekt-for 0) ("fscan" "fscanf( f, \"%\", & )" abbrev-korrekt-scanf 0) ("inc" "#include <.h> " abbrev-korrekt-include 0) )) (define-abbrev-table 'java-mode-abbrev-table '( ("if" "if( ) { }" abbrev-korrekt-if 9) ("cout" "System.out.println(" nil 0) ("while" "while( ) { }" abbrev-korrekt-while 1) ("main" "// Time-stamp: \"abc\" // // javac klassenname.JAVA && java klassenname import java.util.*; public class klassenname { public static void main( String args[] ) { System.out.println( ); } } // public class klassenname " abbrev-java-korrekt-main 1) ("finally" "finally" c-electric-continued-statement 0) ("else" "else" c-electric-continued-statement 0) ("catch" "catch" c-electric-continued-statement 0) ("for" "for(; ; ) { }" abbrev-korrekt-for 0) )) (define-abbrev-table 'objc-mode-abbrev-table '( ("while" "while" c-electric-continued-statement 0) ("else" "else" c-electric-continued-statement 0) )) (define-abbrev-table 'text-mode-abbrev-table '( ("foot" "{\\footnotesize}" abbrev-korrekt-latex-foot 0) ("script" "{\\scriptsize}" abbrev-korrekt-latex-script 0) ("item" "\\item" nil 0) ("bf" "{\\bf}" abbrev-korrekt-latex-em 0) ("Huge" "{\\Huge}" abbrev-korrekt-latex-huge 0) ("bibi" "{\\bibitem}" abbrev-korrekt-latex-bibi 0) ("bibitem" "\\bibitem[]{} % [Bezeichnung im Text]{label} {:\\\\ % Verfasser {\\em \\\\ % Titel \\/}\\\\ % Untertitel \\\\ % Verlag, Jahr ISBN % ggf.ISBN }" nil 1) ("doc" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Time-stamp: \"a\" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % ///| |||\\ || |||| // % ////| |||\\\\ || |||| // % ////|| ||||\\\\ || |||| // % //// || |||| \\\\ || |||| // % ////==|| |||| \\\\|| ||||// % //// || |||| \\\\| |||// % //// || |||| \\| ||// % |// % |||| /| // // ///| ||||=====// ////======= % |||| /|| // // ////| |||| // //// % |||| //|| // // ////|| |||| // //// % |||| // || // // //// || |||| // //// % ||||// ||// // ////==|| ||||=(( ((((======= % |||// |// // //// || |||| \\\\ \\\\\\\\ % |||/ |/ // //// || |||| \\\\ \\\\\\\\======= % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Copyright: %%%%%%%%%%%% % % (C) 2002 AnyWare % % Klaus Wachtler % Breidingstr. 17 % 29614 Soltau % % Tel. (49)-5191-70 2 71 % Fax: (49)-5191-70 2 72 % eMail AnyWare@Wachtler.de % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Geschichte: %%%%%%%%%%%%% % % Datum: Name: Vers. Aenderung: % kw 0.1 Basisversion % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Zukunft: %%%%%%%%%% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Benoetigt: %%%%%%%%%%%% % % dvips % c2tex % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%% entweder Needstexformat..., documentclass... mit den % %%%% usepackage... (neues LaTeX) % % \\NeedsTeXFormat{LaTeX2e} % \\documentclass[12pt,a4paper,twoside,titlepage]{article} % \\usepackage{a4,german,makeidx,graphicx} % %\\usepackage{helvet} % \\usepackage[ansinew]{inputenc} % \\usepackage{epsf,colordvi} % \\usepackage{html} % \\usepackage{htmllist} % \\usepackage{marvosym} \\usepackage{fancyhdr} % % %%%% oder documentstyle... und input{psbox} (alt, fuer tex2rtf) % % %\\documentstyle[12pt,german,inputenc,texhelp]{book} % %\\input{psbox} % %\\inputencoding{ansinew} % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \\parindent0pt \\parskip5mm %\\textheight25cm %\\textwidth10cm %\\topmargin0cm %\\leftmargin0cm %\\evensidemargin0cm %\\oddsidemargin0cm %\\input{version.tex} \\makeindex %\\renewcommand\\familydefault{\\sfdefault} \\begin{document} %\\pagestyle{myheadings} %\\pagestyle{headings} \\pagestyle{fancy} \\newsavebox{\\logo} \\savebox{\\logo}{\\makebox{\\raisebox{-1em}{\\parbox[t]{2cm}{\\includegraphics[width=3cm]{anywbutn.eps}}}}} \\renewcommand{\\sectionmark}[1]{\\markboth{{\\sl \\thesection\\ #1}}{}} \\renewcommand{\\subsectionmark}[1]{\\markright{{\\sl \\thesubsection\\ #1}}} \\renewcommand{\\headrulewidth}{0.15pt} \\addtolength{\\headheight}{5mm} \\fancyhead{} \\fancyhead[LE,RO]{\\thepage} \\fancyhead[CE]{\\leftmark} \\fancyhead[CO]{\\rightmark} \\fancyhead[RE]{\\usebox{\\logo}} \\fancyhead[LO]{\\usebox{\\logo}} \\newcommand{\\CC}{C\\nolinebreak\\hspace{-.05em}\\raisebox{.4ex}{\\tiny\\bf +}\\nolinebreak\\hspace{-.10em}\\raisebox{.4ex}{\\tiny\\bf +}} \\author{Klaus Wachtler} \\date{\\today} \\title{Titel...\\\\[5mm] %includegraphics[width=4cm]{anywbutn.ps}\\\\[3mm] %Version \\version } \\maketitle \\clearpage \\tableofcontents \\clearpage \\section{Einleitung} %\\addcontentsline{toc}{chapter}{Literatur} % %\\begin{thebibliography}{STROU78945dddddd} % %\\bibitem[man make]{lit-man-make} % Label fuer \\cite{...} %{Dennis Morse\\index{Dennis Morse}\\index{Morse, Dennis}, Roland McGrath\\index{Roland McGrath}\\index{McGrath, Roland}:\\\\ % Verfasser %{\\em make - GNU make utility to maintain groups of programs\\\\ % Titel %{\\tt{}man 1L make}\\/}\\\\ % Untertitel %{\\em Linux man pages, 1989-2000 by the Free Software Foundation\\index{Free Software Foundation}, %Inc.\\/, {\\tt http://www.fsf.org}}\\\\ % Verlag/Ort, Jahr %} % %\\bibitem[info make]{lit-info-make} % Label fuer \\cite{...} %{Free Software Foundation:\\\\ %{\\em make - GNU make utility to maintain groups of programs\\\\ % Titel %{\\tt{}info make}\\/}\\\\ % Untertitel %{\\em Linux man pages, 1989-2000 by the Free Software Foundation\\index{Free Software Foundation}, %Inc.\\/, {\\tt http://www.fsf.org}}\\\\ % Verlag/Ort, Jahr %} % %\\bibitem[man bash]{lit-man-bash} % Label fuer \\cite{...} %{Brian Fox\\index{Brian Fox}\\index{Fox, Brian}, Chet Ramey\\index{Chet Ramey}\\index{Ramey, Chet}:\\\\ % Verfasser %{\\em bash - GNU\\index{GNU} Bourne-Again SHel\\\\ % Titel %{\\tt{}man 1 bash}\\/}\\\\ % Untertitel %{\\em Linux man pages, 1989-1999 by the Free Software Foundation\\index{Free Software Foundation}, %Inc.\\/, {\\tt http://www.fsf.org}}\\\\ % Verlag/Ort, Jahr %{\\em Brian Fox, Free Software Foundation, {\\tt bfox@gnu.ai.MIT.Edu}\\/}\\\\ %{\\em Chet Ramey, Case Western Reserve University, {\\tt chet@ins.CWRU.Edu}\\/}\\\\ % Verlag, Jahr %} % %\\bibitem[info bash]{lit-info-bash} % Label fuer \\cite{...} %{Brian Fox\\index{Fox, Brian}, Chet Ramey\\index{Ramey, Chet}:\\\\ % Verfasser %{\\em bash - GNU\\index{GNU} Bourne-Again SHell\\\\ % Titel %info bash\\/}\\\\ % Untertitel %{\\em Linux man pages, 1989-1999 by the Free Software Foundation\\index{Free Software Foundation}, %Inc.\\/, {\\tt http://www.fsf.org}}\\\\ % Verlag/Ort, Jahr %{\\em Brian Fox, Free Software Foundation, {\\tt bfox@gnu.ai.MIT.Edu}\\/}\\\\ %{\\em Chet Ramey, Case Western Reserve University, {\\tt chet@ins.CWRU.Edu}\\/}\\\\ % Verlag, Jahr %} % %\\bibitem[Herold: Shell]{lit-herold-shells} % Label fuer \\cite{...} %{Helmut Herold\\index{Helmut Herold}\\index{Herold, Helmut}:\\\\ % Verfasser %{\\em Linux - Unix Shells\\\\ % Titel %Bourne-Shell\\index{Bourne-Shell}, Korn-Shell\\index{Korn-Shell}, %C-Shell\\index{C-Shell}, bash\\index{bash}, tcsh\\index{tcsh}\\/}\\\\ % Untertitel %3. Auflage\\\\ %Addison Wesley, 1999\\\\ % Verlag, Jahr %ISBN 3-8273-1511-5% ggf.ISBN %} % % %\\bibitem[LaTeX2html]{lit-latextotohtml} % Label fuer \\cite{...} %{Nikos Drakos\\index{Nikos Drakos}\\index{Drakos, Nikos}:\\\\ % Verfasser %{\\em The \\latextotohtml\\index{\\sortby+LaTeX2html+\\latextotohtml}{} Translator\\\\ % Titel %(Onlinehilfe zu \\latextotohtml{}\\index{\\sortby-LaTeX2html-\\latextotohtml{}} Version 96.1)\\/}\\\\ % Untertitel %CTAN\\index{CTAN} (Comprehensive \\TeX{} archive\\index{Comprehensive \\TeX{} archive}), z.B.\\ {\\tt ftp.shsu.edu}, {\\tt ftp.dante.de} % Verlag, Jahr %} % % % %\\bibitem[v.Helden,Dunkel: Inf2]{lit-jvh-inf-ii} %{Josef v.\\ Helden\\index{Josef v.\\ Helden}\\index{\\sortby-Helden, Josef-v.\\ Helden, Josef}, Jürgen Dunkel\\index{Jürgen Dunkel}\\index{Dunkel Jürgen}:}\\\\ %{\\em Informatik 2\\\\ %Vorlesungsskript Sommersemester 2000\\/}\\\\ %FH Hannover, FB Informatik %} % %\\bibitem[Knuth 1]{knuth1}{Donald E.\\ Knuth:\\\\ %{\\em The Art of Computer Programming\\/}\\\\ %{\\em Vol. 1: Fundamental Algorithms\\/}\\\\ %2. Auflage\\\\ %Addison-Wesley, 1973\\\\ %ISBN 0-201-03809-9 %} % %\\bibitem[Knuth 2]{knuth2}{Donald E.\\ Knuth:\\\\ %{\\em The Art of Computer Programming\\/}\\\\ %{\\em Vol. 2: Seminumerical Algorithms\\/}\\\\ %2. Auflage\\\\ %Addison-Wesley, 1971\\\\ %ISBN 0-201-03822-6 %} % %\\bibitem[Knuth 3]{knuth3}{Donald E.\\ Knuth:\\\\ %{\\em The Art of Computer Programming\\/}\\\\ %{\\em Vol. 3: Sorting and Searching\\/}\\\\ %2. Auflage\\\\ %Addison-Wesley, 1973\\\\ %ISBN 0-201-03803-X %} % % %\\bibitem[Knuth Sel.]{knuthsel}{Donald E.\\ Knuth:\\\\ %{\\em Selected Papers on Computer Science\\/}\\\\ %Center for the Study of language and Information (CSLI Publications), Leland Stanford Junior University 1996\\\\ %ISBN 1-881526-91-7 (paperback)\\\\ %ISBN 1-881526-92-5 (hardback)\\\\ %} % %%{\\em Kein Lehrbuch, aber sehr interessant zu lesen\\/} % %\\bibitem[Ziegenbalg]{ziegenbalg} % Label fuer \\cite{...} %{Jochen Ziegenbalg:\\\\ % Verfasser %{\\em Algorithmen\\\\ % Titel %Von Hammurapi bis Gödel\\/}\\\\ % Untertitel %Spektrum Akademischer Verlag, 1996\\\\ % Verlag, Jahr %ISBN 3-8274-0114-3% ggf.ISBN %} % %%{\\em Recht interessant zu lesen, weil neben der nüchternen %%Beschreibung auch ein paar Geschichten erzählt werden.\\/} % %\\bibitem[Sedgewick C]{lit-sedgewick-c-dt}{Robert Sedgewick:\\\\ % Verfasser %{\\em Algorithmen in C\\/}\\\\ % Untertitel %Addison Wesley 1992\\\\ %ISBN 3-89319-376-6 %} % %%{\\em Gutes Lehr- und Referenzbuch für einen relativ weiten Bereich (Suchen, %%Sortieren, Zeichenfolgen, etwas Geometrie, etwas Numerik)\\/} % %\\bibitem[Sedgewick C (eng.)]{lit-sedgewick-c-en}{Robert Sedgewick:\\\\ % Verfasser %{\\em Algorithms in C\\/}\\\\ % Untertitel %Addison Wesley 1990\\\\ %ISBN 0-201-51425-7 %} % %%{\\em Originaltext der deutschen Übersetzung \\cite{lit-sedgewick-c-dt}\\/} % %\\bibitem[Strou II]{lit-stro2}{Bjarne Stroustrup:\\\\ %{\\em Die C++ Programmiersprache\\/}\\\\ %2. Auflage\\\\ %Addison-Wesley, 1992 %} % %\\bibitem[Strou IV]{lit-stro4}{Bjarne Stroustrup:\\\\ %{\\em Die C++ Programmiersprache\\/}\\\\ %4. Auflage\\\\ %Addison-Wesley, 1999 % TODO: Datum strou4 %} % %\\bibitem[Cline: C++ FAQs]{lit-cppfaq}{Marshall Cline, Greg Lomow, Mike Girou:\\\\ %{\\em C++ FAQs\\/}\\\\ %2nd Edition\\\\ %Addison-Wesley, 1999\\\\ %{\\em Eine Sammlung vieler kleinerer Aspekte zu C++, CORBA und COM\\/} %} % %\\bibitem[Josuttis: Stdbib.]{lit-josuttis-standardbibliothek}{Nicolai Josuttis::\\\\ %{\\em Die C++-Standardbibliothek\\/}\\\\ %Eine detaillierte Einführung in die vollständige ANSI/ISO-Schnittstelle\\\\ %1. Auflage\\\\ %ISBN 3-8273-1023-7\\\\ %Addison-Wesley, 1996 %} % %\\bibitem[RRZN]{lit-rrzn}{{\\em Die Programmiersprache C++ für C-Programmierer\\\\ %RRZN-Klassifikationsschlüssel SPR.C 2\\/}\\\\ %3. Auflage\\\\ %Revision B %Regionales Rechenzentrum für Niedersachsen/Universität Hannover\\\\ %Juni 1993 %} % % %\\bibitem[KW:0 ist false]{lit-cbuch}{Klaus Wachtler:\\\\ %{\\em 0 ist false, alles andere true}\\\\ %Selbstverlag Klaus Wachtler\\\\ %Breidingstraße 17\\\\ %29614 Soltau\\\\ %\\htmladdnormallink{http://www.wachtler.de}{http://www.wachtler.de}\\\\ %August 2001 %} % % %\\bibitem[ct 9/94 Hartinger]{lit-ct-syntaxpuzzle}{Roland Hartinger:\\\\ %{\\em Syntax-Puzzle\\\\ %Die jüngsten C++-Erweiterungen\\/}\\\\ %c't 9/1994, S. 184\\\\ %Korrektur in c't 10/1994, S. 12\\\\ %{\\em Kurzabriß der neueren Sprachelemente (außer templates):\\\\ %Ausnahmebehandlung, RTTI, Namensräume (name spaces)\\/} %} % %\\bibitem[ct 9/94 Hueskes]{lit-ct-hueskes}{Ralf Hüskes:\\\\ %{\\em Geduldsspiel\\\\ %Der kommende C++-Standard\\/}\\\\ %c't 9/1994, S. 180\\\\ %{\\em Zur Standardisierung von C++, Interview mit Bjarne Stroustrup\\/} %} % %\\bibitem[ct 11/94 Langner]{lit-ct-langner}{Angelika Langner:\\\\ %{\\em Instantware\\\\ %Die neuen Standardklassen für C++\\/}\\\\ %c't 11/1994, S. 272\\\\ %} % %\\bibitem[c't 5/89 Bayerbäume]{lit-ct-bayerbaeume}{:\\\\ % Verfasser %{\\em Bayer-Bäume\\\\ % Titel %-\\/}\\\\ % Untertitel %c't 5/89, S. 178\\\\ % Verlag, Jahr %} % %\\bibitem[c't 6/89 Winkler/M.]{lit-ct-starke-typen}{Eckart Winkler, %Dirk Meiners:\\\\ % Verfasser %{\\em Starke Typen\\\\ % Titel %Funktions- und Prozedurtypen in modernen Programmiersprachen\\/}\\\\ % Untertitel %c't 6/89, S. 174\\\\ % Verlag, Jahr %} % %%{\\em Kurze und verständliche Beschreibung der Übergabe von Funktionen %%und Prozeduren als Parameter in C, Turbo-Pascal, und Modula-2\\/} % % %\\bibitem[c't 6/89 Berchtold]{lit-ct-evolution-im-computer}{Stefan Berchtold:\\\\ % Verfasser %{\\em Evolution im Computer\\\\ % Titel %Optimierung mit genetischen Algorithmen\\/}\\\\ % Untertitel %c't 6/89, S. 130\\\\ % Verlag, Jahr %} % %%{\\em Übersichtliche Beschreibung des Konzepts der genetischen %%Algorithmen, mit einem Beispiel in Pascal (Entwickeln einer %%Spielstrategie für das Spiel {\\em Nimm\\/})\\/} % %\\bibitem[Eckel: TIC++ 1]{lit-tica1}{Bruce Eckel:\\\\ %{\\em Thinking in C++\\\\ %Volume 1\\/}\\\\ %\\htmladdnormallink{http://www.mindview.net/Books/DownloadSites}{http://www.mindview.net/Books/DownloadSites} %} % %\\bibitem[Eckel: TIC++ 2]{lit-tica2}{Bruce Eckel:\\\\ %{\\em Thinking in C++\\\\ %Volume 2\\/}\\\\ %\\htmladdnormallink{http://www.mindview.net/Books/DownloadSites}{http://www.mindview.net/Books/DownloadSites} %} % %\\bibitem[Eckel: TIJ]{lit-tij}{Bruce Eckel:\\\\ %{\\em Thinking in Java}\\\\ %\\htmladdnormallink{http://www.mindview.net/Books/DownloadSites}{http://www.mindview.net/Books/DownloadSites} %} % %\\bibitem[KW-C++]{lit-kw-cpp} % Label fuer \\cite{...} %{Klaus Wachtler:\\\\ % Verfasser %{\\em Ein Überblick über die Programmierung mit C++}\\\\ % Untertitel %Selbstverlag, 2002\\\\ % Verlag, Jahr %\\htmladdnormallink{http://www.wachtler.de}{http://www.wachtler.de}\\\\ %} % %\\bibitem[KW-DLL]{lit-kw-dll} % Label fuer \\cite{...} %{Klaus Wachtler:\\\\ % Verfasser %{\\em Dynamische Bibliotheken unter Windows und Linux\\/}\\\\ %Selbstverlag 2002\\\\ % Verlag, Jahr %} % %% [3] N. Wirth, Compilerbau, 4. Auflage, Stuttgart 1986 % %% GNU Coding Standards: %% http://www.gnu.org/prep/standards_toc.html % %\\bibitem[Muellges/R.]{lit-muellges-reutter}{G. Engeln-Müllges\\index{Engeln-Müllges, Gisela}, F. Reutter\\index{Reutter, Fritz}:\\\\ %{\\em Numerische Mathematik\\/}\\\\ %Bibliographisches Institut Mannheim\\\\ %ISBN 3-411-01688-4 \\\\ % ggf.ISBN %} % %%{\\em Sehr praxisgerechte Darstellung der wichtigsten numerischen %%Verfahren aus der Technik (Fehleranalyse, Lösen von Gleichungen, %%numerische Lösung von linearen und nichtlinearen Gleichungssystemen\\index{Gleichungssystem}, %%Approximation\\index{Approximation}, Interpolation\\index{Interpolation}, numerisches Integrieren\\index{Integrieren}, %%Anfangswertprobleme\\index{Anfangswertprobleme}). %% %%Als Ergänzung ist eine Formelsammlung \\cite{lit-muellges-reutter-fs-f77} erhältlich.\\/} % % %\\bibitem[Muellges/R./F77]{lit-muellges-reutter-fs-f77}{G. Engeln-Müllges\\index{Engeln-Müllges, Gisela}, F. Reutter\\index{Reutter, Fritz}:\\\\ %{\\em Formelsammlung zur Numerischen Mathematik mit Standard-FORTRAN~77-Programmen\\/}\\\\ %Bibliographisches Institut Mannheim\\\\ %ISBN 3-411-03125-5 \\\\ % ggf.ISBN %} % %%{\\em \\index{Formelsammlung}Formelsammlung zum Nachschlagen als Ergänzung zu %%\\cite{lit-muellges-reutter}; enthält alle Verfahren in Fortran\\index{Fortran}~77 %%formuliert. Analoge Ausgaben sind mit BASIC\\index{BASIC}, Pascal\\index{Pascal} und C\\index{C} erhältlich.\\/} % % %\\bibitem[Solomon: Inside NT]{lit-solomon-inside-nt}{David A.\\ Solomon:\\\\ % Verfasser %{\\em Inside Windows NT\\\\ %The Official Guide to the Architecture and Internals of Microsoft's %Premier Operating System\\/}\\\\ % Untertitel %Second Edition %Microsoft Press 1998\\\\ % Verlag, Jahr %ISBN 1-57231-677-2 % ggf.ISBN %} % %\\bibitem[Solomon: Inside NT]{lit-solomon-inside-nt-dt} % Label fuer \\cite{...} %{David A.\\ Solomon:\\\\ % Verfasser %{\\em Inside Windows NT\\\\ % Titel %Der offizielle Führer zur Architektur von Windows NT 4.0\\/}\\\\ % Untertitel %Microsoft Press 1998\\\\ % Verlag, Jahr %ISBN 3-86063-435-6% ggf.ISBN %} % %\\bibitem[Solomon: Inside 2000 dt.]{lit-solomon-inside-zweitausend}{David A.\\ Solomon, Mark Russinovich:\\\\ % Verfasser %{\\em Inside Microsoft Windows 2000\\\\ % Titel %Der offizielle Leitfaden zur Architektur der Betriebssystemplattform %Windows 2000\\/}\\\\ % Untertitel %3. Auflage\\\\ %Microsoft Press \\\\ % Verlag, Jahr %ISBN 3-86063-630-8 %} % %\\bibitem[Richter: Experten]{lit-richter-experten} % Label fuer \\cite{...} %{Jeffrey Richter:\\\\ % Verfasser %{\\em Microsoft Windows Programmierung für Experten\\\\ % Titel %Profiwissen zur Programmierung von Anwendungen für Windows 98 und %Windows 2000\\/}\\\\ % Untertitel %Microsoft Press 2000\\\\ % Verlag, Jahr %ISBN 86063-615-4% ggf.ISBN %} % %\\bibitem[Sheldon: NT Sec.]{lit-sheldon-nt-security} % Label fuer \\cite{...} %{Tom Sheldon:\\\\ % Verfasser %{\\em Windows NT Security\\\\ % Titel %Everything You Need to Protect Your Network\\/}\\\\ % Untertitel %McGraw-Hill 1997\\\\ % Verlag, Jahr %ISBN 0-07-882240-8% ggf.ISBN %} % %\\bibitem[Bähring-Mikrorechner]{lit-baerhing-mikrorechner} %{Helmut Bähring u.a.:\\\\ % Verfasser %{\\em Mikrorechner-Systeme\\\\ %Mikroprozessoren, Speicher, Peripherie\\/}\\\\ %Springer-Verlag 1994\\\\ %ISBN 3-540-58362-9 %} % % %\\bibitem[Krieg d.\\ Codes]{lit-krieg-der-codes} % Label fuer \\cite{...} %{G.\\ P.\\ Zachary:\\\\ % Verfasser %{\\em Der Krieg der Codes\\\\ % Titel %Wie Microsoft ein neues Betriebssystem entwickelt.\\/}\\\\ % Untertitel %1996\\\\ %ISBN 345511038X% ggf.ISBN %} % %\\bibitem[MSDN]{lit-msdn} %{Microsoft:\\\\ % Verfasser %{\\em MS Developer Network}\\\\ %(Online-Dokumentation zu Developer Studio) %} % % %\\bibitem[Stev.:Adv.Prg.Unix]{lit-stevens-advanced-unix} % Label fuer \\cite{...} %{W. Richard Stevens:\\\\ % Verfasser %{\\em Advanced Programming in the Unix Environment\\/}\\\\ % Untertitel %Addison Wesley 1993\\\\ % Verlag, Jahr %ISBN 0-201-56317-7% ggf.ISBN %} % %\\bibitem[Stevens:Sockets]{lit-stevens-sockets} % Label fuer \\cite{...} %{W. Richard Stevens:\\\\ % Verfasser %{\\em Unix Network Programming\\\\ % Titel %Vol. 1: Networking APIs: Sockets and XTI\\/}\\\\ % Untertitel %Prentice Hall 1997\\\\ % Verlag, Jahr %ISBN 0-13-490012-X% ggf.ISBN %} % %\\bibitem[Stevens:IPC]{lit-stevens-ipc} % Label fuer \\cite{...} %{W. Richard Stevens:\\\\ % Verfasser %{\\em Unix Network Programming\\\\ % Titel %Vol. 2: Interprocess Communications\\/}\\\\ % Untertitel %Second Edition\\\\ %Prentice Hall 1998\\\\ % Verlag, Jahr %ISBN ISBN 0-13-081081-9 % ggf.ISBN %} % %\\bibitem[Rago: Netw.Prog.]{citeRagoUNIXSVNetworkProgramming} % Label fuer \\cite{...} %{Stephen A.\\ Rago:\\\\ % Verfasser %{\\em UNIX System V Network Programming\\/}\\\\ % Untertitel %Addison Wesley, 1993\\\\ % Verlag, Jahr %ISBN 0-201-56318-5% ggf.ISBN %} % %%{\\em Dieses Buch hat im Vorspann eine sehr übersichtliche und gut %%verständliche Einführung in die Programmierung unter Unix; daher auch %%sehr interessant, wenn man gar nichts mit Netzwerkprogrammierung zu %%tun hat! %% %%Für Netzwerkprogrammierung selbst ist es eher uninteressant, weil der %%Stoff nur unter System V R4 benutzbar ist (die %%ganzen \\verb+t_+\\ldots-Funktionen %%gemäß X/Open Transport Interface XTI). %%Hier ist \\meinrefsiehe{Unix Network %%Programming Vol. 1}{lit-stevens-sockets} geeigneter.\\/} % % %\\bibitem[Riepe: Erbstücke]{lit-ix-riepe-erbstuecke} % Label fuer \\cite{...} %{Michael Riepe:\\\\ % Verfasser %{\\em Erbstücke\\\\ % Titel %Umgang mit Shellvariablen\\/}\\\\ % Untertitel %Heise Verlag iX August 2002\\\\ % Verlag, Jahr %ISSN 0935-9680 % ggf.ISBN %} % %\\bibitem[Riepe: Kreuz und quer]{lit-ix-riepe-kreuz-und-quer} % Label fuer \\cite{...} %{Michael Riepe:\\\\ % Verfasser %{\\em Kreuz und quer\\\\ % Titel %Ein- und Ausgabeumlenkung in der Shell\\/}\\\\ % Untertitel %Heise Verlag iX Oktober 2002\\\\ % Verlag, Jahr %ISSN 0935-9680 % ggf.ISBN %} % %%\\htmladdnormallink{http://www.codeguru.com/}{http://www.codeguru.com/} % %\\end{thebibliography} \\end{document} " abbrev-korrekt-latex-doc 0) ("Large" "{\\Large}" abbrev-korrekt-latex-large 0) ("sec" "\\section{}" abbrev-korrekt-latex-sec 0) ("tt" "{\\tt}" abbrev-korrekt-latex-em 0) ("gf" "\"`\"'" abbrev-korrekt-latex-gfuss 1) ("huge" "{\\huge}" abbrev-korrekt-latex-huge 0) ("ssec" "\\subsection{}" abbrev-korrekt-latex-sec 0) ("em" "{\\em\\/}" abbrev-korrekt-latex-em 7) ("large" "{\\large}" abbrev-korrekt-latex-large 0) ("sssec" "\\subsubsection{}" abbrev-korrekt-latex-sec 0) ("sf" "{\\sf}" abbrev-korrekt-latex-em 0) ("mrs" "\\meinrefsiehe" nil 0) ("verb" "\\verb" nil 5) ("LARGE" "{\\LARGE}" abbrev-korrekt-latex-large 0) )) (define-abbrev-table 'lisp-mode-abbrev-table '( )) (define-abbrev-table 'fundamental-mode-abbrev-table '( )) (define-abbrev-table 'global-abbrev-table '( ))
Erstellt: 07.12.2005
© Klaus Wachtler