Skip to content

Instantly share code, notes, and snippets.

@kenkangxgwe
Created August 30, 2022 02:13
Show Gist options
  • Save kenkangxgwe/67e7a830848650bf88bbc36f8d3e2af5 to your computer and use it in GitHub Desktop.
Save kenkangxgwe/67e7a830848650bf88bbc36f8d3e2af5 to your computer and use it in GitHub Desktop.
Wolfram Langauge Server with GNU Emacs on Windows
const net = require('node:net');
const child_process = require('node:child_process');
const serverPort = 6536;
const host = "127.0.0.1"
let connected = false;
let cachedData = [];
let client = null;
let serverProcess = null;
process.stdin.on("data", data => {
if(!connected) {
cachedData += data;
return;
}
client.write(data);
})
function startServer(port) {
serverProcess = child_process.execFile("wolframscript", [
"D:/Projects/lsp-wl-develop/init.wls",
"--socket=".concat(port.toString())
]);
serverProcess.stdout.on('data', (data) => {
process.stderr.write(data);
});
serverProcess.stderr.on('data', (data) => {
process.stderr.write(data);
});
}
function startCommunication () {
process.stderr.write("Sending cached data\n");
for(const data of cachedData) {
client.write(data);
}
connected = true;
client.on('data', function(chunk) {
process.stdout.write(chunk);
});
}
const server = net.createServer((connection) => {
process.stderr.write("Language server connected\n");
client = connection;
client.on('end', () => {
process.exit(0);
});
startCommunication();
});
server.on('error', (err) => {
throw err;
});
server.listen(serverPort, () => {
startServer(serverPort);
});
@kenkangxgwe
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment