325 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			325 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ;; * Default emacs config  -*-emacs-lisp-*-
 | |
| ;;
 | |
| ;; https://github.com/TLINDEN/emacs-skel
 | |
| 
 | |
| ;; * Enable Fontlock-mode (colours) in gui mode
 | |
| ;; see: https://www.emacswiki.org/emacs/CustomizingBoth
 | |
| (if window-system
 | |
|     (progn
 | |
|       (global-font-lock-mode 1)
 | |
|       (set-background-color "white")
 | |
|       (set-foreground-color "DarkBlue")
 | |
|       ))
 | |
| 
 | |
| ;; * Display cursor as row in Terminal
 | |
| (unless (display-graphic-p)
 | |
|   ;; else (optional)
 | |
|   (global-hl-line-mode)
 | |
|   (set-face-background hl-line-face "DarkGray")
 | |
|   (set-face-foreground hl-line-face "Black")
 | |
|   )
 | |
| 
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; * Console backspace fix
 | |
| (define-key key-translation-map [?\C-h] [?\C-?])
 | |
| 
 | |
| ;; * Some sensible defaults
 | |
| 
 | |
| ;; no ~ backups
 | |
| (setq make-backup-files nil)
 | |
| 
 | |
| ;; disable Toolbar
 | |
| (tool-bar-mode -1)
 | |
| 
 | |
| ;; disable menubar (default: enabled)
 | |
| ;; (menu-bar-mode -1)
 | |
| 
 | |
| ;; disable menubardialog boxes (default: enabled)
 | |
| ;; (setq use-dialog-box nil)
 | |
| 
 | |
| ;; disable scrollbars (default: enabled)
 | |
| ;; Scrolleisten abschalten (standard: ein)
 | |
| ;; (scroll-bar-mode 0)
 | |
| 
 | |
| ;; Less output during startup
 | |
| (setq inhibit-startup-message t)
 | |
| (setq inhibit-startup-screen t)
 | |
| 
 | |
| ;; show column number
 | |
| (column-number-mode t)
 | |
| 
 | |
| ;; Set x11 window title
 | |
