;; init --- Eine kleine Emacs Konfiguration -*- lexical-binding: t -*- ;;; Commentary: ;; Dieses Datei ist eine modische Beispiel-Konfiguration für GNU ;; Emacs, spezifisch für die Benutzung im CIP und neue Nutzer. ;; Kopiere den Inhalt dieser Datei einfach in die Datei ~/.emacs (oder ;; ~/.config/emacs/init.el wenn man das bevorzugt). In der Shell ;; brauchst du dafür nur diese beiden Befehle ausführen: ;; ;; $ wget -o ~/.emacs https://wwwcip.cs.fau.de/~oj14ozun/src+etc/init.el ;;; Code: ;;;; Automatische Initialisierung (require 'package) (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) ;;;; Allgemeine Optionen ;;;;; Optische Einstellungen (tool-bar-mode -1) ;Verstecke den Tool Bar (load-theme 'modus-operandi t) ;Siehe auch `modus-vivendi' (setf inhibit-startup-screen t ;Unterdrücke den Splash Scren inhibit-startup-echo-area-message t inhibit-startup-message t) ;;;;; Globale minor modes (show-paren-mode t) ;Hebe passende Klammern vor (electric-pair-mode t) ;Fuege automatisch passende Klammern ein (delete-selection-mode t) ;Loesche eine Region wenn etwas eingegeben wird (save-place-mode t) ;Merke wo man zuletzt in einer Datei war (savehist-mode t) ;Merke alte Eingaben zwischen Sessions (recentf-mode t) ;Merke zuletzt besuchte Dateien (xterm-mouse-mode t) ;Unterstuetze die Maus im Terminal ;;;;; Globale Keybindings (global-set-key (kbd "C-c k") #'compile) ;Führe Befehle wie "make" in einem eigenen Fenster aus (global-set-key (kbd "C-c s") #'shell) ;Öffne eine Shell in einem Text-Puffer aus ohne Terminal! (global-set-key (kbd "M-g i") #'imenu) ;Springe zu top-level Deklarationen im Puffer umher (global-set-key (kbd "M-/") #'hippie-expand) ;Vervollständige Wörter mittels Heuristiken (global-set-key [remap list-buffers] #'ibuffer) ;Zähle alle offenen Puffer auf (C-x C-b) ;;;;; Rechtschreibung (use-package aspell :custom (ispell-program-name "aspell") (ispell-dictionary "german-new8") :hook (prog-mode-hook . flyspell-prog-mode) (text-mode-hook . flyspell-mode)) ;;;;; Backup Datien (setq backup-directory-alist '(("" . "~/.local/emacs-backup/")) backup-by-copying t delete-old-versions t) ;;;;; Kopieren in und aus Emacs (setq select-enable-clipboard t save-interprogram-paste-before-kill t mouse-yank-at-point t) ;;;;; (FAU) Email (defvar my/email-address ;; Heuristik um die Email Addresse. Ggf ausdruck ersetzen: (format "%s@fau.de" (downcase (replace-regexp-in-string " " "." (user-full-name))))) (use-package gnus :custom (gnus-select-method '(nnimap "faumail" (nnimap-address "faumail.fau.de") (nnimap-stream starttls))) (gnus-permanently-visible-groups ".*") (send-mail-function #'smtpmail-send-it) (smtpmail-default-smtp-server "faumail.fau.de") (smtpmail-smtp-service 587) (user-mail-address my/email-address) :bind ("" . gnus)) ;;;; Zusätzliche Pakete um Emacs zu erweitern ;;;;; "Vertical Completion" und co. (use-package vertico :ensure t :bind (:map vertico-map ("RET" . vertico-directory-enter) ("DEL" . vertico-directory-delete-char) ("M-DEL" . vertico-directory-delete-word)) :init (use-package orderless :ensure t :defer t :custom (completion-styles '(orderless basic)) (completion-category-defaults nil) (completion-category-overrides '((file (styles partial-completion))))) (use-package consult :ensure t :defer t :bind ([rebind switch-to-buffer] . consult-buffer) ("C-c j" . consult-line)) (vertico-mode t)) ;;;;; Auto-Verfollständigung (use-package company :ensure t :defer t :hook prog-mode-hook) ;;;;; LSP Client (use-package eglot :ensure t :defer t :custom (eglot-autoshutdown t) :hook (prog-mode . eglot-ensure)) ;;;;; Springe Schnell zu Zeichen (use-package avy :ensure t :defer t :bind ("C-z" . avy-goto-char-timer)) ;;;;; Git client (use-package magit :ensure t :defer t :bind ("C-c g" . magit-status)) ;;;;; Vim Emulation (use-package evil :ensure t :defer t :disabled t ;<- aus per default ;; hiermit werden vim keys nur in programmier und text major modes ;; aktiviert, und ansonsten normale bindings benutzt: :hook (prog-mode . evil-local-mode) (text-mode . evil-local-mode)) ;;;;; VCS Änderungen hervorheben (use-package diff-hl :ensure t :defer t :init (global-diff-hl-mode)) ;;;; Sonstiges ;;;;; Beispiel-Befehl (defun my/insert-timestamp (format) "Insert timestamp at point. With \\[universal-argument], query a FORMAT, otherwise fall back to %d%b%y." (interactive (list (if current-prefix-arg (read-string "Format: ") "%x"))) (insert (format-time-string format))) (keymap-global-set "C-x `" #'my/insert-timestamp) ;;;;; Verstecke Compiler Warnungen (setq native-comp-async-report-warnings-errors nil byte-compile-warnings t) ;; automatisch generierte optionen sollen in einer anderen datei ;; gespeichert werden. (setq custom-file (locate-user-emacs-file "custom.el")) (when (file-exists-p custom-file) (load custom-file)) ;;; init.el ends here