modified from https://github.com/flyingmachine/emacs-for-clojure
;;;; ;; Packages ;;;; ;; Define package repositories (require 'package) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/") t) (add-to-list 'package-archives '("tromey" . "http://tromey.com/elpa/") t) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) ;; (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ;; ("marmalade" . "http://marmalade-repo.org/packages/") ;; ("melpa" . "http://melpa-stable.milkbox.net/packages/"))) ;; Load and activate emacs packages. Do this first so that the ;; packages are loaded before you start trying to modify them. ;; This also sets the load path. (package-initialize) ;; Download the ELPA archive description if needed. ;; This informs Emacs about the latest versions of all packages, and ;; makes them available for download. (when (not package-archive-contents) (package-refresh-contents)) ;; The packages you want installed. You can also install these ;; manually with M-x package-install ;; Add in your own as you wish: (defvar my-packages '(;; makes handling lisp expressions much, much easier ;; Cheatsheet: http://www.emacswiki.org/emacs/PareditCheatsheet paredit ;; key bindings and code colorization for Clojure ;; https://github.com/clojure-emacs/clojure-mode clojure-mode ;; extra syntax highlighting for clojure clojure-mode-extra-font-locking ;; integration with a Clojure REPL ;; https://github.com/clojure-emacs/cider cider ;; allow ido usage in as many contexts as possible. see ;; customizations/navigation.el line 23 for a description ;; of ido ido-ubiquitous ;; Enhances M-x to allow easier execution of commands. Provides ;; a filterable list of possible commands in the minibuffer ;; http://www.emacswiki.org/emacs/Smex smex ;; project navigation projectile ;; colorful parenthesis matching rainbow-delimiters ;; edit html tags like sexps ;; tagedit ;; git integration ;;magit )) (dolist (p my-packages) (when (not (package-installed-p p)) (package-install p))) ;; Place downloaded elisp files in ~/.emacs.d/vendor. You'll then be able ;; to load them. ;; ;; For example, if you download yaml-mode.el to ~/.emacs.d/vendor, ;; then you can add the following code to this file: ;; ;; (require 'yaml-mode) ;; (add-to-list 'auto-mode-alist '("\\.yml$" . yaml-mode)) ;; ;; Adding this code will make Emacs enter yaml mode whenever you open ;; a .yml file (add-to-list 'load-path "~/.emacs.d/vendor") ;; change default start up directory (setq default-directory "C:/Users/hello/") ;; Go straight to scratch buffer on startup (setq inhibit-startup-message t) ;; "When several buffers visit identically-named files, ;; Emacs must give the buffers distinct names. The usual method ;; for making buffer names unique adds ‘’, ‘’, etc. to the end ;; of the buffer names (all but one of them). ;; The forward naming method includes part of the file's directory ;; name at the beginning of the buffer name ;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Uniquify.html (require 'uniquify) (setq uniquify-buffer-name-style 'forward) ;; Turn on recent file mode so that you can more easily switch to ;; recently edited files when you first start emacs (setq recentf-save-file (concat user-emacs-directory ".recentf")) (require 'recentf) (recentf-mode 1) (setq recentf-max-menu-items 40) ;; ido-mode allows you to more easily navigate choices. For example, ;; when you want to switch buffers, ido presents you with a list ;; of buffers in the the mini-buffer. As you start to type a buffer's ;; name, ido will narrow down the list of buffers to match the text ;; you've typed in ;; http://www.emacswiki.org/emacs/InteractivelyDoThings (ido-mode t) ;; This allows partial matches, e.g. "tl" will match "Tyrion Lannister" (setq ido-enable-flex-matching t) ;; Turn this behavior off because it's annoying (setq ido-use-filename-at-point nil) ;; Don't try to match file across all "work" directories; only match files ;; in the current directory displayed in the minibuffer (setq ido-auto-merge-work-directories-length -1) ;; Includes buffer names of recently open files, even if they're not ;; open now (setq ido-use-virtual-buffers t) ;; This enables ido in all contexts where it could be useful, not just ;; for selecting buffer and file names (ido-ubiquitous-mode 1) ;; Shows a list of buffers (global-set-key (kbd "C-x C-b") 'ibuffer) ;; Enhances M-x to allow easier execution of commands. Provides ;; a filterable list of possible commands in the minibuffer ;; http://www.emacswiki.org/emacs/Smex (setq smex-save-file (concat user-emacs-directory ".smex-items")) (smex-initialize) (global-set-key (kbd "M-x") 'smex) ;; projectile everywhere! (projectile-global-mode) ;; turn on menu bar (menu-bar-mode 1) ;; Show line numbers (global-linum-mode) ;; You can uncomment this to remove the graphical toolbar at the top. After ;; awhile, you won't need the toolbar. ;; (when (fboundp 'tool-bar-mode) ;; (tool-bar-mode -1)) ;; Don't show native OS scroll bars for buffers because they're redundant (when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1)) ;; Color Themes ;; Read http://batsov.com/articles/2012/02/19/color-theming-in-emacs-reloaded/ ;; for a great explanation of emacs color themes. ;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Custom-Themes.html ;; for a more technical explanation. (add-to-list 'custom-theme-load-path "~/.emacs.d/themes") (add-to-list 'load-path "~/.emacs.d/themes") (load-theme 'tomorrow-night-bright t) ;; increase font size for better readability (set-face-attribute 'default nil :height 120) ;; These settings relate to how emacs interacts with your operating system (setq ;; makes killing/yanking interact with the clipboard x-select-enable-clipboard t ;; I'm actually not sure what this does but it's recommended? x-select-enable-primary t ;; Save clipboard strings into kill ring before replacing them. ;; When one selects something in another program to paste it into Emacs, ;; but kills something in Emacs before actually pasting it, ;; this selection is gone unless this variable is non-nil save-interprogram-paste-before-kill t ;; Shows all options when running apropos. For more info, ;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Apropos.html apropos-do-all t ;; Mouse yank commands yank at point instead of at click. mouse-yank-at-point t) ;; enable cursor blinking (blink-cursor-mode 1) ;; full path in title bar (setq-default frame-title-format "%b (%f)") ;; don't pop up font menu (global-set-key (kbd "s-t") '(lambda () (interactive))) ;; uncomment to disable bell ;; (setq ring-bell-function 'ignore) ;; Highlights matching parenthesis (show-paren-mode 1) ;; Highlight current line (global-hl-line-mode 1) ;; When you visit a file, point goes to the last place where it ;; was when you previously visited the same file. ;; http://www.emacswiki.org/emacs/SavePlace (require 'saveplace) (setq-default save-place t) ;; keep track of saved places in ~/.emacs.d/places (setq save-place-file (concat user-emacs-directory "places")) ;; Emacs can automatically create backup files. This tells Emacs to ;; put all backups in ~/.emacs.d/backups. More info: ;; http://www.gnu.org/software/emacs/manual/html_node/elisp/Backup-Files.html (setq backup-directory-alist `(("." . ,(concat user-emacs-directory "backups")))) (setq auto-save-default nil) ;; yay rainbows! (global-rainbow-delimiters-mode t) (setq electric-indent-mode 1) ;; For editing lisps ;; Automatically load paredit when editing a lisp file ;; More at http://www.emacswiki.org/emacs/ParEdit (autoload 'enable-paredit-mode "paredit" "Turn on pseudo-structural editing of Lisp code." t) (add-hook 'emacs-lisp-mode-hook #'enable-paredit-mode) (add-hook 'eval-expression-minibuffer-setup-hook #'enable-paredit-mode) (add-hook 'ielm-mode-hook #'enable-paredit-mode) (add-hook 'lisp-mode-hook #'enable-paredit-mode) (add-hook 'lisp-interaction-mode-hook #'enable-paredit-mode) (add-hook 'scheme-mode-hook #'enable-paredit-mode) ;; eldoc-mode shows documentation in the minibuffer when writing code ;; http://www.emacswiki.org/emacs/ElDoc (add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode) (add-hook 'lisp-interaction-mode-hook 'turn-on-eldoc-mode) (add-hook 'ielm-mode-hook 'turn-on-eldoc-mode) ;;;; ;; Clojure ;;;; ;; Enable paredit for Clojure (add-hook 'clojure-mode-hook 'enable-paredit-mode) ;; This is useful for working with camel-case tokens, like names of ;; Java classes (e.g. JavaClassName) (add-hook 'clojure-mode-hook 'subword-mode) ;; A little more syntax highlighting (require 'clojure-mode-extra-font-locking) ;;;; ;; Cider ;;;; ;; provides minibuffer documentation for the code you're typing into the repl (add-hook 'cider-mode-hook 'cider-turn-on-eldoc-mode) ;; go right to the REPL buffer when it's finished connecting (setq cider-repl-pop-to-buffer-on-connect t) ;; When there's a cider error, show its buffer and switch to it (setq cider-show-error-buffer t) (setq cider-auto-select-error-buffer t) ;; Where to store the cider history. (setq cider-repl-history-file "~/.emacs.d/cider-history") ;; Wrap when navigating history. (setq cider-repl-wrap-history t) ;; enable paredit in your REPL (add-hook 'cider-repl-mode-hook 'paredit-mode)