(package-initialize) (require 'package) ;; Nope function (defun nope () (interactive) (message "Nope!")) ;; Quote (setq initial-scratch-message ";; Simplicity and elegance are unpopular because\n;; they require hard work and discipline to achieve\n;; and education to be appreciated.\n;;\n;; - Dijkstra\n\n") ;; Set frame title (setq frame-title-format "[%m] %f") ;; Default frame size (setq initial-frame-alist '( (width . 110) (height . 40) )) ;; Use cperl-mode instead of perl-mode (defalias 'perl-mode 'cperl-mode) (defun silence () (interactive)) ;; Disable backup (setq make-backup-files nil) (push '("melpa" . "http://melpa.milkbox.net/packages/") package-archives) (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(ac-ignore-case nil) '(ansi-color-faces-vector [default default default italic underline success warning error]) '(ansi-color-names-vector ["#242424" "#e5786d" "#95e454" "#cae682" "#8ac6f2" "#333366" "#ccaa8f" "#f6f3e8"]) '(blink-cursor-mode nil) '(cperl-close-paren-offset -2) '(cperl-electric-parens nil) '(cperl-electric-parens-mark nil) '(cperl-indent-level 2) '(cperl-indent-parens-as-block t) '(cperl-under-as-char t) '(custom-enabled-themes (quote (heroku))) '(custom-safe-themes (quote ("4f2ede02b3324c2f788f4e0bad77f7ebc1874eff7971d2a2c9b9724a50fb3f65" default))) '(dired-listing-switches "-lh") '(global-evil-surround-mode t) '(indent-tabs-mode nil) '(inhibit-startup-screen t) '(menu-bar-mode nil) '(package-selected-packages (quote (org-bullets counsel powerline-evil powerline origami projectile terminal-here shell-pop swiper neotree centered-cursor-mode ivy avy heroku-theme auto-complete use-package yasnippet evil-surround org evil-magit magit makefile-runner evil))) '(scroll-bar-mode nil) '(shell-pop-shell-type (quote ("ansi-term" "*ansi-term*" (lambda nil (ansi-term shell-pop-term-shell))))) '(shell-pop-window-position "top") '(shell-pop-window-size 20) '(show-trailing-whitespace t) '(tool-bar-mode nil)) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(ivy-current-match ((t (:foreground "gold")))) '(minibuffer-prompt ((t (:foreground "dark orange" :weight bold)))) '(neo-dir-link-face ((t (:foreground "#fce94f")))) '(neo-expand-btn-face ((t (:foreground "#ffe070")))) '(neo-root-dir-face ((t (:foreground "#fff3c6" :weight bold)))) '(org-ellipsis ((t (:foreground "LightGoldenrod")))) '(powerline-active1 ((t (:inherit mode-line)))) '(powerline-active2 ((t (:inherit mode-line)))) '(powerline-evil-emacs-face ((t (:inherit powerline-evil-base-face :background "gray30" :foreground "white")))) '(powerline-evil-insert-face ((t (:inherit powerline-evil-base-face :background "forest green")))) '(powerline-evil-motion-face ((t (:inherit powerline-evil-base-face :background "white" :foreground "black")))) '(powerline-evil-normal-face ((t (:inherit powerline-evil-base-face :background "white" :foreground "grey22")))) '(powerline-evil-replace-face ((t (:inherit powerline-evil-base-face :background "dark red"))))) ;; ensure repo cache is up1date (or (file-exists-p package-user-dir) (package-refresh-contents)) ;; Install use-package (defun ensure-package-installed (package) "Ensure packages are installed" (if (package-installed-p package) nil (progn (package-refresh-contents) (package-install package)))) (ensure-package-installed 'use-package) ;; *.tex files are Latex-Files (add-to-list 'auto-mode-alist '("\\.tex\\'" . latex-mode)) ;; Extra Latex keybindings (defun my/latex-keybindings () (define-key latex-mode-map (kbd "") 'recompile)) (add-hook 'latex-mode-hook 'my/latex-keybindings) ;; show parens (show-paren-mode t) ;; highlight line (global-hl-line-mode) ;; shackle ;(defun my/shackle-rules () ; (setq shackle-rules ; '((term-mode :select t :align 'below :size 0.2)))) ; ;(use-package shackle ; :ensure t ; :demand t ; :config '(my/shackle-rules)) (use-package let-alist :ensure t :demand t) ;; powerline (use-package powerline :ensure t :demand t) (use-package powerline-evil :ensure t :demand t :config (powerline-evil-vim-color-theme)) ;; theme (use-package heroku-theme :ensure t) ;; Org-mode (use-package org :ensure t :config (setq org-directory "~/org") (setq org-agenda-files "~/org/agenda") (global-set-key (kbd "") 'org-agenda) (setq org-todo-keywords '((sequence "TODO" "DOING" "BLOCKED" "REVIEW" "|" "ABANDONED" "DONE"))) (setq org-todo-keyword-faces '(("TODO" . "firebrick2") ("DOING" . "turquoise1") ("BLOCKED" . "orange red") ("REVIEW" . "dodger blue") ("ABANDONED" . "slate blue") ("DONE" . "green3"))) (setq org-ellipsis " ▼") (dolist (face '(org-level-1 org-level-2 org-level-3 org-level-4 org-level-5)) (set-face-attribute face nil :weight 'semi-bold :height 1.0)) (add-hook 'org-mode-hook (lambda () (linum-mode 0) (setq-local line-spacing 0.2) (setq-local fill-column 80) (auto-fill-mode 1)))) ;; Org Bullets (use-package org-bullets :demand t :ensure t :config (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))) ;; Evil-mode (defun my/evil-go-back () (interactive) (evil--jump-backward 1)) (defun my/evil-go-forward () (interactive) (evil--jump-forward 1)) (defun my/kill-current-buffer () (interactive) (kill-buffer (current-buffer))) (use-package evil :ensure t :demand t :config (evil-mode 1) (setq evil-ex-substitute-global t) (define-key evil-normal-state-map "/" 'swiper) (evil-ex-define-cmd "q" 'my/kill-current-buffer) (define-key evil-normal-state-map "gb" 'my/evil-go-back) (define-key evil-normal-state-map "gn" 'my/evil-go-forward) (define-key evil-motion-state-map [down-mouse-1] 'silence) (define-key evil-motion-state-map [mouse-1] 'silence) (setq-default evil-cross-lines t)) (use-package evil-org :ensure t :demand t :config (add-hook 'org-mode-hook 'evil-org-mode) (add-hook 'evil-org-mode-hook (lambda () (evil-org-set-key-theme '(navigation insert shift todo heading))))) (use-package projectile :ensure t :demand t :config (progn (projectile-global-mode t) (setq projectile-completion-system 'ivy))) ;; Auto-Complete (use-package auto-complete :ensure t :demand t :config (progn (require 'auto-complete-config) (setq ac-sources '(ac-source-filename ac-source-functions ac-source-yasnippet ac-source-variables ac-source-symbols ac-source-features ac-source-words-in-all-buffer ac-source-dictionary)) (global-auto-complete-mode))) ;; folding (use-package origami :ensure t :demand t :config (progn (setq origami-show-fold-header t) (define-key evil-normal-state-map "z" 'origami-toggle-node) (global-origami-mode))) ;; ivy (defun my/save-imenu-jump (item) "WIP: Tells evil-jump to save position before jumping via imenu (or counsel-imenu)" (evil--jumps-push)) (use-package ivy :ensure t :demand t :config (progn (ivy-mode 1) (setq ivy-use-virtual-buffers t) (setq ivy-count-format "(%d/%d) ") (advice-add 'imenu :before 'my/save-imenu-jump) (define-key ivy-minibuffer-map (kbd "") 'ivy-immediate-done))) (use-package counsel :ensure t :demand t :config (progn (global-set-key (kbd "C-c l") 'counsel-locate) (global-set-key (kbd "C-c m") 'counsel-imenu) (global-set-key (kbd "C-c _") 'counsel-git-grep))) ;; Quickly open external terminal (use-package terminal-here :ensure t :demand t :config (progn (global-set-key (kbd "C-x t") #'terminal-here-launch))) ;; swiper (use-package swiper :ensure t :bind ("C-s" . swiper)) ;; Neotree (use-package neotree :ensure t :bind ("C-x n" . neotree-show) :config (setq neo-theme 'ascii) (evil-define-key 'normal neotree-mode-map (kbd "+") 'neotree-create-node) (evil-define-key 'normal neotree-mode-map (kbd "g") 'neotree-refresh) (evil-define-key 'normal neotree-mode-map (kbd "d") 'neotree-delete-node) (evil-define-key 'normal neotree-mode-map (kbd "c") 'neotree-rename-node) (evil-define-key 'normal neotree-mode-map (kbd "TAB") 'neotree-enter) (evil-define-key 'normal neotree-mode-map (kbd "RET") 'neotree-enter) (evil-define-key 'normal neotree-mode-map (kbd "q") 'neotree-hide) (evil-define-key 'normal neotree-mode-map (kbd "DEL") 'neotree-select-up-node)) ;; Cursor centered (use-package centered-cursor-mode :ensure t :demand t :disabled :config (global-centered-cursor-mode)) ;; Yasnippet (use-package yasnippet :ensure t :demand t :config (yas-global-mode 1)) ;; avy (use-package avy :ensure t :demand t :disabled :bind ("C-s" . avy-goto-word-0) :config (progn (setq avy-keys '(?a ?s ?d ?f ?g ?q ?w ?e ?r ?t ?y ?x ?c ?v ?z ?u ?i ?o ?p ?h ?j ?k ?l ?b ?n ?m)))) ;; Magit (use-package magit :ensure t :bind ("C-x g" . magit-status)) ;; Easy terminal (setq my/default-shell (or (executable-find "zsh") (executable-find "bash"))) ;;(use-package shell-pop ;; :ensure t ;; :bind ("C-x t" . shell-pop) ;; :config ;; (setq-default shell-pop-term-shell my/default-shell)) ;; tabbing (doesn't really work yet) (setq-default tab-width 4) (setq-default LateX-indent-level 4) (add-hook 'latex-mode-hook (progn (setq indent-tabs-mode t))) ;; Activate line numbers (global-linum-mode t) ;; compilation buffer ; Set buffer scrolling (setq compilation-scroll-output 'first-error) (setq compilation-window-height 10) ;(defun my/compilation-bury-buffer-without-error (buffer string) ; (cond ((string-match "finished" string) ; (message "Build maybe successful: closing window.") ; (run-with-timer 3 nil ; 'delete-window ; (get-buffer-window buffer t))) ; (t (message "Compilation exited abnormaly: %s" string)))) ; ;(setq compilation-finish-function 'my/compilation-bury-buffer-without-error) ;(defun my/setup-compilation-window () ; (when (not (get-buffer-window "*compilation*")) ; (save-selected-window ; (save-excursion ; (let* ((w (split-window-vertically)) ; (h (window-height w))) ; (select-window w) ; (switch-to-buffer "*compilation*") ; (shrink-window (- h compilation-window-height))))))) ;(add-hook 'compilation-mode-hook 'my/setup-compilation-window) ;; Window movement ; Old keys (global-set-key (kbd "C-x ") 'windmove-up) (global-set-key (kbd "C-x ") 'windmove-down) (global-set-key (kbd "C-x ") 'windmove-left) (global-set-key (kbd "C-x ") 'windmove-right) ; New keys ; (global-set-key (kbd "") 'windmove-up) ; (global-set-key (kbd "") 'windmove-down) ; (global-set-key (kbd "") 'windmove-left) ; (global-set-key (kbd "") 'windmove-right) ; Whitespace mode toggle (global-set-key (kbd "C-c C-l") 'whitespace-mode) (defun cycle-window () "cycles windows" (interactive) (select-window (next-window))) (global-set-key (kbd "") 'cycle-window) ;; Exit prompt ;; (defun foreach (alist func) ;; (while alist ;; (progn ;; (funcall func (car alist)) ;; (setq alist (cdr alist))))) ;(defun emacs-exit-prompt () ; (foreach ; (buffer-list) ; (lambda (buffer) ; (cond ; ((string-match "^\\*.*\\*$" (buffer-name buffer)) nil) ; ((null (buffer-modified-p buffer)) nil) ; (t nil))))) ;; Latex german (quail-define-package "latex-german" "UTF-8" "LaGe" t "Transforms umlauts to the better latex notation. ä -> \"a ö -> \"o ü -> \"u Ä -> \"A Ö -> \"O Ü -> \"U ß -> \"s" nil t nil nil nil nil nil nil nil nil t) (quail-define-rules ("ä" ["\"a"]) ("ö" ["\"o"]) ("ü" ["\"u"]) ("Ä" ["\"A"]) ("Ö" ["\"O"]) ("Ü" ["\"U"]) ("ß" ["\"s"]) ) (add-hook 'latex-mode-hook (lambda () (set-input-method "latex-german") (local-set-key "\"" 'self-insert-command))) ;; Treat _ as part of word in some modes (defun treat-underscore () (modify-syntax-entry ?_ "w")) (add-hook 'prog-mode-hook 'treat-underscore) ;; Split windows horizontally preferred (setq split-height-threshold 6) (setq split-width-threshold 20) ;; Overlay windows (What does it do?) (add-to-list 'display-buffer-alist '("*Apropos*" display-buffer-same-window)) (add-to-list 'display-buffer-alist '("*Help*" display-buffer-in-side-window)) (add-to-list 'display-buffer-alist '("*evil-jumps*" display-buffer-in-side-window)) (add-to-list 'display-buffer-alist '("*compilation*" (display-buffer-reuse-window display-buffer-in-side-window) (side . bottom) (size . 0.2))) ;; Change all prompts to y or n (fset 'yes-or-no-p 'y-or-n-p) ;; Insert date time, german format (defun datetime-german () (interactive) (insert (format-time-string "%d.%m.%Y %H:%M"))) ;; Insert time, german format (defun time-german () (interactive) (insert (format-time-string "%H:%M"))) (global-set-key (kbd "C-c C-d") 'time-german) ;; Comment fun ;(defun extend-comment () ; (interactive) ; (if (looking-back "//" (line-beginning-position)) ; (progn ; (newline-and-indent) ; (insert "Hallo Welt")) ; (newline-and-indent))) ;; Show in binary and decimal ;(defun hex-popup () ; (interactive) ; (let (hexStr p1 p2) ; (save-excursion ; (search-backward-regexp "[^0-9A-Fa-f]" nil t) ; (forward-char) ; (setq p1 (point)) ; (search-forward-regexp "[^0-9A-Fa-f]" nil t) ; (backward-char) ; (setq p2 (point))) ; (setq hexStr (buffer-substring-no-properties p1 p2)) ; (message "The hex number is: '%s' '%d' '%d'" hexStr p1 p2)))