;; (require 'cl) ;; Emacs under-the-hood (setq redisplay-dont-pause t) (prefer-coding-system 'utf-8) (setq-default gc-cons-threshold 50000000) ; avoid garbage collection (default is only 400k) (setq make-backup-files nil) ; Don't want any backup files (setq auto-save-list-file-name nil) ; Don't want any .saves files (setq auto-save-default nil) ; Don't want any auto saving ;; If I ever enable bkacups/autosaves, then change where they go (setq backup-directory-alist `((".*" . ,my-tmp-dir))) (setq auto-save-file-name-transforms `((".*" ,my-tmp-dir t))) ;; Always revert buffers if the files were changed (global-auto-revert-mode 1) ;; window layout undo/redo, keymaps in init-evil.el (when (fboundp 'winner-mode) (winner-mode 1)) (defun kill-other-buffers () (interactive) (mapc 'kill-buffer (cdr (buffer-list (current-buffer)))) (message "All other buffers killed") ) (defun kill-all-buffers () (interactive) (mapc 'kill-buffer (buffer-list)) (message "All buffers killed") ) ;;;; Advice ;;;;;;;;;;;;;;;;;;;;;;;; ;; I do it this way because hooking mc/keyboard-quit to insert mode's exit ;; hook breaks multiple-cursors! (defadvice keyboard-quit (around mc-and-keyboard-quit activate) (mc/keyboard-quit) ad-do-it) ;; Make next/previous-buffer skip special buffers (defadvice next-buffer (after avoid-messages-buffer-in-next-buffer) "Advice around `next-buffer' to avoid going into the *Messages* buffer." (when (string= "*Messages*" (buffer-name)) (next-buffer))) (defadvice previous-buffer (after avoid-messages-buffer-in-previous-buffer) "Advice around `previous-buffer' to avoid going into the *Messages* buffer." (when (string= "*Messages*" (buffer-name)) (previous-buffer))) ;; Prevent prompts when trying to close window. If I'm closing the window, ;; I likely want it to close! (defadvice save-buffers-kill-emacs (around no-y-or-n activate) (flet ((yes-or-no-p (&rest args) t) (y-or-n-p (&rest args) t)) ad-do-it)) ;;;; My personal minor mode ;;;;;;;; (defvar my-mode-map (make-sparse-keymap)) (define-minor-mode my-mode :keymap my-mode-map) ;;;; Commands ;;;;;;;;;;;;;;;;;;;;;; (defun minibuffer-quit () "Abort recursive edit. In Delete Selection mode, if the mark is active, just deactivate it; then it takes a second \\[keyboard-quit] to abort the minibuffer." (interactive) (if (and delete-selection-mode transient-mark-mode mark-active) (setq deactivate-mark t) (when (get-buffer "*Completions*") (delete-windows-on "*Completions*")) (abort-recursive-edit))) ;; File navigation defuns (defun my-init () (interactive) (find-file (expand-file-name "init.el" my-dir))) (defun my-init-find () (interactive) (projectile-find-file-in-directory my-dir)) (defun open-scratch-buffer () (interactive) (switch-to-buffer (get-buffer-create "*scratch*")) (text-mode)) ;; Open the modules/env-{major-mode-name}.el file, if it exists (defun open-major-mode-conf () (interactive) (let ((path (major-mode-module-path))) (if (file-exists-p path) (find-file path) (progn (find-file path) (message (concat "Mode (" (major-mode-name) ") doesn't have a module! Creating it...")))))) ;; (defun backward-kill-line () (interactive) (evil-delete (point-at-bol) (point))) (defun expand-space () (interactive) (save-excursion (insert " "))) (defun expand-backspace () (interactive) (save-excursion (delete-char 1)) (delete-backward-char 1)) (defun toggle-sidebar () (interactive) (project-explorer-open)) (defun major-mode-name () (symbol-name major-mode)) (defun major-mode-module-name () (concat "env-" (major-mode-name))) (defun major-mode-module-path () (expand-file-name (concat (major-mode-module-name) ".el") my-modules-dir)) ;; TODO: Write better eval-and-replace ;;;; Macros ;;;;;;;;;;;;;;;;;;;;;;;; ;; Vimmish keymapping shortcuts (defmacro nmap (&rest body) `(evil-define-key 'normal my-mode-map ,@body)) (defmacro vmap (&rest body) `(evil-define-key 'visual my-mode-map ,@body)) (defmacro imap (&rest body) `(evil-define-key 'insert my-mode-map ,@body)) (defmacro emap (&rest body) `(evil-define-key 'emacs my-mode-map ,@body)) ;; Global mapping (defmacro gmap (key command) `(global-set-key ,key ,command)) ;; insert-mode key-chord mapping (defmacro ichmap (key command) `(key-chord-define evil-insert-state-map ,key ,command)) ;; defines ex commands (defmacro cmap (ex function) `(evil-ex-define-cmd ,ex ,function)) ;; This one's unique for my own special mappings ;; (defmacro map (key command) ;; `(define-key my-mode-map ,key ,command)) (defmacro is-osx () '(eq system-type 'darwin)) ;;;; Defuns ;;;;;;;;;;;;;;;;;;;;;;; (defun no-linum () (linum-mode 0)) ;; (provide 'core)