;; Emacs initialization file ;; Remember the initialization directory (setq ravi/init-dir (file-name-directory (or load-file-name (buffer-file-name)))) (defun ravi/emacs-file (filename) (expand-file-name filename ravi/init-dir) ) ;; Initialize some customizations early on to avoid flicker (when window-system (tooltip-mode -1) (tool-bar-mode -1)) (menu-bar-mode -1) (setq warning-suppress-types nil) (set-face-background 'default "black") (set-face-foreground 'default "white") (add-to-list 'default-frame-alist '(background-mode . dark)) (require 'cl) (defun font-candidate (&rest fonts) "Return existing font which first match." (find-if (lambda (f) (find-font (font-spec :name f))) fonts)) (let ((fontval (font-candidate '"Inconsolata" "Source Code Pro" "Anonymous Pro"))) (when fontval (set-face-attribute 'default nil :font fontval))) (setq custom-file (concat ravi/init-dir "custom.el")) ;; Initialize package handling: currently using only the official repository and MELPA (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ;("original" . "http://tromey.com/elpa/") ("org" . "http://orgmode.org/elpa/") ;("marmalade" . "http://marmalade-repo.org/packages/") ("melpa" . "http://melpa.milkbox.net/packages/"))) (add-to-list 'load-path ravi/init-dir) (add-to-list 'load-path (ravi/emacs-file "site-lisp/")) (setq autoload-file (concat ravi/init-dir "loaddefs.el")) (setq package-user-dir (concat ravi/init-dir "elpa")) (package-initialize) (defvar ravi/default-install-packages (list 'yasnippet 'use-package 'bind-key 'diminish) "Libraries that should be installed by default.") (unless package-archive-contents (package-refresh-contents)) (dolist (package ravi/default-install-packages) (unless (package-installed-p package) (package-install package))) ;; Settings from M-x customize (load custom-file 'noerror) (require 'bind-key) (require 'use-package) (require 'diminish) ;; Show full frame windows for certain commands (use-package fullframe :ensure t ) ;; --------------------------------------------------------------------- ;; Stolen from purcell/emacs.d/init-utils.el (defmacro after-load (feature &rest body) "After FEATURE is loaded, evaluate BODY." (declare (indent defun)) `(eval-after-load ,feature '(progn ,@body))) (defun sanityinc/string-all-matches (regex str &optional group) "Find all matches for `REGEX' within `STR', returning the full match string or group `GROUP'." (let ((result nil) (pos 0) (group (or group 0))) (while (string-match regex str pos) (push (match-string group str) result) (setq pos (match-end group))) result)) ;; --------------------------------------------------------------------- (when (file-exists-p (ravi/emacs-file "local.el")) (load-file (ravi/emacs-file "local.el")) ) ;; Auto indent mode must be enabled before autopair and yasnippet (use-package auto-indent-mode :config (auto-indent-global-mode) :diminish auto-indent-mode :disabled t ;; this mode tries to do way too much :ensure t ) (use-package s :ensure t) (require 's) (require 'ravi-ergodox-mode) (if (s-contains? "Ergodox" (shell-command-to-string "xinput")) (ravi-ergodox-mode) (progn ;; Temporary key-bindings (bind-key "" 'ido-find-file) (bind-key "" 'ido-switch-buffer) (bind-key "" 'undo-tree-undo))) (use-package keyadvice :load-path ,(ravi/emacs-file "site-lisp/keyadvice") ) (use-package free-keys :ensure t :commands free-keys) (require 'ravi-init-ido) (require 'ravi-init-marks) (require 'ravi-init-appearance) (require 'ravi-init-files) (require 'ravi-init-vc) (require 'ravi-init-function) (require 'ravi-init-insertion) (require 'ravi-init-navigation) (require 'ravi-init-cpp) (require 'ravi-init-python) (require 'ravi-init-layouts) (require 'ravi-init-org) (require 'ravi-init-tex)