2010-03-19 20 views
34

Me gustaría obtener un REPL de color para código clojure, similar a lo que puedes hacer con IRB para Ruby.¿Hay un REPL de color para Clojure?

¿Hay alguna biblioteca o configuración para user.clj que proporcione una coloración automática del REPL?

Ejemplo IRB:

alt text

+0

¡Eso es bonito! ¿Cómo puedo obtener eso para SLIME REPL? – Zolomon

+1

@Zolomon - vea mi respuesta a continuación. –

+1

Pregunta similar: [¿Qué hacer para que 'lein repl' colorful?] (Http://stackoverflow.com/q/19500353/578288) –

Respuesta

16

No conozco ninguna forma de tener el CLOCURE REPL básico, como comenzó por algo como java -cp clojure.jar clojure.main, resaltar la sintaxis. Sin embargo, si usa Emacs & SLIME (¡el entorno de desarrollo elegido para una gran parte de la comunidad Clojure!), Entonces puede tener la sintaxis de resaltado SLIME REPL como clojure-mode.

primer lugar, usted tiene que levantar algo de código de la función clojure-mode (definida hacia la parte superior de 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)))) 

luego añadirlo a la 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à La próxima vez que se conecte a SLIME REPL, tendrá a su disposición clojure-mode resaltado de sintaxis. Si también usa SLIME para Common Lisp, querrá ajustar esto para que no intente resaltar Clojure con CL. Además, esto es solo una primera aproximación; una cosa que se rompe es el resaltado rápido (la cosa namespace> ya no se resaltará). Sin embargo, no soy un hacker hábil con font-lock por cualquier estiramiento de la imaginación, así que lo dejo así. :-)

+1

Oh, por cierto, esto realmente * reemplaza * SLIME REPL resaltando con clojure- resaltado de modo ... Hay algunas cosas útiles sobre el REPL habitual resaltando lo que se puede perder al usar esto. Afortunadamente, en algún momento esto se puede refinar para que esto no sea una solución de compromiso. –

+0

Desafortunadamente no soy un usuario de Emacs, pero esto se ve bien. – thnetos

+0

@thnetos: ¡Gracias! @Todo a quien esto pueda interesar: he puesto el código en un Gist aquí: http://gist.github.com/337280 - la versión actual incluye dos 'defadvice' s para hacer el prompt y las impresiones en' * out * 'se resalta como usualmente están en SLIME REPL, mientras que todo lo demás sigue resaltando clojure-mode. –

1

El Eclipse Counterclockwise REPL proporciona una coloración de sintaxis completa (incluida la coloración del soporte del arco iris).

Creo que usa nREPL debajo del capó.

+0

Sí, usa exactamente nRepl pero emplea una estrategia de color personalizada que, por supuesto, se puede configurar (colaborador @ aquí) –

5
  • Instalar Emacs 24
  • Instalar Emacs Starter Kit v2
  • M-x package-install ->starter-kit-lisp
  • Añadir a init.el: (add-hook 'slime-repl-mode-hook 'clojure-mode-font-lock-setup)
  • Instalar Swank for Clojure
  • Abra su proyecto Clojure y M-x clojure-jack-in

Emacs REPL

+1

, esta debe actualizarse para usar https://github.com/kingtim/nrepl.el en lugar de swank-clojure – 0x89

9

Si lo que desea es dar color a la pronta y está utilizando Leiningen (que debería), se puede utilizar :repl-options y ANSI escape sequences:

:repl-options {:prompt (fn [ns] 
         (str "\033[1;32m" 
           ns "=>" 
           "\033[0m "))} 

Referencias:

+2

Para que esto se aplique a su usuario en lugar de un solo proyecto, agréguelo a '~/.lein/profiles.clj' –

+2

Ponga esto en' ~/.lein/profiles.clj' para colores globales repl: '{: user {: repl-options {: prompt (fn [ns] (str" \ 033 [1; 32m "ns" => "" \ 033 [0m "))}}}' –

+0

Al agregar esto para '~/.lein/profiles.clj', ponga la configuración dentro del perfil': repl', en lugar de ': user'. Entonces la estructura es '{: repl {: repl-options {: prompt ...}}}'. Esto asegura que la configuración solo está definida para 'lein repl', no para otros subcomandos como' lein test'. –

2

CIDER los usuarios pueden obtener una REPL color añadiendo lo siguiente a su configuración:

(setq cider-repl-use-clojure-font-lock t) 
0

para obtener su REPL salida coloreada intento repl-color

enter image description here

21

Más bien tarde a la fiesta, aquí, pero se puede conseguir esto de usar el plugin Leiningen Ultra (que también tiene soporte para stacktraces coloreada y salida de prueba bastante impresa), o mediante la adición Whidbey a su lista de plugins Leiningen en lugar.

Muestra REPL Ultra: enter image description here

0

Si usted es un usuario de IntelliJ, el excelente Cursive es una gran opción, y proporciona colores bonitos que se pueden personalizar:

enter image description here

0

Usted puede tratar LightTable, te permite seleccionar las funciones y ejecutar al instante.

Cuestiones relacionadas