Is there a colored REPL for Clojure?

[亡魂溺海] 提交于 2019-11-29 20:37:31

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. :-)

Rather late to the party, here, but you can get this from using the Leiningen plugin Ultra (which also has support for colorized stacktraces and pretty-printed test output), or by adding Whidbey to your list of Leiningen plugins instead.

Sample Ultra REPL:

0x89

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:

  • Install Emacs 24
  • Install Emacs Starter Kit v2
  • M-x package-install -> starter-kit-lisp
  • Add to init.el: (add-hook 'slime-repl-mode-hook 'clojure-mode-font-lock-setup)
  • Install Swank for Clojure
  • Open your Clojure project and M-x clojure-jack-in

Some coloring have REPL in VimClojure.

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:

http://www.kickstarter.com/projects/ibdknox/light-table

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:

To get your REPL output colorized try repl-color

You can try LightTable, it lets you select the functions and run instantly.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!