Jython interpreter에 tab auto-completion 기능 구현! 및 gnu-readline 연동
[서문] 20시간동안 쉬지않고 Telnet(RFC854, RFC855, RFC857, RFC858, RFC859)을 구현하고 ANSI와 싸우다보니 어제 블로그를 남긴 이후로 컴퓨터 앞에 그대로 앉아있다. 자기위해 따스한 물로 샤워를 하니 몸과 마음이 개운해지는것 같다. 그러다보니... 지난 12월 21일에 작업한 Jython auto-completor 내용을 아무데도 업데이트 안했다는 사실을 알았다!
그렇다.. 사실 나 지난달 12월 22일에 데스크탑 하드날렸다 ㅡㅡ; 충격이 이만저만이 아니여서.. 머리속이 또 리셋되었던 것이다.
[본론] 각설하고... 지난 12월 21일경, 열심히 IRC를 하고 있던중 때마침 gnu-readline을 자바에서도 쓸 수 없을까.. 하는 얘기가 돌고 있었다. 오호라.. 그래 jni로 wrap해서 꿀꺽해버릴까~ 했었는데 우리의 신 Google 님께서 gnu-readline을 wrap 해놓은 java-readline 의 존재를 가르켜주셨다. (Linux, Solaris를 지원하고 Windows는 지원하지 않음!)
요새는 검색만 해도 필요한게 다 나와있는 세상이 맞았다. (java telnet 쪽은 안그렇더만 -_-) 그리하여 "그럼 이제 java-readline을 jython에 적용만 시키면 되겠지" 하고 생각하려던 순간, java-readline 홈페이지의 "Projects using Java-Readline"을 보았더니.. 헉 "Jython" 이 떡하니 적혀있는 것이다. 후다닥 Jython 코드내에서 Readline 쓰는 부분을 찾는도중 nohmad 님이 jython registry 파일안에
python.console=org.python.util.ReadlineConsole python.console.readlinelib=GnuReadline
만 적어주면 적용된다는걸 찾아내셨다. 좋다.. 테스트 해보니, 인터프리터에서 그냥 엔터치면 null error가 나오는 버그가 있긴했지만, 즐거운 방향키로 이전 입력한것 찾기 같은것도 잘 되었다!
근데.. auto completion이 안된다. 분명히 java-readline은 org.gnu.readline.ReadlineCompleter 라는 클래스를 제공하고 있는데!!! Jython 에서는 그게 안되는 것이다.
[결론] 삽질이 시작되었고 jython에 적합하도록 auto completor를 구현하고 기존 버그수정 및 테스트하는데 성공하였다. 결국 짠!
rath@gentoo rath $ jython Jython 2.1 on java1.4.2_06 (JIT: null) Type "copyright", "credits" or "license" for more information.
import sys sys.s font-style: italic;">sys.setClassLoader sys.settrace sys.stdin sys.setprofile sys.stderr sys.stdout sys.set font-style: italic;">sys.setClassLoader sys.setprofile sys.settrace sys.set
유후~
[사용법]
- jython 을 받아 설치한다.
- java-readline 을 받아 설치한다.
- 내 Projects 메뉴에서 jython-completion.jar 을 받는다.
- jython의 registry 파일을 열어 마지막 부분에 다음과 같이 입력한다 python.console=rath.ExtendedReadlineConsole python.console.readlinelib=GnuReadline
- jython을 실행시키는 shell script 파일을 연다.
- libreadline.so 파일이 있는 위치를 -Djava.library.path=/usr/lib 형식으로 추가한다.
- libreadline-java.jar 파일을 classpath 에 추가한다.
- jython-completion.jar 파일을 classpath 에 추가한다.
- 저장하고 jython 실행!
import sys 를 입력한 뒤, sys. 까지만 입력하고 TAB을 강하게 눌러보잣!
Comments
2 thoughts shared
nohmad
덕분에 잘 쓰고 있습니다. Jython 프로젝트에 패치 보내신다고 하지 않으셨었나요? ChangeLog에서 rath님 이름을 보고 싶어요~
Continue Reading
Discover more thoughts and insights
JMSN 0.9.9b11 릴리즈 - me2day와 연동
아직 클로즈 베타인 미투데이와 5년째 잘 돌아가고 있는(중간에 한 2년 쉬긴 했어요) JMSN을 연동했습니다. nainu군을 JMSN 테스터로 영입한 후 JMSN 개발에 박차를 가하는 중입니다. ㅎㅎ 이번
스칼라 도커 빌드하다가 대청소하기
FROM myobplatform/scala-play 까지 얹었는데도 sbt, scala 버전의 다양함 때문에 parent image 빌드 굉장히 오래 걸린다. build.sbt 파일 하나에 스칼라 버전도 써있고
한사대 컴공 편입 후 첫학기 성적표!
짜잔 알고리즘 교수님은 수면제.. 흑흑 ㅠ.ㅠ Comments dnsdud 2006-07-04T11:41:21.000Z 자바 100점..ㅎㅎ 이쁜 여자애 있나요?;; 공대가