;;;; .emacs.el ;;;; Kommentare werden mit einem Semikolon eingeleitet ;;;; Alles mit vier Strichpunkten eingeleitete sind Zusatzkommentare, ;;;; um weitergehende Informationen zu geben. Die anderen Kommentare ;;;; stehen so in der Originaldatei. ;; <<<<<<<<<<<<<<<<<<<< load-path >>>>>>>>>>>>>>>>>>>>>>>> ;;;; Hier wird eine Variable gesetzt, naemlich die Variable ;;;; `load-path', die dem Emacs mitteilt, wo er nach Elisp- ;;;; Dateien suchen soll. `append' ist eine Funktion, die ;;;; eine Liste an eine andere Liste anhaengt. ;;;; Die Prosaform der unten ;;;; stehenden Anweisung lautet: ;;;; "Schreibe in die Variable load-path eine Liste mit dem ;;;; bisherigen Inhalt der Variablen load-path , an die du ;;;; diese Liste mit Pfadnamen anhaengst!" (setq load-path (append '( "~/emacs" "~/emacs/ecb" "/usr/local/share/cis/emacs" "/usr/share/emacs/site-lisp/elib" "/usr/share/emacs/site-lisp/eieio" "/usr/share/emacs/site-lisp/semantic" "/usr/share/emacs/site-lisp/speedbar" "/usr/share/emacs/site-lisp/bbdb" "/usr/share/emacs/site-lisp/w3m" "/usr/share/emacs/site-lisp/mailcrypt" "/usr/share/emacs/site-lisp/psgml" "/usr/share/emacs/site-lisp/misc" ) load-path)) ;;;; Hier werden einige Dateien geladen, das heisst, ihr Inhalt wird ;;;; evaluiert. An dieser Stelle der Hinweis, dass alles in dieser ;;;; Datei auf mein System angepasst ist. Vieles davon wird auf ;;;; anderen Systemen nicht vorhanden sein. Die Dateien, die unten ;;;; geladen werden, existieren nur auf CIS-Rechnern. (load "cis-tramp.el") (load "cis-ilisp.el") (load "cis-ede.el") (load "cis-html-helper-mode.el") (load "cis-preview-latex.el") (load "cis-tex.el") (load "cis-w3m.el") (load "cis-jde.el") ;;;; Hier stelle ich den Standard-Browser auf Opera. Die Loesung ist ;;nicht gerade schoen, weil ich eigentlich die falsche Variable dafuer ;;verwende, aber sie funktioniert. :-) ;; Browser (setq browse-url-netscape-program "/usr/bin/opera") ;;;; Mit dieser Variablen gibt man der URL, die man im Opera ;;;; darstellen lassen will, die Information mit, dass das in einem ;;;; neuen Browser-Fenster geschehen soll. (setq browse-url-new-window-flag t) ;;;; Tastaturbelegungen kann man sich nach Lust und Laune ;;;; umdefinieren. `global-set-key' definiert sie global um, das ;;;; heisst, sie gelten in jedem Mode. Deshalb sollte man dabei ein ;;;; bisschen vorsichtig sein. `global-set-key' nimmt als erstes ;;;; Argument ein Tastenkuerzel und als zweites die Funktion, die ;;;; dabei ausgefuehrt werden soll. Bei der Taste F1 steht ein ;;;; Lambda-Ausdruck. Lambda-Ausdruecke sind vollwertige Funktionen ;;;; wie defuns, nur dass sie keinen Namen haben, etwa, weil man sie ;;;; nur einmal benutzt. Der Lambda-Asudruck bei F1 stellt mir die ;;;; Eingabemethode auf Korean-Hangul um, und da ich das oft brauche, ;;;; liegt es auf einer eigenen Funktionstaste. F12 tut etwas ;;;; aehnliches, es schaltet auf German-Postfix um, das aus "ae" ;;;; automatisch ein a-Umlaut macht usw. Dies brauche ich auch ;;;; haeufig, da ich mit einer US-Tastatur arbeite. F11 schliesslich ;;;; schaltet die Eingabemethoden aus bzw. wieder ein. ;; Tastenbelegung (global-set-key [f1] '(lambda () (interactive) (set-input-method 'korean-hangul))) (global-set-key [pause] 'toggle-read-only) ; HoldScreen (global-set-key [f2] 'split-window) (global-set-key [f3] 'other-window) (global-set-key [S-f3] 'speedbar-get-focus) (global-set-key [f4] 'query-replace-regexp) (global-set-key [f5] 'revert-buffer) (global-set-key [f6] 'gnus) (global-set-key [f7] 'buffer-menu) (global-set-key [f8] 'kill-buffer-other-window) ;; selbsterklaerend (global-set-key [f9] 'create-tex-letter) ;; f10 for accessing menu in console mode (global-set-key [S-f10] 'increase-quote-level) (global-set-key [f11] 'toggle-input-method) (global-set-key [f12] '(lambda () (interactive) (set-input-method 'german-postfix))) (global-set-key [S-f12] 'my-uncomment-region) ;;;; Nun folgen einige Funktionsdefinitionen, die ich selbst ;;;; geschrieben oder von anderen uebernommen habe. ;; ;; Eigendefinierte Funktionen ;; ;; gut, wenn man einen Hinweis-buffer weghaben oder in Gnus das Artikel-Fenster ;; schliessen moechte ;;;; diese Funktion liegt, wie man oben sehen kann, bei mir auf F8 ;;;; Der String in zweiter und dritter Zeile der Funktion ist ein ;;;; Doc-String. Er wird angezeigt, wenn man das System nach ;;;; Informationen ueber die Funktion fragt (siehe Emacs-Tutorial). (defun kill-buffer-other-window (arg) "Kill the buffer in the other window, and make the current buffer full size. If no other window, kills current buffer." (interactive "p") (let ((buf (save-window-excursion (other-window arg) (current-buffer)))) (delete-windows-on buf) (kill-buffer buf))) ;; deutsche Sonderzeichen entfernen (defun med-remove-umlauts () "Entfernt deutsche Sonderzeichen aus dem Buffer." (interactive) (dolist (uml '(("ä" "ae") ("Ä" "Ae") ("ö" "oe") ("Ö" "Oe") ("ü" "ue") ("Ü" "Ue") ("ß" "ss"))) (perform-replace (car uml) (cdr uml) (point-min) (point-max) nil nil nil))) ;;;; M-x med-tex-umlauts ruft die folgende Funktion auf, die im ganzen ;;;; Buffer deutsche Sonderzeichen durch ihre TeX-Umschreibungen ersetzt. ;; deutsche durch TeX-Umschreibungen ersetzen (defun med-tex-umlauts () "TeXt deutsche Sonderzeichen." (interactive) (dolist (uml '(("ä" "\"a") ("Ä" "\"A") ("ö" "\"o") ("Ö" "\"O") ("ü" "\"u") ("Ü" "\"U") ("ß" "\"s"))) (perform-replace (car uml) (cdr uml) (point-min) (point-max) nil nil nil))) ;; quoted-printable in die richtigen Zeichen umwandeln (defun med-repair-qp () "Macht aus quoted-printable lesbaren Text." (interactive) (dolist (uml '(("=E4" "ä") ("=A4" "Ä") ("=F6" "ö") ("=D6" "Ö") ("=FC" "ü") ("=DC" "Ü") ("=DF" "ß") ("=20" "\n") ("=" ""))) (perform-replace (car uml) (cdr uml) (point-min) (point-max) nil nil nil))) ;;;; Diese Funktion ruft ein externes Programm auf, um den aktuellen ;;;; Buffer darauf zu ueberpruefen, ob er valides HTML enthaelt und ;;;; Fehler gegebenenfalls zu korrigieren. ;; Funktion fuer HTML-tidy innerhalb Emacs (global-set-key "\C-xt" 'tidy-region) (setq shell-command-default-error-buffer "tidy-errors") ; define an error buffer (defun tidy-region () "Run Tidy HTML parser on current region." (interactive) (let ((start (point-min)) (end (point-max)) (command "tidy -config /home/reboot/.tidy")) (shell-command-on-region start end command t t shell-command-default-error-buffer)) (font-lock-fontify-buffer)) ;; Euro (defun insert-euro () "insert the euro sign" (interactive "*") (insert (string (make-char 'latin-iso8859-15 164)))) ;; uncomment-region (defun my-uncomment-region (point-min point-max) (interactive "r") (comment-region point-min point-max -1)) ;;;; Das folgende ist ein Beispiel fuer ein Tastaturmakro. So etwas ;;;; schreibt man normalerweise nicht selbst, sondern man zeichnet es ;;;; mit dem Emacs-Makrorecorder auf und kopiert es dann hier rein. ;; fuegt > ein (liegt auf F10) (fset 'increase-quote-level [?\C-a ?> ? down ?\C-a]) ;;* ;;* diverse Einstellungen ;;* ===================== ;;;; Evaluieren von Emacs-Code in allen Buffern ermoeglichen (Cave!) (put 'eval-expression 'disabled nil) ;;;; Dies startet den Emacs im Server-Mode. Anstatt 'emacs ' ;;;; kann man nun 'emacsclient sagen, und die Datei wird im ;;;; laufenden Emacs geladen. Sehr praktisch und unbedingt zu ;;;; empfehlen, weil man so die lange Ladezeit des Emacs nur einmal am ;;;; Tag hat. Emacsclient-Buffer schliesst man nicht mit C-x k, ;;;; sondern mit C-x #. (server-start) ;; Schriftart ;;;; Die hier eingestellte Standardschrift hat keinen kursiven ;;;; Schnitt, ich mag sie aber viel lieber als die voreingestellte. (set-default-font "-b&h-lucidatypewriter-medium-r-normal-sans-17-120-100-100-m-80-iso8859-1") ;;;; Die folgenden Einstellungen sind auskommentiert. Die hatte ich ;;;; frueher mal. ;; (set-default-font "-Adobe-Courier-Medium-R-Normal--14-140-75-75-M-90-ISO8859-1") ;; (set-default-font "-Adobe-Courier-Medium-R-Normal--20-140-100-100-M-110-ISO8859-1") ;; (set-default-font "-monotype-andale mono-medium-r-normal--0-0-0-0-m-0-iso8859-1") ; (set-default-font "-adobe-courier-medium-r-normal--18-180-75-75-m-110-iso8859-1") ;; (add-to-list 'default-frame-alist '(background-mode . dark)) ;; (set-background-color "DarkSlateGray") ;; (set-foreground-color "Wheat") ;; (set-face-background 'default "DarkSlateGray") ;; (set-face-foreground 'default "Wheat") ; (unless window-system ; (set-face-background 'default "snow1")) ;;;; Uhrzeit in der Statuszeile anzeigen (display-time) ;;;; nicht beim Runterscrollen staendig den Cursor in Bildmitte setzen (setq scroll-conservatively 1) ;;;; Markierte Textbereiche farbig anzeigen. (setq transient-mark-mode t) ;;;; Toolbar brauche ich nicht, nimmt nur Platz weg. (tool-bar-mode -1) ;;;; Mach Leerzeichen anstatt Tabulatorzeichen. In der Regel ;;;; empfehlenswert, vor allem wenn man programmiert und Code ;;;; mit anderen austauscht. (setq-default indent-tabs-mode nil) ;;* ;;* verschiedene Modi ;;* ================= ;;;; Die folgenden Einstellungen sind teilweise fuer Modes, die nicht ;;;; unbedingt auf jedem System vorhanden sind. Was auskommentiert ;;;; ist, benutze ich entweder selbst nicht mehr, oder es wird am CIS ;;;; aus anderen Dateien konfiguriert. ;;;; Im Text-Modus automatisch umbrechen, sobald 78 Zeichen erreicht sind ;; Text-Modus (add-hook 'text-mode-hook 'turn-on-auto-fill) (setq fill-column 78) ;;;; C-Mode-Einstellungen ;; C (add-hook 'c-mode-common-hook '(lambda () (c-set-style "stroustrup") (c-set-offset 'case-label 4))) ;;;; Alles, was mit TeX zu tun hat, wird am CIS aus einer anderen ;;;; Datei vorkonfiguriert. AucTeX und preview-LaTeX sind sehr ;;;; praktische Modes fuer LaTeX-Nutzer. AucTeX stellt viele ;;;; komfortable Funktionen zur Verfuegung, und preview-LaTeX dient ;;;; dazu, bereits im LaTeX-Sourcecode innerhalb des Emacs Formeln und ;;;; anderes so darzustellen, wie es spaeter im Dokument erscheint. ;; AUC-TeX ;; (require 'tex-site) ;; (setq-default TeX-master nil) ;; (setq TeX-parse-self t) ;; (add-hook 'TeX-mode-hook '(lambda () (setq fill-column 78))) ;; RefTeX für LaTeX-Files starten ;(add-hook 'LaTeX-mode-hook 'turn-on-reftex) ;; Preview-LaTeX ;(autoload 'LaTeX-preview-setup "preview") ;(add-hook 'LaTeX-mode-hook #'LaTeX-preview-setup) ;;;; Ein sehr praktischer Mode zum Briefeschreiben mit LaTeX. Nicht ;;;; standardmaessig vorhanden. ;; letter-template (autoload 'create-tex-letter "letter-template" "Schnell einen Brief schreiben" t) (setq *letter-default-dir* "~/brief/") (setq *letter-template-file* (list "~/brief/template/brief.tex" "~/brief/template/cis-lettr.tex")) ;;;; Dieser Mode erzeugt Tabellen fuer LaTeX und HTML. Nicht ;;;; Standard. ;; Table-Mode ;; (require 'table) ;; (add-hook 'text-mode-hook 'table-recognize) ;; Speedbar (autoload 'speedbar-frame-mode "speedbar" "Popup a speedbar frame" t) (autoload 'speedbar-get-focus "speedbar" "Jump to speedbar frame" t) (define-key-after (lookup-key global-map [menu-bar tools]) [speedbar] '("Speedbar" . speedbar-frame-mode) [calendar]) ;;;; `require'-Anweisungen bedeuten "Lade diesen Mode, damit er bei ;;;; Bedarf verfuegbar ist". Die folgenden sind Nicht-Standard, aber ;;;; hilfreich fuer verschiedene andere Modes. ;; eieio (require 'cl) (require 'eieio-speedbar) (require 'tree) (require 'chart) ; ;; JDE ; (require 'jde) ;;;; Einstellungen fuer den HTML-Helper-Mode, mit dem auch diese Seite ;;;; erzeugt wurde. Wird am CIS teilweise von anderer Stelle ;;;; konfiguriert. ;; HTML-Helper-Mode ;(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t) ;(setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist)) (setq html-helper-htmldtd-version "\n") (setq html-helper-timestamp-start "") (setq html-helper-new-buffer-template '(html-helper-htmldtd-version "\n\n\n" "" p "\n\n\n" "\n" "

" p "

\n\n" p html-helper-timestamp-start html-helper-timestamp-end "\n \n")) ; (add-hook 'html-helper-load-hook '(lambda () (require 'html-font))) ; (add-hook 'html-helper-mode-hook '(lambda () (font-lock-mode 1))) ; (add-hook 'html-helper-mode-hook '(lambda () (auto-fill-mode -1))) ;;;; Crypt++ dient zum Ver- und Entschluesseln von Dateien, bei mir ;;;; mit gpg, dem GNU Privacy Guard. N-S. ; ;; Crypt++ (require 'crypt++) (setq crypt-encryption-type 'gpg) (modify-coding-system-alist 'file "\\.bz\\'" 'no-conversion) (modify-coding-system-alist 'file "\\.bz2\\'" 'no-conversion) (modify-coding-system-alist 'file "\\.gpg\\'" 'no-conversion) (modify-coding-system-alist 'file "\\.gz\\'" 'no-conversion) (modify-coding-system-alist 'file "\\.Z\\'" 'no-conversion) ;;;; Boxquote macht nette ASCII-Boxen um Textbestandteile. N-S. ;; boxquote (require 'boxquote) ; ;; PSGML-Mode ; (autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t) ;; Prolog-Mode ;; (setq load-path (cons "/usr/local/lib/sicstus3" load-path)) ;; (autoload 'run-prolog "prolog" "Start a Prolog sub-process." t) ;; (autoload 'prolog-mode "prolog" "Major mode for editing Prolog programs." t) ;; (autoload 'mercury-mode "prolog" "Major mode for editing Mercury programs." t) ;; (setq prolog-system 'sicstus) ;; (setq auto-mode-alist (append '(("\\.pro$" . prolog-mode)) ;; auto-mode-alist)) ;; PHP-Mode ;; (require 'php-mode) ;;;; Einstellungen fuer Allegro Lisp, das ich momentan nicht benutze. ;; Franz Lisp ;; ; (defvar *eli-directory*) ; (setq *eli-directory* (expand-file-name "/opt/acl60/eli/")) ; (setq load-path (cons *eli-directory* load-path)) ; (load (format "%sfi-site-init" *eli-directory*)) ; (setq fi:common-lisp-image-name "/opt/acl60/mlisp") ; (setq fi:common-lisp-host "sudo.cis.uni-muenchen.de") ; ;; This function starts up lisp with your defaults. ; (defun run-common-lisp () ; (interactive) ; (fi:common-lisp fi:common-lisp-buffer-name ; fi:common-lisp-directory ; fi:common-lisp-image-name ; fi:common-lisp-image-arguments ; fi:common-lisp-host)) ;; Set up a keybinding for `run-common-lisp', two possible ways: ; (progn ; (setq ctlx-3-map (make-keymap)) ; (define-key ctl-x-map "3" ctlx-3-map) ; (define-key ctlx-3-map "l" 'run-common-lisp)) ; ;; or this: ; (define-key global-map "\C-xl" 'run-common-lisp) ;; Run cl each time emacs is run: ; (run-common-lisp) ;;;; ILISP benutze ich hingegen haeufig, es ist *der* Mode, um Common ;;;; Lisp zu programmieren. N-S, wird am CIS teilweise vorgeladen. ;;; ILISP ;(require 'completer) ;; (autoload 'clisp-hs "ilisp" ;; "Inferior generic Common Lisp." t) ;; (autoload 'cmulisp "ilisp" ;; "Inferior CMU Common Lisp." t) ;; (setq cmulisp-program "lisp") ;; (setq clisp-hs-program "clisp -I") (setq ilisp-site-hook '(lambda () (setq ilisp-motd "CLISP ISLISP V%s") (setq expand-symlinks-rfs-exists t) (setq lisp-indent-function #'common-lisp-indent-function))) (setq common-lisp-hyperspec-symbol-table "file:/usr/local/doc/lisp/HyperSpec/Data/Map_Sym.txt") ;; (setq auto-mode-alist ;; (append '(("\\.lisp$" . lisp-mode) ;; ("\\.lsp$" . lisp-mode) ;; ("\\.cl$" . lisp-mode)) ;; auto-mode-alist)) ;; (setq lisp-mode-hook '(lambda () (require 'ilisp))) ;; (require 'hyperspec) ;;;; VM ist ein Mail-Mode, den ich nicht benutze. Gnus, das ich ;;;; zum E-Mail- und Newslesen benutze, hat eine eigene ;;;; Konfigurationsdatei, .gnus.el. ;; vm ;; (autoload 'vm "vm" "Start VM on your primary inbox." t) ;; (autoload 'vm-other-frame "vm" "Like `vm' but starts in another frame." t) ;; (autoload 'vm-visit-folder "vm" "Start VM on an arbitrary folder." t) ;; (autoload 'vm-visit-virtual-folder "vm" "Visit a VM virtual folder." t) ;; (autoload 'vm-mode "vm" "Run VM major mode on a buffer" t) ;; (autoload 'vm-mail "vm" "Send a mail message using VM." t) ;; (autoload 'vm-submit-bug-report "vm" "Send a bug report about VM." t) ;;;; Noch besser als der eingebaute show-paren-mode. N-S. ;; mic-paren (require 'mic-paren) (paren-activate) ;;;; Die folgenden werden am CIS vorgeladen. ;; semantic ; (setq semantic-load-turn-everything-on t) ; (require 'semantic-load) ;; Emacs Code Browser ECB ; (require 'ecb) ;; Emacs Development Environment ; (require 'ede) ;;;; Tramp ist mittlerweile Standard. Damit kann man remote (auf ;;;; anderen Rechnern) ueber ssh oder andere Protokolle Dateien ;;;; bearbeiten, als wuerde man an dem anderen Rechner sitzen. ;; Tramp ; (require 'tramp) ;;;; BBDB, die Big Brother Database, speichert Namen, Adressen, ;;;; E-Mail, Telefonnummern und beliebige weitere Informationen ueber ;;;; Leute und ist perfekt in Gnus integriert. ;;;; ;; *** BBDB *** ;; die Adressdatenbank (require 'bbdb) (bbdb-initialize) (add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus) ;; Message-Mode für Mails verwenden (setq bbdb-send-mail-style 'message) ;; BBDB-Einträge als normale Aliase im Message-Mode (autoload 'bbdb-define-all-aliases "bbdb-com" "Hook mail alias feature of BBDB into message-mode." t) (add-hook 'message-setup-hook 'bbdb-define-all-aliases) ;; kein Syntax-Check für Telefonnummern (setq bbdb-north-american-phone-numbers-p nil) ;; immer zu vollem Namen expandieren (setq bbdb-dwim-net-address-allow-redundancy t) ;; eigene Adresse (setq bbdb-user-mail-names (concat user-login-name "@.*")) ;; automatisch abspeichern (setq bbdb-offer-save 'auto) ;; 4 Zeilen-Layout (setq window-min-height 4) (setq bbdb-pop-up-target-lines 4) ;; Kurzform ;(setq bbdb-elided-display t) ;; Kurzform ;(setq bbdb-pop-up-elided-display t) ;; Informationen sammeln (setq bbdb-notice-hook 'bbdb-auto-notes-hook) (setq bbdb-auto-notes-alist (list '("Organization" (".*" company 0)) '("Newsgroups" ("[^,]+" newsgroups 0)) '("Subject" (".*" last-subj 0 t)) '("User-Agent" (".*" mailer 0)) '("X-URL" (".*" www 0)) '("X-Mailer" (".*" mailer 0)) '("X-Newsreader" (".*" mailer 0)))) ;; Trennen der Infos mit Newlines (setq bbdb-notes-default-separator "\n") (add-hook 'bbdb-change-hook 'bbdb-timestamp-hook) (add-hook 'bbdb-create-hook 'bbdb-creation-date-hook) ;; So geben wir der BBDB einen Datumsstempel mit auf den Weg (add-hook 'bbdb-change-hook 'bbdb-creation-date-hook) (add-hook 'bbdb-change-hook 'bbdb-timestamp-hook) ;; und das ist fuer bbdb-frame, das ein neues Fenster mit Kontaktinfos öffnet ;; (load "bbdb-frame") ;; BBDB-envelope ;(load "bbdb-envelope") ;(setq bbdb-envelope-rtn-address "{\\\\Street\\\\City, State ; or Province, Postal Code}\n") ;(define-key bbdb-mode-map [(E)] 'bbdb-envelope-print) ;(define-key bbdb-mode-map [(L)] 'bbdb-envelope-letter-print) ;;;; Ende der Datei.