Last active
October 1, 2015 05:58
-
-
Save hugoduncan/1934037 to your computer and use it in GitHub Desktop.
.emacs fragment for slime setup with ritz
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;;; slime setup | |
;;; Setup the hooks for loading customisations | |
;; one-off slime configuration | |
(add-hook 'slime-load-hook 'my-slime-setup) | |
;; per slime connection | |
(add-hook 'slime-connected-hook 'my-slime-connection-setup) | |
(add-hook 'slime-clj-connected-hook 'my-slime-clj-connection-setup) | |
;; per buffer | |
(add-hook 'slime-clj-repl-mode-hook 'my-clojure-repl-setup) | |
(add-hook 'lisp-mode-hook 'my-lisp-mode-setup) | |
(add-hook 'clojure-mode-hook 'my-clojure-mode-setup) | |
(add-hook 'nrepl-interaction-mode-hook 'my-nrepl-mode-setup) | |
(setq clojure-swank-command | |
(if (or (locate-file "lein" | |
exec-path) (locate-file "lein.bat" exec-path)) | |
"lein ritz-in %s" | |
"echo \"lein ritz-in %s\" | $SHELL -l")) | |
;;; slime configurations | |
(defun my-slime-setup () | |
(setq slime-protocol-version 'ignore) | |
(setq slime-net-coding-system 'utf-8-unix) | |
(setq sldb-initial-restart-limit 8) | |
(slime-setup '(slime-repl | |
slime-fuzzy | |
;; slime-asdf | |
;; slime-hyperdoc | |
slime-autodoc | |
slime-presentations | |
;; slime-media | |
)) | |
(setq slime-complete-symbol-function 'slime-fuzzy-complete-symbol) | |
(global-set-key [(control f10)] 'slime-selector) | |
;; various common lisp implementations | |
(setq slime-lisp-implementations | |
(append | |
slime-lisp-implementations | |
'((sbcl ("/Users/duncan/src/clbuild/target/bin/sbcl")) | |
(ecl ("/Users/duncan/ecl")) | |
(ccl ("/Users/duncan/src/ccl/scripts/openmcllime")) | |
(ccl64 ("/Users/duncan/src/ccl/scripts/openmcll64")))))) | |
(defun my-slime-connection-setup () | |
(when (slime-inferior-process) | |
(slime-redirect-inferior-output)) | |
(define-key slime-mode-map (kbd "<return>") 'newline-and-indent) | |
(define-key slime-mode-map (kbd "C-j") 'newline) | |
(define-key slime-mode-map (kbd "<tab>") 'slime-indent-and-complete-symbol) | |
;; this function resets the default connections | |
;; - useful mainly when developping swank backends | |
(defun slime-reset-connections () | |
(interactive) | |
(setq slime-dispatching-connection nil) | |
(setq slime-default-connection nil))) | |
(defun my-slime-clj-connection-setup () | |
) | |
(defun my-base-lisp-mode-setup () | |
(whitespace-mode t) | |
(add-hook 'write-file-functions 'whitespace-write-file-hook t) | |
(setq whitespace-action '(auto-cleanup)) | |
(require 'undo-tree) | |
(undo-tree-mode t) | |
(flyspell-prog-mode) | |
(setq indent-tabs-mode nil) | |
(paredit-mode t)) ;; this last, in case it fails | |
(defun my-lisp-mode-setup () | |
(cond ((not (featurep 'slime)) | |
(require 'slime) | |
(require 'gist) | |
(normal-mode))) | |
(my-base-lisp-mode-setup)) | |
(setq clojure-swank-command "~/bin/lein ritz-in %s") | |
(defun my-clojure-mode-setup () | |
(possibly-enable-clojure-test-mode) | |
(define-key clojure-mode-map (kbd "C-c t") 'my-clojure-jump-to-test) | |
;; (slime-mode t) | |
;; (midje-mode) | |
;; (require 'slime) | |
(my-base-lisp-mode-setup) | |
(when (boundp 'slime-connected-p) | |
(when (slime-connected-p) | |
(slime-javadoc-local-paths | |
(list (concat (expand-file-name "~") "/lisp/docs/java")))) | |
(def-slime-selector-method ?j | |
"most recently visited clojure-mode buffer." | |
(slime-recently-visited-buffer 'clojure-mode))) | |
(put-clojure-indent 'fresh 1) | |
(put-clojure-indent 'project 1) | |
(put-clojure-indent 'run* 1) | |
(put-clojure-indent 'when-feature 1) | |
(put-clojure-indent 'build-actions 1) | |
(put-clojure-indent 'phase-context 2) | |
(put-clojure-indent 'wrap-pipeline 1) | |
(put-clojure-indent 'pipeline-when 1) | |
(put-clojure-indent 'pipeline-when-not 1) | |
(put-clojure-indent 'm-when 1) | |
(put-clojure-indent 'm-when-not 1) | |
(put-clojure-indent 'plan-fn 'defun) | |
(put-clojure-indent 'delayed 1) | |
(put-clojure-indent 'test-for 1) | |
(put-clojure-indent 'test-nodes 1) | |
(put-clojure-indent 'with-session 1) | |
(put-clojure-indent 'defmethod-version-plan 3) | |
(put-clojure-indent 'add-plan-method-to-multi 2)) | |
(defun my-nrepl-mode-setup () | |
;; no session here... | |
(message "my-nrepl-mode-setup") | |
(require 'nrepl-ritz) | |
(setq nrepl-ritz-javadoc-local-paths | |
(list (concat (expand-file-name "~") "/lisp/docs/java"))) | |
;; (my-base-lisp-mode-setup) | |
(message "my-nrepl-mode-setup done")) | |
(eval-after-load 'clojure-test-mode | |
'(progn | |
(define-key clojure-test-mode-map (kbd "C-c t") | |
'my-clojure-test-jump-to-implementation))) | |
;; (add-hook 'paredit-mode-hook | |
;; (lambda () | |
;; (when (>= paredit-version 21) | |
;; (define-key slime-repl-mode-map "{" 'paredit-open-curly) | |
;; (define-key slime-repl-mode-map "}" 'paredit-close-curly)))) | |
(defun my-clojure-repl-setup () | |
(require 'clojure-mode) | |
(set-syntax-table clojure-mode-syntax-table) | |
(clojure-mode-font-lock-setup) | |
(setq slime-ritz-javadoc-local-paths | |
(list (concat (expand-file-name "~") "/lisp/docs/java"))) | |
(require 'durendal) | |
(durendal-enable-slime-repl-font-lock) | |
(durendal-slime-repl-paredit) | |
(define-key slime-mode-map (kbd "C-.") 'find-tag) | |
(define-key slime-repl-mode-map (kbd "C-.") 'find-tag) | |
(define-key slime-repl-mode-map (kbd "M-r") 'slime-repl-previous-matching-input) | |
(define-key slime-repl-mode-map (kbd "M-s") 'slime-repl-next-matching-input) | |
(define-key slime-repl-mode-map "{" 'paredit-open-curly) | |
(define-key slime-repl-mode-map "}" 'paredit-close-curly) | |
(when (slime-inferior-process) | |
(slime-redirect-inferior-output)) | |
(paredit-mode t)) | |
(defun possibly-enable-clojure-test-mode () | |
(save-excursion | |
(goto-char (point-min)) | |
(if (search-forward "(deftest" nil t) | |
(clojure-test-mode t)))) | |
;;; Mapping from implementation namespace/file to test namespace/file | |
(defun my-clojure-test-for (namespace) | |
(let* ((namespace (clojure-underscores-for-hyphens namespace)) | |
(segments (split-string namespace "\\."))) | |
(concat (mapconcat 'identity segments "/") "_test"))) | |
(defun my-clojure-jump-to-test () | |
"Jump from implementation to test file. Overide clojure-mode's default mapping | |
to add \"-test\" to test namespace." | |
(interactive) | |
(find-file | |
(format | |
"%s/test/%s.clj" | |
(expand-file-name (locate-dominating-file buffer-file-name "src/")) | |
(my-clojure-test-for (clojure-find-ns))))) | |
(defun my-clojure-test-implementation-for (namespace) | |
"Overide clojure-mode's default mapping to add \"-test\" to test namespace." | |
(let* ((namespace (replace-regexp-in-string "-test" "" namespace)) | |
(namespace (clojure-underscores-for-hyphens namespace)) | |
(segments (split-string namespace "\\."))) | |
(mapconcat 'identity segments "/"))) | |
(defun my-clojure-test-jump-to-implementation () | |
"Jump from test file to implementation. Overide clojure-mode's default mapping." | |
(interactive) | |
(find-file (format "%s/src/%s.clj" | |
(locate-dominating-file buffer-file-name "src/") | |
(my-clojure-test-implementation-for (clojure-find-package))))) | |
;;; paredit | |
(eval-after-load 'paredit | |
'(progn | |
(define-key paredit-mode-map (kbd ";") 'self-insert-command))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment