From cae46baae8ecce2a3a4a2c9656bfdd660cc57e53 Mon Sep 17 00:00:00 2001 From: tastytea Date: Fri, 22 Mar 2019 09:03:23 +0100 Subject: [PATCH] Nice-i-fied emacs init file. --- init.el | 281 ++++++++++++++++++++++++++------------------------ server/server | 2 +- 2 files changed, 145 insertions(+), 138 deletions(-) diff --git a/init.el b/init.el index ef3ba34..dbf8e9b 100644 --- a/init.el +++ b/init.el @@ -1,5 +1,5 @@ ;;; init.el --- tastytea's Emacs init file. -;;; Time-stamp: <2019-03-22 07:40:06 CET> +;;; Time-stamp: <2019-03-22 09:02:46 CET> ;;; Commentary: ;;; I am using this file with Emacs 26, but most of it will probably work with @@ -14,10 +14,10 @@ '("melpa" . "https://melpa.org/packages/") t) (package-initialize) -;; Add path for custom packages +;; Add path for custom packages. (add-to-list 'load-path "~/.emacs.d/custom-packages/") -;; Install use-package if necessary +;; Install use-package if necessary. (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) @@ -25,67 +25,69 @@ (eval-when-compile (require 'use-package)) -;; Always install packages if they are not present +;; Always install packages if they are not present. (require 'use-package-ensure) (setq use-package-always-ensure t) ;; autocompile files as needed. (use-package auto-compile :init - ;; Use uncompiled file if it is newer than the compiled one + ;; Use uncompiled file if it is newer than the compiled one. (setq load-prefer-newer t) :config (auto-compile-on-load-mode)) -;; ;; Benchmark initialization +;; ;; Benchmark for startup-file. ;; (use-package benchmark-init ;; :config ;; ;; To disable collection of benchmark data after init is done. ;; (add-hook 'after-init-hook 'benchmark-init/deactivate)) -;; Update packages if at least auto-package-update-interval (7) days have passed +;; Update packages if at least 7 days have passed. (use-package auto-package-update + :custom + (auto-package-update-delete-old-versions t) + (auto-package-update-interval 7) + (auto-package-update-hide-results nil) :config - (setq auto-package-update-delete-old-versions t) - ;; (setq auto-package-update-hide-results t) (auto-package-update-maybe)) ;;;;;;;;;;;;;;;;;;;; Global variables ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Determine if we run on a slow computer +;; Determine if we run on a slow computer. (defvar slow-computer nil) (if (member (system-name) '("steuerbeamter" "azimuth" "localhost")) (setq slow-computer t)) ; localhost is schnibble ;;;;;;;;;;;;;;;;;;;; Configure some essential things ;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Set garbage collection threshold to 100 MiB (or 20 MiB) to speed up init -;; It is reset at the end of the file +;; Set garbage collection threshold to 100 MiB (or 20 MiB) to speed up init. +;; It is reset at the end of the file. (if slow-computer (setq gc-cons-threshold (* 20 1024 1024)) (setq gc-cons-threshold (* 100 1024 1024))) -;; Accelerate startup by not printing so much +;; Accelerate startup by not printing so much. (setf inhibit-startup-screen t inhibit-startup-echo-area-message t inhibit-startup-message t) -;; Just type y/n instead of yes/no when prompted +;; Just type y/n instead of yes/no when prompted. (defalias 'yes-or-no-p 'y-or-n-p) -;; Hide toolbar +;; Hide toolbar. (tool-bar-mode -1) -;; Save cursor position +;; Save cursor position. (use-package saveplace :config (save-place-mode t)) -;; Delete selection when you start to write +;; Delete selection when you start to write. (delete-selection-mode t) -;; Save minibuffer history +;; Save minibuffer history. (savehist-mode t) -;; Save backups in ~/.emacs.d/ and keep more versions +;; Save backups in ~/.emacs.d/ and keep more versions. (setq backup-directory-alist `(("." . ,(concat user-emacs-directory "backups")))) (setq delete-old-versions t @@ -93,16 +95,12 @@ ;; kept-old-versions 2 version-control t) -;; ;; Needed for do-all-symbols -;; (use-package cl) - -;; Personal information -(setq user-login-name "tastytea" - user-full-name "tastytea" +;; Set some personal information. +(setq user-full-name "tastytea" user-mail-address "tastytea@tastytea.de") ;; kill-region (cut) and kill-ring-save (copy) act on the current line if no -;; text is visually selected +;; text is visually selected. ;; https://www.emacswiki.org/emacs/WholeLineOrRegion (put 'kill-ring-save 'interactive-form '(interactive @@ -116,13 +114,13 @@ (list (region-beginning) (region-end)) (list (line-beginning-position) (line-beginning-position 2))))) -;; Banish customizations to another file +;; Banish customizations to another file. (setq custom-file (concat user-emacs-directory "custom.el")) -;; Scoll 1 line at a time +;; Scroll 1 line at a time. (setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) -;; Scroll before cursor has reached top/bottom +;; Scroll before cursor has reached top/bottom. (use-package smooth-scrolling :config (smooth-scrolling-mode 1)) @@ -130,7 +128,7 @@ ;; Paste text where the cursor is, not where the mouse is. (setq mouse-yank-at-point t) -;; Put scrollbar to the right side +;; Put scrollbar to the right side. (if (display-graphic-p) (set-scroll-bar-mode 'right)) @@ -138,14 +136,14 @@ (use-package bind-key :config (bind-keys - ;; Scroll in other window + ;; Scroll in other window. ("S-" . scroll-other-window-down) ("S-" . scroll-other-window) ;; Switch window ("C-" . other-window) - ;; Reduce whitespace around point to 0 or 1, according to context + ;; Reduce whitespace around cursor to 0 or 1, according to context. ("C-" . fixup-whitespace) - ;; Scroll without moving the cursor + ;; Scroll without moving the cursor. ("M-" . scroll-up-line) ("M-" . scroll-down-line))) @@ -159,11 +157,12 @@ (progn (message "RTags is not installed!") (rtags-install))) - - (define-key c-mode-base-map (kbd "M-.") 'rtags-find-symbol-at-point) - (define-key c-mode-base-map (kbd "M-,") 'rtags-find-references-at-point) - (define-key c-mode-base-map (kbd "M-?") 'rtags-display-summary) (rtags-enable-standard-keybindings) + :bind + (:map c-mode-base-map + ("M-." . rtags-find-symbol-at-point) + ("M-," . rtags-find-references-at-point) + ("M-?" . rtags-display-summary)) :hook (c++-mode . (rtags-start-process-unless-running)) (c-mode . (rtags-start-process-unless-running)) @@ -173,49 +172,51 @@ :after (flycheck rtags) :demand t :config - ;; ensure that we use only rtags checking + ;; ensure that we use only rtags checking. ;; https://github.com/Andersbakken/rtags#optional-1 - (defun setup-flycheck-rtags () + (defun my/setup-flycheck-rtags () (flycheck-select-checker 'rtags) - (setq-local flycheck-highlighting-mode nil)) ; Can't disable RTags overlay + (setq-local flycheck-highlighting-mode nil)) ; Can't disable RTags overlay. :hook - (c-mode-hook . #'setup-flycheck-rtags) - (c++-mode-hook . #'setup-flycheck-rtags)) + (c-mode-hook . #'my/setup-flycheck-rtags) + (c++-mode-hook . #'my/setup-flycheck-rtags)) (use-package company-rtags :after (company rtags) + :custom + (rtags-completions-enabled t) :config ;; (setq rtags-autostart-diagnostics t) ;; (rtags-diagnostics) - (setq rtags-completions-enabled t) (push 'company-rtags company-backends)) -;; cmake integration +;; cmake integration. (use-package cmake-ide :unless slow-computer + :custom + (cmake-ide-build-dir "build") :config - (setq cmake-ide-build-dir "build") (cmake-ide-setup)) ;;;;;;;;;;;;;;;;;;;; Programming / other ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Online documentation mode +;; Online documentation mode. (use-package eldoc :hook (prog-mode . turn-on-eldoc-mode)) -;; Syntax checking +;; Syntax checking with many plugins. (use-package flycheck :unless slow-computer :config (global-flycheck-mode)) -;; Autocompletion +;; Autocompletion mode with many plugins. (use-package company :unless slow-computer :hook (after-init . global-company-mode)) -;; Fuzzy autocompletion +;; Fuzzy autocompletion for company. (use-package company-flx :after company :config @@ -227,7 +228,7 @@ (setq c-default-style "linux" c-basic-offset 4) -;; Project management +;; Automatic project management. (use-package projectile :unless slow-computer :after neotree @@ -240,7 +241,7 @@ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G 'Unix Makefiles' .." projectile-project-compilation-cmd "cmake --build .") - (defun projectile-kill-buffers-and-change-tabbar-grouping () + (defun my/projectile-kill-buffers-and-change-tabbar-grouping () "Kill project buffers and change tabbar-ruler grouping to user-buffers." (interactive) (projectile-kill-buffers) @@ -248,37 +249,37 @@ :bind ("C-c p" . 'projectile-command-map) (:map projectile-command-map - ("k" . 'projectile-kill-buffers-and-change-tabbar-grouping))) + ("k" . 'my/projectile-kill-buffers-and-change-tabbar-grouping))) -;; Debugger +;; GUI for gdb and other debuggers. (use-package realgud :config - (defun load-realgud () + (defun my/load-realgud () (load-library "realgud")) :hook - (c++-mode . load-realgud) - (c-mode . load-realgud)) + (c++-mode . my/load-realgud) + (c-mode . my/load-realgud)) ;; Highlight TODO, FIXME, NOTE and so on. (use-package hl-todo :hook (prog-mode . hl-todo-mode)) -;; Better commenting +;; Better commenting. (use-package smart-comment :bind ("C-x c" . smart-comment)) -;; Toggle betweeen beginning/end of line and beginning/end of code +;; Toggle betweeen beginning/end of line and beginning/end of code. (use-package mwim :bind ("" . mwim-beginning-of-line-or-code) ("" . mwim-end-of-line-or-code)) -;; Auto-type closing brackets +;; Auto-type closing brackets. (electric-pair-mode t) -;; Folding +;; Fold code. (use-package fold-dwim :bind ("" . fold-dwim-toggle) @@ -286,58 +287,60 @@ :hook (prog-mode . hs-minor-mode)) -;; Highlight indentation levels +;; Highlight indentation levels. (use-package highlight-indent-guides - :config - (setq highlight-indent-guides-method 'character - highlight-indent-guides-responsive 'top) + :custom + (highlight-indent-guides-method 'character) + (highlight-indent-guides-responsive 'top) :hook (prog-mode . highlight-indent-guides-mode)) +;; Tries to find structures and jumps to them. (use-package imenu-anywhere :after ido-completing-read+ :bind ("M-i" . imenu-anywhere)) ;;;;;;;;;;;;;;;;;;;; Appearance ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Icons (required by doom) +;; Icons (required by doom). (use-package all-the-icons :config (unless (file-exists-p "~/.local/share/fonts/all-the-icons.ttf") (all-the-icons-install-fonts t))) -;; Theme +;; Themes for doom-modeline. (use-package doom-themes :unless slow-computer :after (all-the-icons neotree) + :custom + (doom-neotree-file-icons 'icons) :config (load-theme 'doom-molokai t) - (doom-themes-neotree-config) - :custom - (doom-neotree-file-icons 'icons)) + (doom-themes-neotree-config)) -;; Modeline +;; Neat modeline. (use-package doom-modeline :after all-the-icons :init - ;; Show column numbers in modeline - (column-number-mode t) + (column-number-mode t) ; Show column numbers in modeline. :config (setq doom-modeline-minor-modes t) - :hook (after-init . doom-modeline-mode)) + :hook + (after-init . doom-modeline-mode)) -;; Misc +;; Miscellaneous visual improvements. (set-face-font 'default "Source Code Pro") -(global-hl-line-mode t) -(if (>= emacs-major-version 26) - (use-package display-line-numbers - :config - (global-display-line-numbers-mode))) -(size-indication-mode) -(show-paren-mode t) +(global-hl-line-mode t) ; Highlight current line. +(size-indication-mode) ; Buffer size display in the modeline. +(show-paren-mode t) ; Visualize matching parens. +;; Show line numbers on the left of the buffer. +(use-package display-line-numbers + :if (>= emacs-major-version 26) + :config + (global-display-line-numbers-mode)) ;;;;;;;;;;;;;;;;;;;; Misc ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Directory tree +;; Show directory tree in a window. (use-package neotree :demand t :after all-the-icons @@ -345,16 +348,16 @@ (neo-smart-open t) (neo-show-updir-line t) ; Disabled by doom-themes? (neo-window-width 30) - ;; (setq neo-theme (if (display-graphic-p) 'icons 'arrow)) :bind ("" . neotree-toggle)) +;; Git integration. (use-package magit :unless slow-computer :init (use-package git-commit) :config - (defun my-magit-kill-buffers (arg) + (defun my/magit-kill-buffers (arg) "Restore window configuration and kill all Magit buffers." (interactive) (let ((buffers (magit-mode-get-buffers))) @@ -367,64 +370,65 @@ ;; ("q" . my-magit-kill-buffers)) :custom ;; What's better, mapping q or binding the function here? - (magit-bury-buffer-function 'my-magit-kill-buffers)) + (magit-bury-buffer-function 'my/magit-kill-buffers)) ;; Draw line in column 80 (use-package fill-column-indicator :after company :config - ;; ;; TODO: Find out why I can't put this in :init or :config + ;; ;; TODO: Find out why I can't put this in :init or :config. ;; (define-globalized-minor-mode global-fci-mode fci-mode ;; (lambda () (fci-mode t))) ;; (global-fci-mode t) - ;; Fix bug with fci + company - (defun on-off-fci-before-company(command) + ;; Fix bug with fci + company. + (defun my/on-off-fci-before-company(command) (when (string= "show" command) (turn-off-fci-mode)) (when (string= "hide" command) (turn-on-fci-mode))) - (advice-add 'company-call-frontends :before #'on-off-fci-before-company) - ;; Add global fci-mode + (advice-add 'company-call-frontends :before #'my/on-off-fci-before-company) :hook (prog-mode . fci-mode) (text-mode . fci-mode) :custom (fci-rule-column 80)) -;; Interactive substring matching +;; Interactive substring matching. (use-package ido :defer 1 :config (ido-mode t) (ido-everywhere t)) +;; Flexible matching for ido. (use-package flx-ido :after ido + :custom + (setq ido-enable-flex-matching t + ido-ignore-extensions t ; Ignore extension like ~ and .o. + ido-use-virtual-buffers t)) ; Keep history of recently opened buffers. :config (flx-ido-mode t) - (setq ido-enable-flex-matching t - ido-ignore-extensions t - ido-use-virtual-buffers t)) ; Keep history of recently opened buffers -;; Replaces stock emacs completion with ido completion wherever it is possible +;; Replaces stock emacs completion with ido completion wherever it is possible. (use-package ido-completing-read+ :unless slow-computer :after ido :config (ido-ubiquitous-mode t)) -;; Tab bar +;; Advanced tab bar. (use-package tabbar-ruler :unless slow-computer :after projectile :init (setq tabbar-ruler-global-tabbar t) :config - ;; (tabbar-ruler-group-by-projectile-project) ; Group by projectile - ;; (tabbar-ruler-group-buffer-groups) ; Group by file type - (tabbar-ruler-group-user-buffers) ; Group by frame - ;; (mode-icons-mode 0) ; Disable modeline symbols + ;; (tabbar-ruler-group-by-projectile-project) ; Group by projectile. + ;; (tabbar-ruler-group-buffer-groups) ; Group by file type. + (tabbar-ruler-group-user-buffers) ; Group by frame. + ;; (mode-icons-mode 0) ; Disable modeline symbols. ;; I have to define these 2 times, don't know why. (set-face-attribute 'tabbar-selected nil @@ -438,7 +442,7 @@ :family "Sans Serif" :italic t) - (add-hook 'projectile-after-switch-project-hook ; Does not work under :hook + (add-hook 'projectile-after-switch-project-hook ; Does not work under :hook. 'tabbar-ruler-group-by-projectile-project) :bind ("C-" . 'tabbar-ruler-tabbar-backward-tab) @@ -456,19 +460,19 @@ :family "Sans Serif" :italic t))) -;; Keybinding for whitespace, don't visualise newlines +;; Visualize whitespace. (use-package whitespace :config - (delete 'newline-mark whitespace-style) ; $ at eol + (delete 'newline-mark whitespace-style) ; Don't paint $ at eol. (delete 'lines whitespace-style) ; Don't paint lines red if too long. - ;; Don't show dots in company menu - (defun on-off-whitespace-before-company(command) + ;; Don't show dots in company menu. + (defun my/on-off-whitespace-before-company(command) (when (string= "show" command) (whitespace-mode -1)) (when (string= "hide" command) (whitespace-mode t))) (advice-add 'company-call-frontends - :before #'on-off-whitespace-before-company) + :before #'my/on-off-whitespace-before-company) :bind ("C-x w" . 'whitespace-mode) :hook @@ -476,24 +480,27 @@ :custom-face (whitespace-space ((nil :foreground "gray18")))) -;; Spell checking +;; Spell checking. (use-package flyspell + :unless slow-computer + :custom + (ispell-dictionary "english") :config - (defun toggle-flyspell () - "Toggle flyspell-mode and run flyspell-buffer after activating" + (defun my/toggle-flyspell () + "Toggle flyspell-mode and run flyspell-buffer after activating." (interactive) (if (bound-and-true-p flyspell-mode) (flyspell-mode 0) (flyspell-mode) (flyspell-buffer))) - (setq ispell-dictionary "english") :bind - ("" . toggle-flyspell) + ("" . my/toggle-flyspell) :hook + ;; Spellcheck comments. (c++-mode . flyspell-prog-mode) (c-mode . flyspell-prog-mode)) -;; Multiple cursors +;; Multiple cursors. (use-package multiple-cursors :init (global-unset-key (kbd "M-")) @@ -501,7 +508,7 @@ ("C-x M-m" . mc/edit-lines) ("M-" . mc/add-cursor-on-click)) -;; If 2 files with same name, append directory name after the filename +;; If 2 files have the same name, append directory name after the filename. (use-package uniquify :defer 1 :ensure nil ; Included in emacs @@ -510,30 +517,31 @@ (uniquify-buffer-name-style 'post-forward) (uniquify-strip-common-suffix t)) -;; Delete old buffers +;; Delete old buffers. ;; https://www.emacswiki.org/emacs/CleanBufferList (use-package midnight :init - (setq midnight-delay 0) ; 0 seconds after "midnight" + (setq midnight-delay 0) ; 0 seconds after "midnight" + :custom + (clean-buffer-list-delay-general 1) ; Clean normal bufs after 1d. + (clean-buffer-list-delay-special (* 30 60)) ; Clean special bufs after 30m. :config - (setq midnight-period (* 1 60 60) ; Clean every 1 hours - clean-buffer-list-delay-general 1 ; Clean normal bufs after 1d - clean-buffer-list-delay-special (* 30 60) ; Clean special bufs after 30m - clean-buffer-list-kill-regexps ; Add these to special buffers + (setq clean-buffer-list-kill-regexps ; Add these to special buffers. (nconc clean-buffer-list-kill-regexps '("\\`magit-?.*:" "\\.log\\'"))) + (setq midnight-period (* 1 60 60)) ; Clean every 1 hours. (midnight-mode t)) ;; The string Time-stamp: <> in the first 8 lines of the file will be updated ;; with the current timestamp. (use-package time-stamp - :config - (setq time-stamp-format "%:y-%02m-%02d %02H:%02M:%02S %Z") + :custom + (time-stamp-format "%:y-%02m-%02d %02H:%02M:%02S %Z") :hook (before-save . time-stamp)) -;; Edit multiple regions in the same way simultaneously +;; Edit multiple regions in the same way simultaneously. (use-package iedit :bind ("C-;" . iedit-mode)) @@ -551,7 +559,7 @@ ;; The mode is not turned on? ("\\`'\\*Easy-hugo\\*\\'" . easy-hugo-mode)) -;; Automatically insert text in new files +;; Automatically insert text in new files. (use-package autoinsert :init ;; I only use it in here for now @@ -562,7 +570,6 @@ (yas-minor-mode t) (yas-expand-snippet (buffer-string) (point-min) (point-max))) :config - ;; (define-auto-insert "\.cpp" . ["c++" my/autoinsert-yas-expand]) (add-to-list 'auto-insert-alist '(("\\.\\(cpp\\|cc\\|cxx\\|c\\+\\+\\)\\'" . "C++ program") . ["cpp" my/autoinsert-yas-expand])) @@ -571,7 +578,7 @@ ["hpp" my/autoinsert-yas-expand])) :custom (auto-insert-directory (concat user-emacs-directory "auto-insert")) - (auto-insert-query nil) ; Always insert + (auto-insert-query nil) ; Don't ask before inserting. :hook (find-file . auto-insert)) @@ -583,8 +590,8 @@ (adoc-mode . visual-line-mode)) (use-package markdown-mode - :init - (setq markdown-command "markdown2") + :custom + (markdown-command "markdown2") :mode (("README\\.md\\'" . gfm-mode) ("\\.md\\'" . markdown-mode) @@ -607,14 +614,14 @@ (nginx-mode . company-nginx-keywords)) ;;;;;;;;;;;;;;;;;;;; Server / Remote editing ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Edit remote files +;; Edit remote files. (use-package tramp :unless slow-computer :defer 1 :config - ;; ssh is faster than scp and supports ports + ;; ssh is faster than scp and supports ports. (setq tramp-default-method "ssh") - ;; Add verification code support + ;; Add verification code support. (customize-set-variable 'tramp-password-prompt-regexp (concat @@ -625,13 +632,13 @@ "Verification code") t) ".*:\0? *")) - ;; Respect remote PATH + ;; Respect remote PATH. (add-to-list 'tramp-remote-path 'tramp-own-remote-path)) ;; Run server if: -;; - Our EUID is not 0 -;; - We are not logged in via SSH -;; - It is not already running +;; - Our EUID is not 0, +;; - We are not logged in via SSH, +;; - It is not already running. (unless (equal (user-real-uid) 0) (unless (getenv "SSH_CONNECTION") (use-package server @@ -639,15 +646,15 @@ :init (setq server-use-tcp t server-port 51313 - server-auth-key + server-auth-key ; 64 chars, saved in ~/.emacs.d/server/server. "phahw2ohVoh0oopheish7IVie9desh8aequeenei3uo8wahShe%thuadaeNa4ieh") :config (unless (server-running-p) (server-start)) ))) -;; Set garbage collection threshold to original value +;; Set garbage collection threshold to original value. (setq gc-cons-threshold (car (get 'gc-cons-threshold 'standard-value))) (provide 'init) -;;; init.el ends here +;;; init.el ends here. diff --git a/server/server b/server/server index 74504c2..aaa9f6a 100644 --- a/server/server +++ b/server/server @@ -1,2 +1,2 @@ -127.0.0.1:51313 31524 +127.0.0.1:51313 15932 phahw2ohVoh0oopheish7IVie9desh8aequeenei3uo8wahShe%thuadaeNa4ieh \ No newline at end of file