1:13 test=> (printl "Hello World")
java.lang.Exception: Unable to resolve symbol: printl in this context
(repl-1:13)
이런 경우 보통은 위쪽 화살표 키를 치면(emacs에서는 Alt-P) 잘봇 입력한 텍스트가
다시 나와야 되는데, eclipse console창에서는 이 기능을 이용하려면 어떤 키를 눌러야
하나요?
Eclipse 메뉴의 Window > Preferences > Keys > Scheme 에서 Emacs를 선택했는데도
Console창에서는 emacs 키가 먹지를 않네요.
아시는 분의 조언을 부탁드립니다.
핸드폰 use, require 사용해서
clojure.core 불러오셔야해요
자세한 건 검색부탁~
2011. 9. 9. 오후 10:08에 "김영태" <phil...@gmail.com>님이 작성:
--
Google 그룹스 'Lisp을 좋아하는 사람들의 그룹(한국 리스퍼)' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 lisp-...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 lisp-korea+...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/lisp-korea?hl=ko에서 그룹을 방문하세요.
저는 리습 계열 주력 언어를 clojure로 마음을 굳힌 터라, 자바도 좀 공부하고 clojure도 익혈 겸 해서 이 책 저
책 보고 있는데요, 아무래도 제일 당기는 clojure 개발환경은 lein + slime 환경인 듯 해서, 이래 저래 세팅을 하
고 있는데 잘 안되네요. 인터넷에 소개된 글을 따라 그대로 해봐도, 설명하고는 달리 제대로 작동을 안하는 경우가 많고
swank-clojure도 버전이 하도 여러가지라 slime 버전과의 궁합이 잘 맞지 않는 것인지는 몰라도 slime repl
이 안 돌아갑니다. 그래서 lein + slime 윈도우 개발 환경 구측에 성공하신 분 있으시면, 꼭 lein이나 slime의
최신 버전이 아니더라도, 이 곳 게시판에 글 좀 올려 주시면 안될까요?
이것 저것 시도하다 안되서, 지금은 임시방편으로 Clojure Box를 사용하고 있는데, 이것도 가끔씩 Repl에서 form을
제대로 다 입력했는 데도 불구하고, 무한정 계속 입력을 기다리는 버그가 있더군요.
On Sep 9, 11:02 pm, 문성원 <longfinfun...@gmail.com> wrote:
> print가 없어서 그러시는것 같지는 않습니다.:)
>
> 저도 eclipse로 셋업프로그램 같은거 만들때 고생했던 기억이 있어서 찾아보니 전에 입력한 커맨드를 자동으로 입력하게 해주는 기능은
> 보이질 않네요. 확장 플러그인 같은 걸로 설치되는 콘솔이 아닌 기본 콘솔로는 좀 힘들것 같습니다.
>
> p.s eclipse의 key scheme은 단순히 몇몇 키바인딩을 emacs스럽게(?) 바꿔주는 것에 지나지 않습니다.;
>
> 2011년 9월 9일 오후 10:23, Jong-Hyouk Yun <ageld...@gmail.com>님의 말:
>
>
>
>
>
>
>
> > 핸드폰 use, require 사용해서
> > clojure.core 불러오셔야해요
> > 자세한 건 검색부탁~
>
> > 2011. 9. 9. 오후 10:08에 "김영태" <philo...@gmail.com>님이 작성:
>
> > 예를 들어, Eclipse Console 창에 다음의 내용을 입력한 후 엔터키를 눌러 실행할 때
> > println을 printl로 잘못 입력한 경우에는 다음과 같은 에러 메시지가 나오는데요.
>
> > 1:13 test=> (printl "Hello World")
> > java.lang.Exception: Unable to resolve symbol: printl in this context
> > (repl-1:13)
>
> > 이런 경우 보통은 위쪽 화살표 키를 치면(emacs에서는 Alt-P) 잘봇 입력한 텍스트가
> > 다시 나와야 되는데, eclipse console창에서는 이 기능을 이용하려면 어떤 키를 눌러야
> > 하나요?
>
> > Eclipse 메뉴의 Window > Preferences > Keys > Scheme 에서 Emacs를 선택했는데도
> > Console창에서는 emacs 키가 먹지를 않네요.
>
> > 아시는 분의 조언을 부탁드립니다.
>
> > --
> > Google 그룹스 'Lisp을 좋아하는 사람들의 그룹(한국 리스퍼)' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> > 이 그룹에 게시하려면 lisp-...@googlegroups.com(으)로 이메일을 보내세요.
> > 그룹에서 탈퇴하려면 lisp-korea+...@googlegroups.com로 이메일을 보내주세요.
> > 더 많은 옵션을 보려면http://groups.google.com/group/lisp-korea?hl=ko에서 그룹을 방문하세요.
1) https://github.com/technomancy/leiningen 에서 leiningen-1.5.2-win.zip
다운로드한 후에 압축을 풀어줍니다. 압축이 풀린 후, lein.bat 파일이 들
어있는 디렉토리 경로를 윈도우즈 환경 변수 PATH에 추가해 줍니다.
2) 자신이 작업을 원하는 디렉토리로 옮겨 간 후에, 다음과 같이 실행해 클로우저
프로젝트를 생성합니다.
> lein new myproject
3) 새로 생성된 myproject 디렉토리 내의 project.clj 파일의 내용을 다음과 같이
편집합니다.
(defproject myproject "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.2.1"]
[org.clojure/clojure-contrib "1.2.0"]]
:dev-dependencies [[swank-clojure "1.3.2"]] )
4) 이 상태에서 다음의 명령을 실행해, 프로젝트 실행에 필요한 라이브러리를 다운
받습니다.
> lein deps
5) 다음의 명령을 실행해, swank server를 구동합니다.
> lein swank
Connection opened on localhost port 4005.
다음부터는 emacs 쪽 설정 내용입니다.
1) http://common-lisp.net/project/slime/ 에서 slime-current.tgz 을 다운받아
압축을 푼 후 ~/.emacs.d/slime/ 디렉토리에 통채로 복사해 넣어 줍니다.
2) ~/.emacs.d/ 디렉토리 내부에서 다음의 명령을 실행해 clojure-mode를 다운로드
받습니다.
> git clone https://github.com/jochu/clojure-mode
3) ~/.emacs.d/ 디렉토리 내부에서 다음의 명령을 실행해 swank-clojure를 다운로드
받습니다.
> git clone https://github.com/jochu/swank-clojure
4) ~/.emacs.d/init.el 내에 slime과 clojure와 관련되는 다음의 내용을 추가합니다.
(add-to-list 'load-path "~/.emacs.d/slime")
(add-to-list 'load-path "~/.emacs.d/clojure-mode")
(add-to-list 'load-path "~/.emacs.d/swank-clojure")
(require 'slime)
(require 'clojure-mode)
(require 'swank-clojure)
5) emacs를 다시 실행한 후, 다음과 같이 진행합니다.
M-x slime-connect <Enter>
Host: 127.0.0.1 <Enter>
Port: 4005 <Enter>
Versions differ: 2011-08-31 (slime) vs. 20100404 (swank).Continue?
(y or n) y
이후에
Connected. Let the hacking commence!
라는 메시지가 나온 후에, 그냥 계속해서 먹통입니다.
당연히 user=> 라는 메시지가 나와야 하는데 말이죠!
이 상태에서 emacs를 억지로 종료하면, 아까 lein swank를 실행한 도스창에는
다음과 같은 에러 메시지가 뜹니다. 도데체 무엇이 잘못된 걸까요?
===========================================================================
myproject>lein swank
Connection opened on localhost port 4005.
exception in read loop
java.lang.Exception: Error reading swank message
at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown
Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at clojure.lang.Compiler$NewExpr.eval(Compiler.java:2100)
at clojure.lang.Compiler$DefExpr.eval(Compiler.java:361)
at clojure.lang.Compiler.eval(Compiler.java:5429)
at clojure.lang.Compiler.load(Compiler.java:5857)
at clojure.lang.RT.loadResourceScript(RT.java:340)
at clojure.lang.RT.loadResourceScript(RT.java:331)
at clojure.lang.RT.load(RT.java:409)
at clojure.lang.RT.load(RT.java:381)
at clojure.core$load$fn__4519.invoke(core.clj:4915)
at clojure.core$load.doInvoke(core.clj:4914)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:4729)
at clojure.core$load_lib.doInvoke(core.clj:4766)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$load_libs.doInvoke(core.clj:4804)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:544)
at clojure.core$use.doInvoke(core.clj:4892)
at clojure.lang.RestFn.invoke(RestFn.java:436)
at swank.core.connection
$eval150$loading__4414__auto____151.invoke(connection.clj:1)
at swank.core.connection$eval150.invoke(connection.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)
at clojure.lang.Compiler.eval(Compiler.java:5415)
at clojure.lang.Compiler.load(Compiler.java:5857)
at clojure.lang.RT.loadResourceScript(RT.java:340)
at clojure.lang.RT.loadResourceScript(RT.java:331)
at clojure.lang.RT.load(RT.java:409)
at clojure.lang.RT.load(RT.java:381)
at clojure.core$load$fn__4519.invoke(core.clj:4915)
at clojure.core$load.doInvoke(core.clj:4914)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:4729)
at clojure.core$load_lib.doInvoke(core.clj:4766)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$load_libs.doInvoke(core.clj:4804)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:544)
at clojure.core$use.doInvoke(core.clj:4892)
at clojure.lang.RestFn.invoke(RestFn.java:457)
at swank.core$eval22$loading__4414__auto____23.invoke(core.clj:
1)
at swank.core$eval22.invoke(core.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)
at clojure.lang.Compiler.eval(Compiler.java:5415)
at clojure.lang.Compiler.load(Compiler.java:5857)
at clojure.lang.RT.loadResourceScript(RT.java:340)
at clojure.lang.RT.loadResourceScript(RT.java:331)
at clojure.lang.RT.load(RT.java:409)
at clojure.lang.RT.load(RT.java:381)
at clojure.core$load$fn__4519.invoke(core.clj:4915)
at clojure.core$load.doInvoke(core.clj:4914)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:4729)
at clojure.core$load_lib.doInvoke(core.clj:4766)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$load_libs.doInvoke(core.clj:4800)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:544)
at clojure.core$use.doInvoke(core.clj:4892)
at clojure.lang.RestFn.invoke(RestFn.java:512)
at swank.swank
$eval16$loading__4414__auto____17.invoke(swank.clj:11)
at swank.swank$eval16.invoke(swank.clj:11)
at clojure.lang.Compiler.eval(Compiler.java:5424)
at clojure.lang.Compiler.eval(Compiler.java:5415)
at clojure.lang.Compiler.load(Compiler.java:5857)
at clojure.lang.RT.loadResourceScript(RT.java:340)
at clojure.lang.RT.loadResourceScript(RT.java:331)
at clojure.lang.RT.load(RT.java:409)
at clojure.lang.RT.load(RT.java:381)
at clojure.core$load$fn__4519.invoke(core.clj:4915)
at clojure.core$load.doInvoke(core.clj:4914)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:4729)
at clojure.core$load_lib.doInvoke(core.clj:4766)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$load_libs.doInvoke(core.clj:4800)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invoke(core.clj:542)
at clojure.core$require.doInvoke(core.clj:4881)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at user$eval12.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)
at clojure.lang.Compiler.eval(Compiler.java:5414)
at clojure.lang.Compiler.eval(Compiler.java:5415)
at clojure.lang.Compiler.eval(Compiler.java:5391)
at clojure.core$eval.invoke(core.clj:2382)
at clojure.main$eval_opt.invoke(main.clj:235)
at clojure.main$initialize.invoke(main.clj:254)
at clojure.main$null_opt.invoke(main.clj:279)
at clojure.main$main.doInvoke(main.clj:354)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:369)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:482)
at clojure.main.main(main.java:37)
=======================================================================
6) 제가 가진 의문 두 가지만 더 질문하겠습니다.
첫째로, lein deps 로 다운받은 swank-clojure-1.3.2.jar와
~/.emacs/d/swank-clojure 디렉토리에 다운받은 여러 파일들은 서로 무슨
관계가 있는 것인지 궁금합니다.
둘쨰로, lein swank로 실행한 swank server를 중단시키려면 어떻게 해야 하나요?
lein swank를 실행한 도스창을 죽여도, port 4005 번이 계속 열려 있다고
나오던데요.
On Sep 10, 6:43 pm, 박성민 <byulpa...@gmail.com> wrote:
> 방금 아무것도 설치되어있지 않은 어머니의 컴퓨터에 이것저것 셋팅해보고
> 테스트해봤습니다. 처음부터 말이죠!
>
> 일단 영태님...connected 메시지나오고 먹통인건 잘못이아니라
(add-to-list 'load-path "~/.emacs.d/slime/contrib") 부분을 추가해줘야 하네요.
slime이 버전 업이 되면서, slime의 plugin 성격의 모듈들은 모두 slime/contrib 디렉토리로
이동시킨 듯 싶습니다.
------------------------------------------------------------------------------------------------
(add-to-list 'load-path "~/.emacs.d/slime")
(add-to-list 'load-path "~/.emacs.d/slime/contrib") ;; <-- 추가 부분
(add-to-list 'load-path "~/.emacs.d/clojure-mode")
(add-to-list 'load-path "~/.emacs.d/swank-clojure")
(require 'slime)
(slime-setup '((slime-repl)) ;; <-- 추가 부분
(require 'clojure-mode)
(require 'swank-clojure)
-----------------------------------------------------------------------------------------
(slime-setup '((slime-repl)) ---> (slime-setup '(slime-repl))
lein plugin install swank-clojure 1.3.2 로 swank-clojure 설치.제가 겪은 시행작오를 바탕으로, 윈도우즈 상에서 leingen + slime 설정에 성공한 과정을
정리해 보겠습니다.
참고로 emacsW32와 Java SE 6 Update 27은 이미 시스템에 설치되어 있는 것으로 가정
하겠씁니다.
1) https://github.com/technomancy/leiningen 에서 leiningen-1.5.2-win.zip
다운로드한 후에 압축을 풀어줍니다. 압축이 풀린 후, lein.bat 파일이 들
어있는 디렉토리 경로를 윈도우즈 환경 변수 PATH에 추가해 줍니다.
2) 다음을 실행하여, swank-clojure를 설치한다.
> lein plugin install swank-clojure 1.3.2
3) 자신이 작업을 원하는 디렉토리로 옮겨 간 후에, 다음과 같이 실행해 클로우저
프로젝트를 생성합니다.
> lein new myproject
4) 새로 생성된 myproject 디렉토리 내의 project.clj 파일의 내용을 다음과 같이
편집합니다.
(defproject myproject "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.2.1"]
[org.clojure/clojure-contrib "1.2.0"]]
:dev-dependencies [[swank-clojure "1.3.2"]] )
5) 이 상태에서 다음의 명령을 실행해, 프로젝트 실행에 필요한 라이브러리를 다운
받습니다.
> lein deps
6) 다음의 명령을 실행해, swank server를 구동합니다.
> lein swank
Connection opened on localhost port 4005.
다음부터는 emacs 쪽 설정 내용입니다.
1) http://common-lisp.net/project/slime/ 에서 slime-current.tgz 을 다운받아
압축을 푼 후 ~/.emacs.d/slime/ 디렉토리에 통채로 복사해 넣어 줍니다.
2) ~/.emacs.d/ 디렉토리 내부에서 다음의 명령을 실행해 clojure-mode를 다운로드
받습니다.
> git clone https://github.com/jochu/clojure-mode
4) ~/.emacs.d/init.el 내에 slime과 clojure와 관련되는 다음의 내용을 추가합니다.
;; slime 설정
(add-to-list 'load-path "~/.emacs.d/slime")
(add-to-list 'load-path "~/.emacs.d/slime/contrib")
(require 'slime)
(slime-setup '(slime-repl slime-scratch))
;; clojure-mode 설정
(add-to-list 'load-path "~/.emacs.d/clojure-mode")
(require 'clojure-mode)
5) emacs를 다시 실행한 후, 다음과 같이 진행합니다.
M-x slime-connect <Enter>
Host: 127.0.0.1 <Enter>
Port: 4005 <Enter>
Versions differ: 2011-08-31 (slime) vs. 20100404 (swank).Continue?
(y or n) y
이후에 다음과 같은 메시지가 나온 후에,
Connected. Let the hacking commence!
'user=>' 라는 프롬프트가 보이면 성공입니다.
On Sep 10, 9:24 pm, 박성민 <byulpa...@gmail.com> wrote:
> ..slime-setup 함수에 contrib 디렉토리를 load-path 에 추가해주는 부분이
> 포함되어 있기 때문에 구지 emacs 설정파일에 추가해줄 필요는 없을 것 같습니다.
>
> 제가 해서 성공한 순서는...
>
> 1. lein 설치
> 2. lein 설치 후 lein 이 있는 디렉토리를 환경변수 Path에 등록.
> 3. lein plugin install swank-clojure 1.3.2 로 swank-clojure 설치.
>
> 4. emacs 설치 -> slime 설치 -> clojure-mode 설치.
>
> (add-to-list 'load-path "/path/to/slime")
> (require 'slime)
> (slime-setup '(slime-repl slime-scratch))
>
> 전 clojure-mode 는 elpa 로 받았기 때문에 별도로 설정은 하지 않았습니다.
> slime 에 가장 인기있는 module 들은 (slime-setup '(slime-fancy)) 로 한방에 다 로드할 수
> 있는데 여기에 포함되는 slime-autodoc 이 swank-clojure 와 충돌이 있습니다.
>
> 5. 명령행 창에서
> > lein new my-project
> > cd my-project
> > lein swank
>
> -----> 이러면 deps 파일들 자동으로 받고 바로 swank 서버가 동작합니다.
> 구지 project.clj 의 :dev-dependencies 에 추가하지 않아도 되더군요.
>
> 6. emacs 에서 slime-connect
>
> 흠....개발관련 설정이 아무것도 없는 막컴퓨터(?) 로 users=> 프롬프트를 보기 까지