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
급할수록 돌아가시오
영어 공부의 왕도인 '많이 듣고, 많이 읽고, 많이 쓰고, 많이 말하고'를 수행중인 rath는 문맥과 의미만 파악하는 reading 습관을 견제하기 위해 Going faster slows you down 을
근황
12월 2일(금요일, 작성중인 오늘)은 기분이 열라 별로였다. 1개.. 2개.. 3개.. .6개.. 나 된다 -- 불쾌하고 짜증나고 고민되고 걱정되는 일 투성이였다. 확실히 요새 밤에 잠을 자서 -- 그런지
블로그 간단히 수정
아티클 부분이랑 코멘트 부분에 간단히 MSN 기본 이모티콘을 사용할 수 있게 해두었습니다. 뭐.. 글은 저밖에 안쓸테니 별 상관없으나 -\_- 코멘트에도 먹게 해두었으니.. 이 글의 코멘트로 연습해볼 수