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
한 사람을 위한 노트 #1
여러 부류의 독자들을 만족시키고 싶은 작가의 마음은 욕심이자 허영이다. 단 한 명을 위해 글을 쓰는게 좋다. 비겁해지지 않기 때문이다. 그렇다고해서 공공장소(블로그)에서 한 사람에 대해 깊은 사견을 쏟아내는
Listening 공부의 어려움
Listening 공부가 어려운 이유에 대해 생각해본다. Podcast를 듣는다. youtube에서 좋아하는 사람이나 주제로 검색해서 인터뷰를 보기도 한다. 그러나 크나큰 관심이 없다면 모든 내용을 다
Work Life Balance 세미나에서 얻은 뜻밖의 배움
신촌 모대학교 공학대학원들 대상으로 진행했던 Work Life Balance 세미나 후기. 나는 일반인을 대상으로 무엇인가를 알리고 전파하는 능력이 전혀 없다는 것을 느꼈다. 또한, 주제 선택도 적절하지 않았던 것