;; initialize packages (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) (add-to-list 'package-archives '("elpy" . "https://jorgenschaefer.github.io/packages/")) (package-initialize) ;; line numbers (global-linum-mode t) (column-number-mode 1) (setq linum-format "%4d ") ;; git gutter (require 'git-gutter) (global-git-gutter-mode t) (git-gutter:linum-setup) ;; vim emulation (require 'evil) (evil-mode 1) (require 'evil-surround) (global-evil-surround-mode 1) ;; disable menubar (menu-bar-mode -1) ;; 80 column marker (require 'whitespace) (setq whitespace-style '(face indentation trailing tab-mark lines-tail)) (global-whitespace-mode t) ;; prevent extraneous tabs (setq-default indent-tabs-mode nil) ;; infer tab settings (defun how-many-region (begin end regexp &optional interactive) "Print number of non-trivial matches for REGEXP in region. Non-interactive arguments are Begin End Regexp" (interactive "r\nsHow many matches for (regexp): \np") (let ((count 0) opoint) (save-excursion (setq end (or end (point-max))) (goto-char (or begin (point))) (while (and (< (setq opoint (point)) end) (re-search-forward regexp end t)) (if (= opoint (point)) (forward-char 1) (setq count (1+ count)))) (if interactive (message "%d occurrences" count)) count))) (defun infer-indentation-style () ;; if our source file uses tabs, we use tabs, if spaces spaces, and if ;; neither, we use the current indent-tabs-mode (let ((space-count (how-many-region (point-min) (point-max) "^ ")) (tab-count (how-many-region (point-min) (point-max) "^\t"))) (if (> space-count tab-count) (setq indent-tabs-mode nil)) (if (> tab-count space-count) (setq indent-tabs-mode t)))) (infer-indentation-style) ;; auto remove trailing whitespace (add-hook 'before-save-hook 'delete-trailing-whitespace) (setq mode-require-final-newline t) ;; automatic pairs (electric-pair-mode) ;; neotree (require 'neotree) (global-set-key [f8] 'neotree-toggle) (add-hook 'neotree-mode-hook (lambda () (define-key evil-normal-state-local-map (kbd "TAB") 'neotree-enter) (define-key evil-normal-state-local-map (kbd "SPC") 'neotree-enter) (define-key evil-normal-state-local-map (kbd "RET") 'neotree-enter) (define-key evil-normal-state-local-map (kbd "q") 'neotree-hide))) (neotree-toggle) ;; backup in separate directory (setq backup-directory-alist `(("." . "~/.emacs.d/backups"))) (setq backup-by-copying t) ;; projectile (projectile-global-mode) (setq projectile-find-file (kbd "C-p")) ;;;;;;;;;;;;;;;;;;; ;; python config ;; ;;;;;;;;;;;;;;;;;;; (elpy-enable)