;; Alle Features dieser ~/.emacs sind unter ;; http://www.leo.org/~loescher/tips.html#xemacs ;; dokumentiert. ;; Options Menu Settings ;; ===================== (cond ((and (string-match "XEmacs" emacs-version) (boundp 'emacs-major-version) (or (and (= emacs-major-version 19) (>= emacs-minor-version 14)) (= emacs-major-version 20)) (fboundp 'load-options-file)) (load-options-file "~/.xemacs-options"))) ;; ============================ ;; End of Options Menu Settings ;;* Pfade erweitern ;; ================================================================== (setq load-path (cons (expand-file-name "~/emacs") load-path)) (setq Info-default-directory-list (cons (expand-file-name "~/info") Info-default-directory-list)) ;; ================================================================== ;;* Einstellungen für Nicht-XEmacs (also emacs) ;; ================================================================== (cond ( (not (string-match "XEmacs" emacs-version)) ;; Turn on font-lock in all modes that support it (if (fboundp 'global-font-lock-mode) (global-font-lock-mode t)) ;; Maximum colors (setq font-lock-maximum-decoration t) ;; Region soll farbig dargestellt werden (transient-mark-mode t) ;; HOME und END unter NT umbelegen (global-set-key [home] 'beginning-of-line) (global-set-key [end] 'end-of-line) ) ) ;; ================================================================== ;;* Mailadresse einstellen (setq user-mail-address (getenv "REPLYTO")) (setq query-user-mail-address nil) ;;* Neue Endungen für Mode-Umschaltung bekanntmachen (setq auto-mode-alist (append '( ("\\.C$" . c++-mode) ("\\.cc$" . c++-mode) ("\\.CPP$" . c++-mode) ("\\.hh$" . c++-mode) ("\\.c$" . c-mode) ("\\.h$" . c++-mode) ("\\.asm$" . asm-mode) ("\\.src$" . pascal-mode) ;; Flex- und Lex-Files ("\\.l$" . indented-text-mode) ;; elm-Dateien werden im Text-Mode geladen: ("snd\." . text-mode) ;; Yarn-Sende-Dateien ("\\.snd$" . text-mode) ("\\.gnus" . emacs-lisp-mode) ;; Gnus-SCORE-Files ("\\.SCORE" . emacs-lisp-mode) ) auto-mode-alist)) ;; Bis hier geht die Emacs-Einstellung ;;* Tastatur-Einstellungen ;; ================================================================== ;; DEL soll auch wirklich DEL sein ;; Das geht mit XEmacs 20.3 unter ;; `system-configuration': "alpha-dec-osf4.0" (cond ( (not (eq system-type 'linux)) ;; Nur unter Nicht-Linux laden ;; (require 'delbs) ;; (delbs-enable-delete-forward) (setq delete-key-deletes-forward 't) ) ) ;; Tastatur-Einstellungen für HPUX 10.20 mit HP-PC, HP-720 (cond ( (eq system-type 'hpux) ;; Nur unter HPUX umdefinieren (global-set-key [hpDeleteChar] 'delete-char) (global-set-key [hpInsertChar] 'overwrite-mode) ) ) ;; Diesen Block nur unter X ausführen, sonst (Terminal) nicht (if (eq 'x (device-type)) (cond ( (eq system-type 'linux) ;; Nur unter Linux umdefinieren (global-set-key [delete] 'delete-char) ;; Damit funktioniert DEL/BS auch in allen Modulen, wie ;; z.B.: C-Perl, Lisp, C, HTML, ... (global-set-key '[(delete)] 'delete-backward-char) (keyboard-translate 'delete 'deletechar) ;; (keyboard-translate 'backspace 'delete) (global-set-key '[(deletechar)] 'delete-char) ) ) ) ;; C-z macht dasselbe, wie C-y (Für englische Tastaturen) (global-set-key [(control z)] [(control y)]) ;; Control-Tab schaltet zum nächsten Buffer (global-set-key [(control tab)] 'sl-switch-to-other-buffer) ;; F2: Speichern mit `save-buffer' (global-set-key 'f2 'save-buffer) ;; F8: Speichern und Buffer schließen (global-set-key 'f8 'sl-save-and-close-current-buffer) ;; verbessertes "capitalize-word" (global-set-key [(meta c)] 'sl-capitalize-region-or-word) ;; Tastenbelegungen für den C-mode und c++-mode ;; Siehe auch: Hilfe zu compile-command (add-hook 'c-mode-hook (function (lambda () (define-key c-mode-map '(f9) 'compile) (define-key c-mode-map '(f11) 'next-error) (define-key c-mode-map '(shift f11) 'previous-error) ))) (add-hook 'c++-mode-hook (function (lambda () (define-key c-mode-map '(f9) 'compile) (define-key c-mode-map '(f11) 'next-error) (define-key c-mode-map '(shift f11) 'previous-error) ))) ;; Tastenbelegungen für den Java-Mode (add-hook 'java-mode-hook (function (lambda () (define-key java-mode-map '(f9) 'compile) (progn (make-local-variable 'compile-command) (setq compile-command (concat "javac " buffer-file-name)))) )) ;; Tastenbelegungen für den LaTeX-mode (add-hook 'LaTeX-mode-hook (function (lambda () (turn-on-auto-fill) ;; Goto-Line geht sonst nicht wie gewohnt (define-key LaTeX-mode-map '(meta g) 'goto-line) ;; C-i macht aus der Region einen Index-Eintrag (define-key LaTeX-mode-map '(control i) "\C-w{\\bf \C-y}\\index{\C-y}") ;; Latex-Lauf starten mit F9 (define-key LaTeX-mode-map '(f9) "\C-c\C-cLaTeX Interactive\r\M-xTeX-recenter-output-buffer\r") ;; XDVI starten mit F10 (define-key LaTeX-mode-map '(f10) [(control x) \1 (control c) (control c) V i e w return > / d e v / n u l l (control a) right right right right right - g e o m e t r y space \1 \0 \1 \4 x \7 \4 \2 + \0 + \0 space return] ) ;; Fehler anspringen (define-key LaTeX-mode-map '(f11) 'TeX-next-error) ;; Index-Eintrag (define-key LaTeX-mode-map '(f5) [(meta w) \\ i n d e x { (control y) }]) ))) ;; LaTeX-Umbelegung für die Alpha (if (string-equal "ALPHA" (getenv "PLATFORM")) (global-set-key 'f10 [(control c) (control c) V i e w return (control a) right right right right right + space - g e o m e t r y space \1 \2 \4 \0 x \9 \8 \9 + \0 + \0 space - t h o r o u g h space - s space \2 space return]) ) ;; Den Text "snip ... snap" für Zitate einfügen mit F12 (global-set-key 'f12 [- - - - - space s n i p space (control u) \6 \0 - return - - - - - space s n a p space (control u) \6 \0 - home return up]) ;; Ins Menü springen mit F5: (define-key global-map [f5] 'accelerate-menu) ;; ================================================================== ;;* Eigene Funktionen ;; ================================================================== ;; Funktionen zum Versions-Management (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)) (defun running-emacs-version-or-newer (major minor) (or (> emacs-major-version major) (and (= emacs-major-version major) (>= emacs-minor-version minor)))) ;;* Aktuellen Buffer schließen. Funktioniert auch mit Gnuclient-Buffers." (defun sl-close-current-buffer () "Aktuellen Buffer schließen. Funktioniert auch mit Gnuclient-Buffers." (interactive) ;; ;; Wenn es die Funktion gnuserv-buffer-p gibt, dann ist es der neue Gnuclient ;; (if (boundp 'gnuserv-buffer-p) ;; ( ;; (if (gnuserv-buffer-p (current-buffer)) ;; (gnuserv-edit) ;; ) ;; ) ;; ;; sonst (kill-buffer nil) ;; ) ) ;; Aktuellen Buffer speichern und schließen. ;; Funktioniert auch mit Gnuclient-Buffers." (defun sl-save-and-close-current-buffer () "Aktuellen Buffer speichern und schließen. Funktioniert auch mit Gnuclient-Buffers." (interactive) (save-buffer) (sl-close-current-buffer) ) ;; Schaltet zum nächsten Buffer. Entspricht (switch-to-other-buffer 0) (defun sl-switch-to-other-buffer () "Schaltet zum nächsten Buffer. Entspricht (switch-to-other-buffer 0)." (interactive) (switch-to-other-buffer 0) ) ;; Schreibt das Wort, in dem der Cursor steht groß (defun sl-capitalize-region-or-word () "Schreibt das Wort, in dem der Cursor steht groß." (interactive) (backward-word 1) (capitalize-region-or-word 1) ) ;; ================================================================== ;;* Hintergrundfarbe einstellen ;(set-face-background 'default "white") (cond ( (eq window-system 'x) (set-face-background 'default "white") ) ) ;;* Mit leerem Scratch anfangen (setq initial-scratch-message nil) ;;* Font-Einstellungen ;; ================================================================== (set-face-font 'default "*courier-bold-r*120*") (cond ( (eq system-type 'aix) ;; Nur unter AIX anderen Font nehmen (set-face-font 'default "*courier-normal-r*120*") ) ) ;; Auch ganz schön: (set-face-font 'default "*Fixed-Bold-R*120*") ;; ================================================================== ;;* Drucker und Pretty-Print-Einstellungen ;; ================================================================== (setq ps-header-lines 1) ;; Nur Filename und Seitenzahl anzeigen (load "ps-print") (setq ps-print-color-p t) ;; Farbig drucken (setq ps-paper-type 'ps-a4) ;; Papiergröße ist A4 (cond ((running-emacs-version-or-newer 20 0) (setq ps-paper-type 'a4) ;; Für das neue ps-print.el )) (setq lpr-switches '("-Ptext")) ;; "print" druckt auf Drucker "text" und (setq ps-lpr-switches '("-Pps")) ;; "pretty-print" druckt auf Drucker "ps" ;; ================================================================== ;;* Font-Lock (Syntax-Highlighting) einschalten (setq-default font-lock-auto-fontify t) (setq-default font-lock-use-fonts nil) (setq-default font-lock-use-colors t) (require 'font-lock) ;;* Klammernblinken einschalten (require 'paren) (paren-set-mode 'blink-paren) ;;* Gnuserver für Gnuclient starten ;; Man kann dann mit "gnuclient FILE" am Shell-Prompt die Datei FILE editieren (gnuserv-start) ;; Für GNU-Server-Buffers sollen keine neuen Frames aufgehen (setq gnuserv-frame (selected-frame)) ;; Gnuclient-Buffers ohne Rückfrage schließen (setq gnuserv-kill-quietly t) ;;* Zeilennummer und Spaltennummer anzeigen ;;(setq line-number-mode t) (setq line-number-mode 't) (setq column-number-mode 't) ;;* Overfull-Boxen in LaTeX anspringen (setq TeX-debug-bad-boxes t) ;;* Load the auto-save.el package, which lets you put all of your autosave ;;* files in one place, instead of scattering them around the file system. (setq auto-save-directory (expand-file-name "~/autosave/") auto-save-directory-fallback auto-save-directory auto-save-hash-p nil ange-ftp-auto-save t ange-ftp-auto-save-remotely nil ;; now that we have auto-save-timeout, let's crank this up ;; for better interactive response. auto-save-interval 1000 ) ;; We load this afterwards because it checks to make sure the ;; auto-save-directory exists (creating it if not) when it's loaded. (require 'auto-save) ;;* Load crypt, which is a package for automatically decoding and reencoding ;;* files by various methods - for example, you can visit a .Z or .gz file, ;;* edit it, and have it automatically re-compressed when you save it again. (setq crypt-encryption-type 'pgp ; default encryption mechanism crypt-confirm-password t ; make sure new passwords are correct crypt-never-ever-decrypt t ; if you don't encrypt anything, set this to ; tell it not to assume that "binary" files ; are encrypted and require a password. ) (require 'crypt) ;;* func-menu: Alle Funktionen (oder Kapitel) in einem Menü anzeigen (cond ((string-match "XEmacs" emacs-version) (require 'func-menu) (define-key global-map 'f7 'function-menu) (add-hook 'find-file-hooks 'fume-add-menubar-entry) (define-key global-map "\C-cl" 'fume-list-functions) (define-key global-map "\C-cg" 'fume-prompt-function-goto) ;; The Hyperbole information manager package uses (shift button2) and ;; (shift button3) to provide context-sensitive mouse keys. If you ;; use this next binding, it will conflict with Hyperbole's setup. ;; Choose another mouse key if you use Hyperbole. (define-key global-map '(shift button3) 'mouse-function-menu) ;; For descriptions of the following user-customizable variables, ;; type C-h v (setq fume-max-items 25 fume-fn-window-position 3 fume-auto-position-popup t fume-display-in-modeline-p t fume-menubar-menu-location "File" fume-buffer-name "*Function List*" fume-no-prompt-on-valid-default nil) )) ;;* Die zuletzt geladenen Files in einem Menü darstellen (require 'recent-files) (recent-files-initialize) ;;* Perl-Mode (CPerl) (require 'cperl-mode) (setq cperl-font-lock t) (setq auto-mode-alist (append '(("\\.\\([pP][Llm]\\|al\\)$" . cperl-mode)) auto-mode-alist )) (setq interpreter-mode-alist (append interpreter-mode-alist '(("miniperl" . cperl-mode)))) (setq cperl-continued-statement-offset 0) ;(setq perl-indent-level 2) ;; Damit kann man alle Features einschalten: ;;(setq cperl-hairy t) ;;(setq cperl-extra-newline-before-brace t) ;;(setq cperl-auto-newline t) ;;(setq cperl-auto-newline-after-colon t) ;;* Am Textende sollen keine Leerzeilen hinzugefuegt werden, wenn man mit dem ;;* Cursor weiter nach unten geht (setq next-line-add-newlines nil) ;;* Damit merkt sich XEmacs die Cursor-Position in allen Files ;;* Man befindet sich bei naechsten Laden des gleichen Files wieder an ;;* gleichen Stelle (require 'saveplace) (setq-default save-place t) ;;* Es wird verhindert, dass XEmacs seine Region verliert, wenn man mit dem ;;* Cursor beim Markieren an das Ende des Buffers gelangt (defadvice scroll-up (around scroll-up freeze) (interactive "_P") (let ((zmacs-region-stays t)) (if (interactive-p) (condition-case nil ad-do-it (end-of-buffer (goto-char (point-max)))) ad-do-it))) (defadvice scroll-down (around scroll-down freeze) (interactive "_P") (let ((zmacs-region-stays t)) (if (interactive-p) (condition-case nil ad-do-it (beginning-of-buffer (goto-char (point-min)))) ad-do-it))) ;;* aucTeX laden (if (locate-library "tex-site") (load "tex-site")) ;;* Der Maus-Cursor weicht dem Text-Cursor aus ;; Besser: "unclutter" unter X! ;(cond (window-system ; (require 'avoid) ; (mouse-avoidance-mode 'animate))) ;;* Text wird am Textcursor eingefügt (setq-default mouse-yank-at-point t) ;;* File-Existenz prüfen geht so: ;; (cond (file-exists-p "filename") (load "filename")) ;;* Einstellungen für VM (E-Mail) ;; Achtung: der VM kopiert die Mailbox und löscht sie dann! ;; Ich will keine neuen Frames ;(setq vm-mutable-frames nil) ;(setq vm-frame-per-composition nil) ;(setq vm-frame-per-folder t) ;(setq vm-frame-per-edit nil) ;(setq vm-frame-per-summary nil) ;;* Im Text-Modus Auto-Fill verwenden (setq text-mode-hook 'turn-on-auto-fill) (setq-default fill-column 72) ;; oder auch: (add-hook 'xyz-mode-hook 'turn-on-auto-fill) ;; Mit M-q kann man Region oder Paragraph neu formatieren. ;;* Fill-Adapt: Diverse Verbesserungen für auto-fill ;; (require 'filladapt) ;; (setq-default filladapt-mode t) ;;* Mit "%" zur passenden Klammer springen, wenn Cursor auf einer Klammer steht (global-set-key "%" 'match-paren) (defun match-paren (arg) "Go to the matching parenthesis if on parenthesis otherwise insert %." (interactive "p") (cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1)) ((looking-at "\\s\)") (forward-char 1) (backward-list 1)) (t (self-insert-command (or arg 1))) ) ) ;;* Nicht nach dem Make-Kommando fragen, sondern einfach make starten (setq compilation-read-command nil) ;;* Anzahl der Zeilen im compilation-window (setq compilation-window-height 10) ;;* Die Turbo-Pascal-Tastenbelegungen ;; Doku: define-key (global-set-key [control-home] 'beginning-of-buffer) (global-set-key [control-end] 'end-of-buffer) ;;(global-set-key [shift-delete] 'kill-region) (global-set-key [control-insert] 'kill-ring-save) (global-set-key [shift-insert] 'yank) ;;* Minibuffer-History (require 'savehist) (savehist-load) ;; In savehist v0.4 ist folgende Änderung für XEmacs 19.14 notwendig: ;; "(require 'custom)" ersetzen durch: ;----- ;(eval-and-compile ; (condition-case () ; (require 'custom) ; (error nil)) ; (if (and (featurep 'custom) (fboundp 'custom-declare-variable)) ; nil ;; We've got what we needed ; ;; We have the old custom-library, hack around it! ; (defmacro defgroup (&rest args) ; nil) ; (defmacro defface (var values doc &rest args) ; (` (make-face (, var)))) ; (defmacro defcustom (var value doc &rest args) ; (` (defvar (, var) (, value) (, doc)))))) ;----- ;;* WWW-Einstellungen ;; Normalerweise alle URLs im Netscape öfnnen: (setq-default browse-url-browser-function 'browse-url-netscape) ;; Home für W3: (setq w3-default-homepage "file:~/emacs.html") ;; Proxy-Einstellungen für W3 ;;(setq url-proxy-services '(("http" . "localhost:3128") ;; ("ftp" . "localhost:3128") ;; ("gopher" . "localhost:3128") ;; ("wais" . "localhost:3128") ;; )) (setq url-proxy-services '(("http" . "proxy:8080") ("ftp" . "proxy:8080") ("gopher" . "proxy:8080") ("wais" . "proxy:8080") )) ;;* TM (MIME) für Gnus laden: (load "mime-setup") (setq message-signature t) ;; Sonst wird die .signature nicht eingefügt! (setq mime-editor/split-message nil) ;; Messages nicht splitten. ;; ACHTUNG: Ab Gnus 5.8 darf man das tm nicht mehr laden! ;; Files anhängen geht dann mit: M-m f ;; Toolbar auf Gnus einstellen (setq toolbar-news-use-separate-frame nil) (setq toolbar-news-reader (quote gnus)) ;;* In LaTeX Umlaute tippen und als "a, etc. speichern. ;; (require 'iso-cvt) ;;* HTML-ize laden (Benutzung: M-x htmlize-buffer) (if (locate-library "htmlize") (load "htmlize")) ;;* LaTeX-ize laden (Benutzung: M-x latexize-buffer) (if (locate-library "latexize") (load "latexize")) (defun sl-ps-print-buffer-with-faces-to-file (&optional filename) "Generate and print a PostScript image of the buffer. You are prompted for a filename to save the PostScript file. Like `ps-print-buffer', but includes font, color, and underline information in the generated image. This command works only if you are using a window system, so it has a way to determine color values." (interactive (list (ps-print-preprint 1))) (ps-generate (current-buffer) (point-min) (point-max) 'ps-generate-postscript-with-faces) (ps-do-despool filename) ) (add-menu-item '("File") "Pretty-Print current buffer to file..." 'sl-ps-print-buffer-with-faces-to-file t "Pretty-Print Buffer") ;;* Im psgml-Mode (sgml-mode, html-mode) richtig mit Umlauten umgehen (defun html-init-file-hook () (sgml-charent-to-display-char) (make-local-hook 'after-save-hook) (add-hook 'after-save-hook '(lambda () (sgml-charent-to-display-char) (set-buffer-modified-p nil)) t t) (add-hook 'local-write-file-hooks 'sgml-display-char-to-charent)) (add-hook 'html-mode-hook 'html-init-file-hook) ; Weiteres: (add-hook 'html-mode-hook 'hm--html-minor-mode) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;* Ab hier noch Test-Phase ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; New buffers should stay in the same frame (setq-default temp-buffer-show-function 'show-temp-buffer-in-current-frame) ;; ispell auf das deutsche Wörterbuch mit Umlauten umstellen ;(ispell-change-dictionary "deutsch8") ;(setq ispell-dictionary "deutsch8") ;;;* ISpell-Setup by Michael Deindl ;(global-set-key "\M-#" 'ispell-word) ;(global-set-key "\C-cim" 'ispell-message) ;(global-set-key "\C-cib" 'ispell-buffer) ;(global-set-key "\C-cic" 'ispell-change-dictionary) ;(global-set-key "\C-cid" '(lambda () "set german dictionary" ; (interactive) ; (ispell-change-dictionary "deutsch8") ; )) ;(global-set-key "\C-cie" '(lambda () "set english dictionary" ; (interactive) ; (ispell-change-dictionary "english") ; )) ;;;* Fly-Spell: ;; Default-Dictionary für flyspell ;(setq flyspell-default-dictionary "deutsch8") ;; Einbinden von flyspell; Zusatzpaket von http://kaolin.unice.fr/~serrano/emacs/flyspell ;(autoload 'flyspell-mode "flyspell" "On-the-fly spelling checking" t) ;(autoload 'global-flyspell-mode "flyspell" "On-the-fly spelling" t) ;(add-hook 'message-mode-hook 'flyspell-mode) ;(add-hook 'sgml-mode-hook 'flyspell-mode) ;(add-hook 'LaTeX-mode-hook 'flyspell-mode)