diff --git a/emacs/emacs.dotflie b/emacs/emacs.dotflie new file mode 100644 index 0000000..6fb1229 --- /dev/null +++ b/emacs/emacs.dotflie @@ -0,0 +1,92 @@ +;; 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)