Blog: 2024-02-12
Jump to navigation
Jump to search
Started on this quest to have a scheme repl where the outputs are italicized, like the SICP book.
Printing italics is pretty easy:
In [1]: line = 'a' In [2]: print(f'\x1B[3m{line}\x1B[0m') a
It's italic, trust me!
But when it comes to spawning a scheme subprocess and interacting with its stdin and stdout, I took many turns, eventually trying nodejs since its asynchronous io model more closely fits this use case.
Here's what worked (or at least is a work in progress)
(basically just a copy from the docs of https://www.npmjs.com/package/node-pty which it uses)
var pty = require('node-pty'); var ptyProcess = pty.spawn('scheme') ptyProcess.onData((data) => { process.stdout.write(data); }); ptyProcess.write('(+ 3 3)\r');
hack $ node scheme_pty.js (+ 3 3) Could not open file init.scm TinyScheme 1.41 ts> 6 ts>
This also sorta works, but right now only processes the stdin with it being ended:
var spawn = require('child_process').spawn scheme = spawn('scheme') scheme.stdout.on('data', data => { console.log('data') console.log(data.toString()) console.log() }) scheme.stderr.on('data', data => { console.log('err') console.log(data.toString()) console.log() }) // setTimeout(() => { scheme.stdin.write('(+ 3 3)\r') // scheme.stdin.write('3\r\n') scheme.stdin.end() // }, 500) // scheme // setInterval(() => {}, 1000)
What a mess... I didn't even get python working.. though it has pty built in so it probably would work