2011-05-13 8 views
9

Mam problemy z konfiguracją SLIME do pracy z Clojure i Common Lisp. Większość deweloperów Clojure ma tendencję do korzystania z rozebranego SLIME dostępnego za pośrednictwem ELPA, który jest zamrożony dla kompatybilności Clojure. Ja jednak również robię dużo hackowania Common Lisp i generalnie używam wersji SLIME CVS (uzyskanej za pośrednictwem QuickLisp).Konfiguracja SLIME dla rozwoju Common Lisp i Clojure

Istnieje kilka dobrze znanych problemów z implementacją Swank dla Clojure - nie działa z autodoc (jeśli jest włączony SLIME zawiesza się), nie obsługuje niektórych rzeczy, takich jak fuzzy-complete, itp. Ten question omawia ten sam temat odpowiedź sugeruje, że nie ma dla mnie wyjścia.

(add-hook 'slime-connected-hook 
      (lambda() 
      (if (string= (slime-lisp-implementation-type) "Clojure") 
       (setq slime-use-autodoc-mode nil) 
       (setq slime-use-autodoc-mode t)) 
      )) 

(add-hook 'slime-mode-hook 
      (lambda() 
      (if (eq major-mode 'clojure-mode) 
        (slime-autodoc-mode 0) 
       (slime-autodoc-mode 1)))) 

(add-hook 'slime-repl-mode-hook 
      (lambda() 
      (if (string= (slime-lisp-implementation-type) "Clojure") 
       (progn (setq slime-use-autodoc-mode nil) 
         (slime-autodoc-mode 0)) 
       (progn (setq slime-use-autodoc-mode t) 
        (slime-autodoc-mode 1))))) 

Rozwiązanie wygląda świetnie na papierze, ale dla mnie śluza-lisp-typ-implementacji jest zawsze zerowy. (to samo dla slime-lisp-implementation-type: connlocal z lokalnymi połączeniami).

To, czego potrzebuję, to po prostu sposób na poznanie, jak uruchomić SLIME z użyciem Clojure's swank, aby móc modyfikować problematyczne ustawienia.

+0

Co OS jesteś stronie? Pracowałem w systemie Mac OS X (chociaż prawdopodobnie działa również w Linuksie) i blogowałem o tym tutaj http://spacemanaki.posterous.com/setting-up-emacs-for-lisp-hacking-on-os-x- pt-0 i odpowiedział na to pytanie http://stackoverflow.com/questions/4551283/what-is-wrong-with-my-emacs-slime-setup-compile-and-load-eval-not-working/4555421#4555421 Jedyny sposób, w jaki mogłem go uruchomić, to mieć zarówno najnowszy CVS SLIME, jak i ELPA SLIME i załadować odpowiedni w zależności od tego, czy pracowałem nad Common Lisp czy Clojure. – spacemanaki

+1

Używam systemu Linux. Jestem świadomy proponowanego rozwiązania, ale nie podoba mi się to - po prostu chcę używać CVS SLIME przez cały czas. Mógłbym mieć prostą funkcję, która przełącza to, czego potrzebuję, zanim stworzę połączenia typu clojure, ale wolałbym znaleźć sposób na automatyczne przechwycenie takich ustawień w starcie śluzu. –

+0

Ja też tego nie lubię, ale działa. Będę pilnował tego wątku, żeby sprawdzić, czy ktoś sugeruje coś lepszego, bo teraz zrezygnowałem z golenia tego konkretnego jaka. – spacemanaki

Odpowiedz

4

Wygląda na to, że rozwiązanie tego problemu właśnie zostało utworzone. Nazywa się jack-in. Zasadniczo po prostu trzeba zrobić trzy rzeczy:

  1. Instalacja Clojure-mode poprzez git lub Marmalade
  2. Lein plugin zainstalować Swank-clojure 1.3.1
  3. Invoke clojure Mx-jack-in z projektu

Spowoduje to automatyczne ładowanie obsługiwanego SLIME. Nie musisz już instalować go za pomocą ELPA. Zapakowałem mój init Common Lisp w interaktywną funkcję, którą mogę wywołać, gdy jej potrzebuję, ponieważ ładowanie Clojure SLIME w naturalny sposób powoduje kilka ustawień. To nie jest tak idealne rozwiązanie jako upstream wsparcia Clojure w szlam, ale jest to o wiele lepiej niż większość alternatywa ...

Aktualizacja:

SLIME nie jest już potrzebna dla rozwoju Clojure. Polecam zamiast tego użyć CIDER.