2010-03-19 16 views
34

Chciałbym otrzymać kolorowy REPL na kod clojure, podobny do tego, co można zrobić z IRB dla Ruby.Czy istnieje kolorowy REPL dla Clojure?

Czy są jakieś biblioteki lub ustawienia dla user.clj, które zapewniają automatyczne wybarwienie REPL?

Przykład IRB:

alt text

+0

To jest piękne! Jak mogę to zdobyć dla SLIM REPL? – Zolomon

+1

@Zolomon - zobacz moją odpowiedź poniżej. –

+1

Podobne pytanie: [Co zrobić, aby "lein repl" kolorowy?] (Http://stackoverflow.com/q/19500353/578288) –

Odpowiedz

16

Nie wiem w żaden sposób, aby mieć podstawowe Clojure REPL, jak zacząłem przez coś takiego jak java -cp clojure.jar clojure.main, czy podświetlanie składni. Jeśli jednak używasz Emacsa & SLIME (środowiska programistycznego z wyboru znacznej części społeczności Clojure!), Możesz mieć składnię podświetlania SLIM REPL, taką jak clojure-mode.

Po pierwsze, trzeba będzie podnieść trochę kodu z funkcji clojure-mode (zdefiniowany w kierunku szczytu 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)))) 

następnie dodać go do slime-repl-mode-hook:

(add-hook 'slime-repl-mode-hook 
      (lambda() 
      (font-lock-mode nil) 
      (clojure-font-lock-setup) 
      (font-lock-mode t))) 

Et voila , następnym razem, gdy połączysz się z REJONĄ SLIME, będziesz miał podświetlone składni clojure-mode. Jeśli korzystasz również z SLIME dla Common Lisp, będziesz chciał go poprawić tak, aby nie próbował podświetlać Clojure za pomocą CL. To także tylko pierwsze przybliżenie; jedną rzeczą tego rodzaju przerw jest natychmiastowe podświetlanie (sprawa namespace> nie będzie już podświetlona). Nie jestem wprawnym hackerem w każdym obszarze wyobraźni, więc zostawię to. :-)

+1

Och, przy okazji, to naprawdę * zastępuje * WYŚWIETLANIE REPLIKÓW SLIM REUMUJĄCYCH z clojure- Podświetlanie trybu ... Jest kilka przydatnych informacji na temat zwykłego podświetlania REPL, które można pominąć podczas korzystania z tego. Miejmy nadzieję, że w pewnym momencie da się to udoskonalić, aby nie było to kompromisem. –

+0

Niestety nie jestem użytkownikiem Emacsa, ale to wygląda fajnie. – thnetos

+0

@thnetos: Dzięki! @Wszystko, do kogo to może dotyczyć: Wpisałem kod w Gist tutaj: http://gist.github.com/337280 - obecna wersja zawiera dwie 'defadery', które powodują wyświetlanie monitu i wydruków' * out * 'być zaznaczone, ponieważ zwykle są one w SLIM REPL, podczas gdy wszystko inne ma jeszcze główne cechy trybu clojure. –

1

REKLAMA Eclipse Counterclockwise zapewnia pełną kolorystykę składni (w tym kolorowanie nawiasów tęczowych).

Uważam, że używa pod maską nREPL.

+0

Tak, to dokładnie używa nRepl, ale stosuje niestandardową strategię kolorowania, którą oczywiście można skonfigurować (autor @ tutaj). –

5
  • Install Emacs 24
  • Install Emacs Starter Kit v2
  • M-x package-install ->starter-kit-lisp
  • Dodaj do init.el: (add-hook 'slime-repl-mode-hook 'clojure-mode-font-lock-setup)
  • Install Swank for Clojure
  • Otwórz projekt Clojure i M-x clojure-jack-in

Emacs REPL

+1

to powinno zostać zaktualizowane, aby korzystać z https://github.com/kingtim/nrepl.el zamiast swank-clojure – 0x89

9

Jeśli chcesz tylko do barwienia szybka i używasz Leiningen (które powinny), ty można użyć :repl-options i ANSI escape sequences:

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

Referencje:

+2

Aby zrobić to dla twojego użytkownika, a nie dla pojedynczego projektu, dodaj to do '~/.lein/profiles.clj' –

+2

Umieść to w' ~/.lein/profiles.clj' dla globalnego koloru repl: '{: user {: repl-options {: prompt (fn [ns] (str" \ 033 [1; 32m "ns" => "" \ 033 [0m "))}}}} –

+0

Podczas dodawania do '~/.lein/profiles.clj', umieść config w profilu': repl', zamiast ': user'. Tak więc struktura to '{: repl {: repl-options {: prompt ...}}}'. Dzięki temu konfiguracja jest zdefiniowana tylko dla 'lein repl', a nie dla innych podkomend, takich jak' lein test'. –

2

CIDER użytkownicy mogą uzyskać kolorową rEPL dodając następujące ich config:

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

Aby otrzymać rEPL wyjściowy pokolorowane spróbować repl-color

enter image description here

21

dość późno do partii, tutaj, ale można dostać to z pomocą wtyczki Leiningen Ultra (który ma również wsparcie dla pokolorowane stacktraces i wyjścia testowego dość wydrukowanej) lub przez dodanie Whidbey do listy wtyczek Leiningen zamiast.

Próbka Ultra REPL: enter image description here

0

Jeśli jesteś użytkownikiem IntelliJ, doskonała Cursive jest doskonałym wyborem i zapewnia piękne kolory, które można dostosować:

enter image description here

0

Można spróbować LightTable, pozwala wybierać funkcje i działać natychmiast.

Powiązane problemy