| (setq frame-title-format '(buffer-file-name "emacs %f" ("emacs %b")))
 | |
| 
 | |
| ;; create valid unix files
 | |
| (setq require-final-newline t)
 | |
| 
 | |
| ;; show matching parens
 | |
| (show-paren-mode 1)
 | |
| 
 | |
| ;; cursor doesn't move when scrolling
 | |
| (setq scroll-preserve-screen-position t)
 | |
| 
 | |
| ;; no comment columns
 | |
| (setq-default comment-column 0)
 | |
| 
 | |
| ;; no auto-save
 | |
| (setq auto-save-default nil)
 | |
| 
 | |
| ;; always display all buffers
 | |
| (setq buffers-menu-max-size nil)
 | |
| (setq mouse-buffer-menu-mode-mult 30)
 | |
| 
 | |
| ;; don't hide anything
 | |
| (setq disabled-command-function nil)
 | |
| 
 | |
| ;; Mark == Copy
 | |
| (setq mouse-drag-copy-region t)
 | |
| 
 | |
| ;; more Ram
 | |
| (setq gc-cons-threshold 20000000)
 | |
| 
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; * Scratch Buffer
 | |
| 
 | |
| ;; default content of *scratch* buffer == short help
 | |
| 
 | |
| (setq initial-scratch-message ";;
 | |
| ;; Short help (Keys: C == Control, M == Alt or META):
 | |
| 
 | |
| ;; Combination (eg. C-x C-f): keep control pressed, then x, then f
 | |
| ;; Cascade (eg. C-x 3): press control and x, release, then 3
 | |
| ;; Key with mouse (eg. C-mouse1): press control and left mouse button
 | |
| 
 | |
| ;; M-x <cmd>   execute emacs command     | M-w     copy marked stuff
 | |
| ;; C-x C-f     open a file               | C-w     delete marked stuff
 | |
| ;; C-x C-S     save buffer to file       | C-y     insert (paste, yank)
 | |
| ;; C-x C-q     close buffer              | C-g     abort current action
 | |
| ;; C-mouse-1   popup buffer list         | C-s     search forward
 | |
| ;; C-x 2       split window horizontally |         again: next match
 | |
| ;; C-x 3       split window vertically   | C-r     search backwards
 | |
| ;; M-o         switch bffers             | C-x C-c finish emacs
 | |
| ;; C-x 1       show only one buffer      | C-x b   switch buffer
 | |
| ;; C-x k       close current buffer      | C-c i   invert colours
 | |
| 
 | |
| ;; C-<del>     delete left word    | C-<entf>  delete right word
 | |
| ;; C-<up>      jump 1 paragraph up | C-<down>  jump 1 paragraph down
 | |
| ;; C-<left>    jump 1 word left    | C-<right> jump 1 word right
 | |
| ;; C-_         UNDO                | C-g C-_ REDO
 | |
| 
 | |
| ;; <home> or C-a      beginning of line, then window, then buffer
 | |
| ;; <end>  or C-e      end of line, then window, then buffer
 | |
| 
 | |
| ;; M-x query-replace         search/replace
 | |
| ;; M-x query-replace-regex   dito, with regex (man perlre)
 | |
| ;; M-x <xxx-mode>            (xxx: cperl, ruby etc) enable mode
 | |
| 
 | |
| ;; Configuration: ~/.emacs, Tutorial: C-h t, https://emacswiki.org/
 | |
| 
 | |
| ;; This is the *scratch* buffer for short notices a testing elisp.
 | |
| 
 | |
| ")
 | |
| 
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; * y means yes
 | |
| (defalias 'yes-or-no-p 'y-or-n-p)
 | |
| 
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; * TAB/Indent
 | |
| (setq-default indent-tabs-mode nil)
 | |
| (setq-default tab-width 4)
 | |
| (setq indent-line-function 'insert-tab)
 | |
| (setq tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44
 | |
|                               48 52 56 60 64 68 72 76 80 84
 | |
|                               88 92 96 100 104 108 112 116 120)))
 | |
| (setq tab-always-indent 'complete)
 | |
| (add-hook 'makefile-mode-hook '(lambda() (setq indent-tabs-mode t)))
 | |
| 
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; * Helper
 | |
| (defun add-something-to-mode-hooks (mode-list something)
 | |
|   "helper function to add a callback to multiple hooks"
 | |
|   (dolist (mode mode-list)
 | |
|     (add-hook (intern (concat (symbol-name mode) "-mode-hook")) something)))
 | |
| 
 | |
| ;; * Standard key bindings
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; c-h != delete
 | |
| (keyboard-translate ?\C-h ?\C-?)
 | |
| (keyboard-translate ?\C-? ?\C-h)
 | |
| 
 | |
| ;; general keys (re-)mappings
 | |
| (global-set-key (kbd "C-s")             'isearch-forward-regexp)
 | |
| (global-set-key (kbd "C-r")             'isearch-backward-regexp)
 | |
| (global-set-key (kbd "<backtab>")       'dabbrev-completion) ; shift-TAB: inline completion
 | |
| (global-set-key (kbd "M-o")             'other-window)       ; Buffer wechseln
 | |
| (global-set-key (kbd "<delete>")        'delete-char)
 | |
| (global-set-key (kbd "<backspace>")     'backward-delete-char)
 | |
| (global-set-key (kbd "S-<delete>")      'kill-word)          ; Shift+Del delete word
 | |
| (global-set-key (kbd "S-<backspace>")   'backward-kill-word) ; Shift+Backspace dito
 | |
| (global-set-key (kbd "C-<delete>")      'kill-word)          ; Shift+Del       dito
 | |
| (global-set-key (kbd "C-<backspace>")   'backward-kill-word) ; Shift+Backspace dito 
 | |
| (global-unset-key (kbd "C-z"))
 | |
| (global-set-key (kbd "C-x k")           'kill-this-buffer)   ; close buffers immediately
 | |
| 
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; * Invert fore- and background
 | |
| 
 | |
| ;; remember last inverse
 | |
| (defvar my-invert-state t)
 | |
| 
 | |
| ;; invert everything, reverse it when called again
 | |
| (defun my-invert()
 | |
|   "invert fg-bg"
 | |
|   (interactive)
 | |
|   (invert-face 'default)
 | |
|   (invert-face 'mode-line)
 | |
|   (set-face-attribute 'fringe nil :inverse-video my-invert-state)
 | |
|   (setq my-invert-state (not my-invert-state)) ;; cycle variable my-invert-state
 | |
|   )
 | |
| 
 | |
| (global-set-key (kbd "C-c i")           'my-invert)
 | |
| 
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; * Custom binding for HOME and END keys (and CTRL-a und CTRL-e)
 | |
| 
 | |
| ;; from viking-mode:
 | |
| (defun my-last-key-repeats ()
 | |
|   "Returns how many times the last key has been pressed as integer."
 | |
|   (interactive)
 | |
|   (let* ((keys    (reverse (append (recent-keys) nil)))
 | |
|          (pressed (car keys))
 | |
|          (times   0))
 | |
|     (progn
 | |
|       (catch 'nomore
 | |
|         (dolist (k keys)
 | |
|           (if (equal pressed k)
 | |
|               (setq times (+ times 1))
 | |
|             (throw 'nomore t))))
 | |
|       times)))
 | |
| 
 | |
| (defun pc-keys-home ()
 | |
|   "Go to beginning of  line/window/buffer. First hitting key goes
 | |
| to  beginning of  line,  second in  a row  goes  to beginning  of
 | |
| window, third in a row goes to beginning of buffer."
 | |
|   (interactive)
 | |
|   (let* (
 | |
|          (key-times (my-last-key-repeats)))
 | |
|     (cond
 | |
|      ((eq key-times 3)
 | |
|       (if mark-active
 | |
|           (goto-char (point-min))
 | |
|         (beginning-of-buffer)))
 | |
|      
 | |
|      ((eq key-times 2)
 | |
|       (if mark-active () (push-mark))
 | |
|       (move-to-window-line 0))
 | |
|      
 | |
|      ((eq key-times 1)
 | |
|       (beginning-of-line))
 | |
|      )))
 | |
| 
 | |
| (defun pc-keys-end ()
 | |
|   "Go to end of  line/window/buffer. First hitting key goes
 | |
| to end  of line, second  in a  row goes to  end of
 | |
| window, third in a row goes to end of buffer."
 | |
|   (interactive)
 | |
|   (let* (
 | |
|          (key-times (my-last-key-repeats)))
 | |
|     (cond
 | |
|      ((eq key-times 3)
 | |
|       (if mark-active
 | |
|           (goto-char (point-max))
 | |
|         (end-of-buffer)))
 | |
|      
 | |
|      ((eq key-times 2)
 | |
|       (if mark-active () (push-mark))
 | |
|       (move-to-window-line -1)
 | |
|       (end-of-line)
 | |
|       )
 | |
|      
 | |
|      ((eq key-times 1)
 | |
|       (end-of-line))
 | |
|      )))
 | |
| 
 | |
| (global-set-key (kbd "<home>")        'pc-keys-home)
 | |
| (global-set-key (kbd "<end>")         'pc-keys-end)
 | |
| (global-set-key (kbd "C-a")           'pc-keys-home)
 | |
| (global-set-key (kbd "C-e")           'pc-keys-end)
 | |
| 
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; * IDO mode - better completion during file open etc
 | |
| 
 | |
| ;; Press C-f during IDO in order to get to normal behavior
 | |
| (ido-mode t)
 | |
| (ido-everywhere nil)
 | |
| (setq ido-enable-flex-matching t)
 | |
| (setq ido-use-filename-at-point nil)
 | |
| (setq ido-use-virtual-buffers t)
 | |
| (setq ido-auto-merge-work-directories-length -1)
 | |
| 
 | |
| ;; Do not use IDO during save-as (C-x C-w)
 | |
| (defvar my-ido-disabled nil)
 | |
| (advice-add 'ido-write-file :before '(lambda (&rest args) (ido-mode 0) (setq my-ido-disabled t)))
 | |
| (advice-add 'ido-write-file :after  '(lambda (&rest args) (ido-mode 1) (setq my-ido-disabled nil)))
 | |
| 
 | |
| (defun my-keyboard-quit-advice (fn &rest args)
 | |
|   (when my-ido-disabled
 | |
|     (ido-mode 1)
 | |
|     (setq my-ido-disabled nil))
 | |
|   (apply fn args))
 | |
| 
 | |
| (advice-add 'abort-recursive-edit :around #'my-keyboard-quit-advice)
 | |
| 
 | |
| 
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; * Highlight TABs
 | |
| 
 | |
| (defface extra-whitespace-face
 | |
|   '((t (:background "pale green")))
 | |
|   "Used for tabs and such.")
 | |
| 
 | |
| (defvar my-extra-keywords
 | |
|   '(("\t" . 'extra-whitespace-face)))
 | |
| 
 | |
| (add-something-to-mode-hooks '(c c++ vala cperl emacs-lisp python shell-script)
 | |
|                              (lambda () (font-lock-add-keywords nil my-extra-keywords)))
 | |
| 
 | |
| 
 | |
| ;; --------------------------------------------------------------------------------
 | |
| ;; * Emacs Autoconfig / Customizegroup Placeholder
 | |
| 
 | |
| ;; This is the place where emacs stores configuration options
 | |
| ;; customized interactively with:
 | |
| ;; M-x customize-group <RET> <group> <RET>
 | |
| 
 | |
| (custom-set-faces
 | |
|  ;; custom-set-faces was added by Custom.
 | |
|  '(default ((t (:family "DejaVu Sans Mono" :foundry "unknown" :slant normal :weight normal :width normal))))
 | |
|  '(cperl-nonoverridable-face ((((class color) (background light)) (:foreground "Magenta"))))
 | |
|  '(custom-documentation-face ((t (:foreground "Navy"))) t)
 | |
|  '(custom-group-tag-face-1 ((((class color) (background light)) (:underline t :foreground "VioletRed"))) t)
 | |
|  '(font-lock-builtin-face ((t (:foreground "BlueViolet"))))
 | |
|  '(font-lock-comment-face ((t (:foreground "DarkGreen"))))
 | |
|  '(font-lock-constant-face ((t (:foreground "Magenta"))))
 | |
|  '(font-lock-function-name-face ((t (:bold nil :foreground "DarkOrchid"))))
 | |
|  '(font-lock-keyword-face ((t (:foreground "Blue"))))
 | |
|  '(font-lock-string-face ((t (:foreground "Red"))))
 | |
|  '(font-lock-type-face ((t (:foreground "DarkSlateBlue"))))
 | |
|  '(font-lock-variable-name-face ((t (:foreground "Sienna"))))
 | |
|  '(font-lock-warning-face ((t (:bold t :foreground "Red"))))
 | |
|  '(highlight ((t (:background "DodgerBlue2" :foreground "White"))))
 | |
|  '(ido-only-match ((t (:foreground "dark green" :weight bold))))
 | |
|  '(mode-line ((t (:foreground "White" :background "Blue"))))
 | |
|  '(mode-line-inactive ((t (:foreground "White" :background "DimGray"))))
 | |
|  '(outline-1 ((t (:inherit font-lock-function-name-face :underline t :weight bold))))
 | |
|  '(outline-2 ((t (:inherit font-lock-variable-name-face :underline t :weight bold))))
 | |
|  '(outline-3 ((t (:inherit font-lock-keyword-face :underline t :weight bold))))
 | |
|  '(outline-4 ((t (:inherit font-lock-comment-face :underline t))))
 | |
|  '(region ((t (:foreground "Aquamarine" :background "Darkblue"))))
 | |
|  '(secondary-selection ((t (:foreground "Green" :background "darkslateblue")))))
 | |
| 
 | |
| (custom-set-variables
 | |
|  ;; custom-set-variables was added by Custom.
 | |
|  )
 |