Swing REPL written in Ersatz PicoLisp
This is just a very simple illustration of what can be done combining PicoLisp and Java. Go ahead and make your own more powerful version!#!ersatz/pil (setq Frame (java "javax.swing.JFrame" T "Ersatz PicoLisp") ContPane (java Frame 'getContentPane) ResOut (java "javax.swing.JTextArea" T 5 20) ProgIn (java "javax.swing.JTextArea" T "(prinl 11) (+ 22 33)") ) (de isReturnKey (KeyCode) (= (java KeyCode) 10) ) (de handleKeyEvent (KeyEvt) (let (KeyCode (java KeyEvt 'getKeyCode) KeyText (java KeyEvt 'getKeyText KeyCode) ) #(prinl KeyCode " " KeyText) (java ResOut 'append KeyText) (when (isReturnKey KeyCode) (let (ProgText (java ProgIn 'getText) Prog (str ProgText) Result (run Prog) ) #(java ResOut 'append (pack (pack (clip (chop ProgText))) "^J")) (java ResOut 'append (pack (sym Prog) "^J")) (java ResOut 'append (pack "-> " (sym Result) "^J")) ) ) ) ) (let Font (java "java.awt.Font" T "Verdana" 0 16) (java ResOut 'setFont Font) (java ProgIn 'setFont Font) ) (java ProgIn 'addKeyListener (interface "java.awt.event.KeyListener" 'keyTyped nil 'keyPressed handleKeyEvent 'keyReleased nil ) ) (java ContPane 'setLayout (java "javax.swing.BoxLayout" T ContPane (public "javax.swing.BoxLayout" 'Y_AXIS) ) ) (java ContPane 'add (java "javax.swing.JScrollPane" T ResOut)) (java ContPane 'add (java "javax.swing.JScrollPane" T ProgIn)) (java Frame 'pack) (java Frame 'setLocation 60 80) (java Frame 'setSize 600 400) (java Frame 'setDefaultCloseOperation (public "javax.swing.JFrame" 'EXIT_ON_CLOSE)) (java Frame 'setVisible T) (java ProgIn 'grabFocus) (let ProgLen (length (java ProgIn 'getText)) (java ProgIn 'setSelectionEnd ProgLen) (java ProgIn 'setSelectionStart ProgLen) )
https://picolisp.com/wiki/?swingrepl
01jan12 | Jon |