I'd like to get a colored REPL for clojure code, similar to what you can do with IRB for Ruby.
Are there any libraries or settings for user.clj that provide automatic coloring of the REPL?
Example IRB:
I'd like to get a colored REPL for clojure code, similar to what you can do with IRB for Ruby.
Are there any libraries or settings for user.clj that provide automatic coloring of the REPL?
Example IRB:
I do not know of any way to have the basic Clojure REPL, as started by something like java -cp clojure.jar clojure.main
, do syntax highlighting. If, however, you use Emacs & SLIME (the development environment of choice of a great part of the Clojure community!), then you can have the SLIME REPL highlight syntax like clojure-mode
does.
First, you'll have to lift some code from the clojure-mode
function (defined towards the top of clojure-mode.el
):
;;; 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))))
Then add it to the slime-repl-mode-hook
:
(add-hook 'slime-repl-mode-hook
(lambda ()
(font-lock-mode nil)
(clojure-font-lock-setup)
(font-lock-mode t)))
Et voilà, next time you connect to the SLIME REPL you'll have clojure-mode
syntax highlighting available. If you use SLIME for Common Lisp too, you'll want to tweak this so it doesn't try to do Clojure highlighting with CL. Also, this is just a first approximation; one thing it sort of breaks is prompt highlighting (the namespace>
thing will not be highlighted anymore). I'm not a proficient font-lock
hacker by any stretch of the imagination, though, so I'll leave it at that. :-)
defadvice
s to make the prompt and printouts on *out*
be highlighted as they usually are in SLIME REPL, while everything else still gets clojure-mode highlights. –
Eximious I do not know of any way to have the basic Clojure REPL, as started by something like java -cp clojure.jar clojure.main
, do syntax highlighting. If, however, you use Emacs & SLIME (the development environment of choice of a great part of the Clojure community!), then you can have the SLIME REPL highlight syntax like clojure-mode
does.
First, you'll have to lift some code from the clojure-mode
function (defined towards the top of clojure-mode.el
):
;;; 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))))
Then add it to the slime-repl-mode-hook
:
(add-hook 'slime-repl-mode-hook
(lambda ()
(font-lock-mode nil)
(clojure-font-lock-setup)
(font-lock-mode t)))
Et voilà, next time you connect to the SLIME REPL you'll have clojure-mode
syntax highlighting available. If you use SLIME for Common Lisp too, you'll want to tweak this so it doesn't try to do Clojure highlighting with CL. Also, this is just a first approximation; one thing it sort of breaks is prompt highlighting (the namespace>
thing will not be highlighted anymore). I'm not a proficient font-lock
hacker by any stretch of the imagination, though, so I'll leave it at that. :-)
defadvice
s to make the prompt and printouts on *out*
be highlighted as they usually are in SLIME REPL, while everything else still gets clojure-mode highlights. –
Eximious If you just want to color the prompt and you are using Leiningen (which you should), you can use :repl-options
and ANSI escape sequences:
:repl-options {:prompt (fn [ns]
(str "\033[1;32m"
ns "=>"
"\033[0m "))}
References:
~/.lein/profiles.clj
–
Slyke ~/.lein/profiles.clj
for global colored repl: {:user {:repl-options {:prompt (fn [ns] (str "\033[1;32m" ns "=>" "\033[0m "))}}}
–
Spacetime ~/.lein/profiles.clj
, put the config within the :repl
profile, instead of :user
. So the structure is {:repl {:repl-options {:prompt …}}}
. This ensures the config is only defined for lein repl
, not for other subcommands like lein test
. –
Zoogeography M-x package-install
-> starter-kit-lisp
(add-hook 'slime-repl-mode-hook 'clojure-mode-font-lock-setup)
M-x clojure-jack-in
Try out Light Table Playground by Chris Granger. It is the first part of more ambitous multi language IDE.
It has a color Clojure REPL that does real time evaluations and display for entire blocks of code.
http://www.chris-granger.com/lighttable/
You can see a higher level view of the project here:
CIDER users can obtain a coloured REPL by adding the following to their config:
(setq cider-repl-use-clojure-font-lock t)
The Eclipse Counterclockwise REPL provides full syntax colouring (including rainbow bracket colouring).
I believe it uses nREPL under the hood.
If you're an Intellij user, the excellent Cursive is a great choice, and provides pretty colours that you can customise:
You can try LightTable, it lets you select the functions and run instantly.
© 2022 - 2024 — McMap. All rights reserved.
lein repl
colorful? – Zoogeography