From c6f43c514b4b5afe3bd156f7522fc23589cc77d1 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Wed, 28 Sep 2016 00:01:26 +0200 Subject: [PATCH] Add clojure and cider configuration --- emacs/.emacs.d/init.org | 87 +++++++++++++++++++++++++ emacs/.emacs.d/site-lisp/oni-clojure.el | 44 +++++++++++++ 2 files changed, 131 insertions(+) create mode 100644 emacs/.emacs.d/site-lisp/oni-clojure.el diff --git a/emacs/.emacs.d/init.org b/emacs/.emacs.d/init.org index 13f18fd..b440c06 100644 --- a/emacs/.emacs.d/init.org +++ b/emacs/.emacs.d/init.org @@ -701,6 +701,93 @@ To start off, first I need to enable lexical binding. (add-hook 'css-mode-hook 'electric-indent-local-mode) #+END_SRC +** Clojure mode + + #+BEGIN_SRC emacs-lisp + (ensure-library clojure-mode) + #+END_SRC + + Install extra font-locking for clojure. + + #+BEGIN_SRC emacs-lisp + (ensure-library clojure-mode-extra-font-locking) + + (with-eval-after-load 'clojure-mode + (require 'clojure-mode-extra-font-locking)) + #+END_SRC + + Enable paredit mode. + + #+BEGIN_SRC emacs-lisp + (add-hook 'clojure-mode-hook 'paredit-mode) + #+END_SRC + + Use the clojure repl as the inferior lisp mode. + + #+BEGIN_SRC emacs-lisp + (eval-when-compile (require 'inf-lisp)) + + (defun oni:clojure-set-inferior-lisp () + (setq inferior-lisp-program "lein repl")) + #+END_SRC + + Add a little more font locking still, and some indentation. This is + included in the Clojure for the Brave and True configuration. + + #+BEGIN_SRC emacs-lisp + (add-hook 'clojure-mode-hook 'oni-clojure-add-font-lock) + (add-hook 'clojure-mode-hook 'oni-clojure-add-indent) + #+END_SRC + +** Cider mode + + Cider is like Slime for Common Lisp. This configuration is copied + from the one provided by Clojure for the Brave and True. + + #+BEGIN_SRC emacs-lisp + (ensure-library cider) + #+END_SRC + + Provides minibuffer documentation for the code you're typing into + the repl. + + #+BEGIN_SRC emacs-lisp + (add-hook 'cider-mode-hook 'cider-turn-on-eldoc-mode) + #+END_SRC + + Go right to the REPL buffer when it's finished connecting + + #+BEGIN_SRC emacs-lisp + (with-eval-after-load 'cider + (setq cider-repl-pop-to-buffer-on-connect t)) + #+END_SRC + + When there's a cider error, show its buffer and switch to it. + + #+BEGIN_SRC emacs-lisp + (setq cider-show-error-buffer t + cider-auto-select-error-buffer t) + #+END_SRC + + Where to store the cider history. + + #+BEGIN_SRC emacs-lisp + (setq cider-repl-history-file + (oni:data-location "cider-history")) + #+END_SRC + + Wrap when navigating history. + + #+BEGIN_SRC emacs-lisp + (setq cider-repl-wrap-history t) + #+END_SRC + + Enable paredit in your REPL. + + #+BEGIN_SRC emacs-lisp + (add-hook 'cider-repl-mode-hook 'paredit-mode) + #+END_SRC + * Applications ** Magit diff --git a/emacs/.emacs.d/site-lisp/oni-clojure.el b/emacs/.emacs.d/site-lisp/oni-clojure.el new file mode 100644 index 0000000..c739de5 --- /dev/null +++ b/emacs/.emacs.d/site-lisp/oni-clojure.el @@ -0,0 +1,44 @@ +;;; oni-clojure.el --- Extra commands and functions for clojure-mode -*- lexical-binding: t; -*- + +;; Copyright (C) 2016 Tom Willemse + +;; Author: Tom Willemse +;; Keywords: + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; + +;;; Code: + +(require 'clojure-mode) + +;;;###autoload +(defun oni-clojure-add-font-lock () + (font-lock-add-keywords + nil + '(("(\\(facts?\\)" + (1 font-lock-keyword-face)) + ("(\\(background?\\)" + (1 font-lock-keyword-face))))) + +;;;###autoload +(defun oni-clojure-add-indent () + (define-clojure-indent (fact 1)) + (define-clojure-indent (facts 1))) + +(provide 'oni-clojure) +;;; oni-clojure.el ends here