Skip to content

Instantly share code, notes, and snippets.

@ageldama
Created December 25, 2019 19:03
Show Gist options
  • Save ageldama/d412532d461ada22da03dd5268c01c77 to your computer and use it in GitHub Desktop.
Save ageldama/d412532d461ada22da03dd5268c01c77 to your computer and use it in GitHub Desktop.
(defparameter *p* (sb-ext:run-program "/usr/bin/wish" '()
:wait nil
;;:pty t
:input :stream
:output :stream
))
(defparameter *p* (sb-ext:run-program "/usr/bin/wish" '()
:wait nil
:pty t
;;:input :stream
;;:output :stream
))
(defparameter *p* (sb-ext:run-program "/usr/bin/python3" '()
:wait nil
:pty t
;;:input :stream
;;:output :stream
))
(defparameter *stream*
(make-two-way-stream
(sb-sys:make-fd-stream
(sb-sys:fd-stream-fd (process-output *p*))
:input t :external-format :utf-8)
(sb-sys:make-fd-stream
(sb-sys:fd-stream-fd (process-input *p*))
:output t :external-format :utf-8)))
(defparameter *stream*
(make-two-way-stream
(sb-sys:make-fd-stream
(sb-sys:fd-stream-fd (process-pty *p*))
:input t :external-format :utf-8)
(sb-sys:make-fd-stream
(sb-sys:fd-stream-fd (process-pty *p*))
:output t :external-format :utf-8)))
(defparameter *stream*
(make-two-way-stream
(process-pty *p*)
(process-pty *p*)))
(let ((stream *stream*))
(loop :while (listen stream)
:do (progn (format t "~c" (read-char stream))
(finish-output stream))))
(format *stream* "print(42)~%")
(format *stream* "exit()~%")
(format *stream* "expr 1+1~%")
(format *stream* "wm title . foo~%")
(format *stream* "~%exit~%")
(finish-output *stream*)
(sb-ext:process-wait *p*)
(sb-ext:process-close *p*)
(process-input *p*)
(process-pty *p*)
(process-output *p*)
(process-error *p*)
(process-status *p*)
(process-kill *p* sb-posix:sighup)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment