Skip to content

Instantly share code, notes, and snippets.

@thinkslate
Created October 6, 2010 19:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thinkslate/613890 to your computer and use it in GitHub Desktop.
Save thinkslate/613890 to your computer and use it in GitHub Desktop.
;; CLOJURE ;;
;; use an up-to-date version of clojure mode (technomancy's version)
(add-to-list 'load-path "~/src/clojure-mode")
;; initialize clojure-mode
(require 'clojure-mode)
;; setup autoloads for .clj documents
(autoload 'clojure-mode "clojure-mode" "A major mode for Clojure" t)
(add-to-list 'auto-mode-alist '("\\.clj$" . clojure-mode))
;; fix RET to give a newline and indent instead of using C-j
(define-key lisp-mode-shared-map (kbd "RET") 'reindent-then-newline-and-indent)
;; PAREDIT ;;
(require 'paredit)
(autoload 'paredit-mode "paredit"
"Minor mode for pseudo-structurally editing Lisp code." t)
;; setup hooks for paredit to enable on other major modes
(add-hook 'clojure-mode '(lambda () (paredit-mode t)))
(add-hook 'emacs-lisp-mode-hook (lambda () (paredit-mode +1)))
(add-hook 'lisp-mode-hook (lambda () (paredit-mode +1)))
(add-hook 'lisp-interaction-mode (lambda () (paredit-mode +1)))
(add-hook 'clojure-mode-hook (lambda () (paredit-mode +1)))
;; (add-hook 'ruby-mode-hook 'esk-paredit-nonlisp)
(eval-after-load "paredit"
'(progn
(define-key paredit-mode-map (kbd "RET") 'paredit-newline)
(define-key paredit-mode-map (kbd "{") 'paredit-open-curly)
(define-key paredit-mode-map (kbd "}") 'paredit-close-curly)))
;; SLIME ;;
(eval-after-load "slime"
'(progn
;(require 'slime-motd)
(require 'slime-banner)
(slime-banner-init)
;; fuzzy-completion
;(require 'slime-fuzzy)
;(setq slime-complete-symbol*-fancy t)
;(setq slime-complete-symbol-function 'slime-fuzzy-complete-symbol)
(require 'slime-tramp)
(slime-setup)))
;; REPL Hilighting ;;
;;http://gist.github.com/337280
;;; all code in this function lifted from the clojure-mode function
;;; from clojure-mode.el
(defun clojure-font-lock-setup ()
(interactive)
(set (make-local-variable 'lisp-indent-function)
'clojure-indent-function)
(set (make-local-variable 'lisp-doc-string-elt-property)
'clojure-doc-string-elt)
(set (make-local-variable 'font-lock-multiline) t)
(add-to-list 'font-lock-extend-region-functions
'clojure-font-lock-extend-region-def t)
(when clojure-mode-font-lock-comment-sexp
(add-to-list 'font-lock-extend-region-functions
'clojure-font-lock-extend-region-comment t)
(make-local-variable 'clojure-font-lock-keywords)
(add-to-list 'clojure-font-lock-keywords
'clojure-font-lock-mark-comment t)
(set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil))
(setq font-lock-defaults
'(clojure-font-lock-keywords ; keywords
nil nil
(("+-*/.<>=!?$%_&~^:@" . "w")) ; syntax alist
nil
(font-lock-mark-block-function . mark-defun)
(font-lock-syntactic-face-function
. lisp-font-lock-syntactic-face-function))))
(add-hook 'slime-repl-mode-hook
(lambda ()
(font-lock-mode nil)
(clojure-font-lock-setup)
(font-lock-mode t)))
(provide 'defn-clojure)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment