Per-language syntax highlighting
This commit is contained in:
parent
27ab1f7b6a
commit
10c868fbd3
|
@ -13,6 +13,12 @@ export class Session {
|
||||||
this.ws = ws;
|
this.ws = ws;
|
||||||
this.config = langs[lang];
|
this.config = langs[lang];
|
||||||
this.term = null;
|
this.term = null;
|
||||||
|
this.ws.send(
|
||||||
|
JSON.stringify({
|
||||||
|
event: "setMonacoLanguage",
|
||||||
|
monacoLanguage: this.config.monacoLang,
|
||||||
|
})
|
||||||
|
);
|
||||||
this.run();
|
this.run();
|
||||||
ws.on("message", this.handleClientMessage);
|
ws.on("message", this.handleClientMessage);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
export interface LangConfig {
|
export interface LangConfig {
|
||||||
cmdline: string[];
|
cmdline: string[];
|
||||||
|
monacoLang: string;
|
||||||
name: string;
|
name: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,69 +8,86 @@ export const langs = {
|
||||||
bash: {
|
bash: {
|
||||||
cmdline: ["bash"],
|
cmdline: ["bash"],
|
||||||
name: "Bash",
|
name: "Bash",
|
||||||
|
monacoLang: "shell",
|
||||||
},
|
},
|
||||||
c: {
|
c: {
|
||||||
cmdline: ["echo", "not implemented"],
|
cmdline: ["echo", "not implemented"],
|
||||||
name: "C",
|
name: "C",
|
||||||
|
monacoLang: "c",
|
||||||
},
|
},
|
||||||
"c++": {
|
"c++": {
|
||||||
cmdline: ["echo", "not implemented"],
|
cmdline: ["echo", "not implemented"],
|
||||||
name: "C++",
|
name: "C++",
|
||||||
|
monacoLang: "cpp",
|
||||||
},
|
},
|
||||||
clojure: {
|
clojure: {
|
||||||
cmdline: ["clojure"],
|
cmdline: ["clojure"],
|
||||||
name: "Clojure",
|
name: "Clojure",
|
||||||
|
monacoLang: "clojure",
|
||||||
},
|
},
|
||||||
emacs: {
|
emacs: {
|
||||||
cmdline: ["emacs"],
|
cmdline: ["emacs"],
|
||||||
name: "Emacs Lisp",
|
name: "Emacs Lisp",
|
||||||
|
monacoLang: "plaintext",
|
||||||
},
|
},
|
||||||
fish: {
|
fish: {
|
||||||
cmdline: ["env", "SHELL=/usr/bin/fish", "fish"],
|
cmdline: ["env", "SHELL=/usr/bin/fish", "fish"],
|
||||||
name: "Fish",
|
name: "Fish",
|
||||||
|
monacoLang: "plaintext",
|
||||||
},
|
},
|
||||||
go: {
|
go: {
|
||||||
cmdline: ["echo", "not implemented"],
|
cmdline: ["echo", "not implemented"],
|
||||||
name: "Go",
|
name: "Go",
|
||||||
|
monacoLang: "go",
|
||||||
},
|
},
|
||||||
haskell: {
|
haskell: {
|
||||||
cmdline: ["ghci"],
|
cmdline: ["ghci"],
|
||||||
name: "Haskell",
|
name: "Haskell",
|
||||||
|
monacoLang: "plaintext",
|
||||||
},
|
},
|
||||||
java: {
|
java: {
|
||||||
cmdline: ["echo", "not implemented"],
|
cmdline: ["echo", "not implemented"],
|
||||||
name: "Java",
|
name: "Java",
|
||||||
|
monacoLang: "java",
|
||||||
},
|
},
|
||||||
julia: {
|
julia: {
|
||||||
cmdline: ["julia"],
|
cmdline: ["julia"],
|
||||||
name: "Julia",
|
name: "Julia",
|
||||||
|
monacoLang: "plaintext",
|
||||||
},
|
},
|
||||||
lua: {
|
lua: {
|
||||||
cmdline: ["lua"],
|
cmdline: ["lua"],
|
||||||
name: "Lua",
|
name: "Lua",
|
||||||
|
monacoLang: "lua",
|
||||||
},
|
},
|
||||||
nodejs: {
|
nodejs: {
|
||||||
cmdline: ["node"],
|
cmdline: ["node"],
|
||||||
name: "Node.js",
|
name: "Node.js",
|
||||||
|
monacoLang: "javascript",
|
||||||
},
|
},
|
||||||
python: {
|
python: {
|
||||||
cmdline: ["python3"],
|
cmdline: ["python3"],
|
||||||
name: "Python",
|
name: "Python",
|
||||||
|
monacoLang: "python",
|
||||||
},
|
},
|
||||||
ruby: {
|
ruby: {
|
||||||
cmdline: ["irb"],
|
cmdline: ["irb"],
|
||||||
name: "Ruby",
|
name: "Ruby",
|
||||||
|
monacoLang: "ruby",
|
||||||
},
|
},
|
||||||
rust: {
|
rust: {
|
||||||
cmdline: ["echo", "not implemented"],
|
cmdline: ["echo", "not implemented"],
|
||||||
name: "Rust",
|
name: "Rust",
|
||||||
|
monacoLang: "rust",
|
||||||
},
|
},
|
||||||
vim: {
|
vim: {
|
||||||
cmdline: ["vim"],
|
cmdline: ["vim"],
|
||||||
name: "Vimscript",
|
name: "Vimscript",
|
||||||
|
monacoLang: "plaintext",
|
||||||
},
|
},
|
||||||
zsh: {
|
zsh: {
|
||||||
cmdline: ["env", "SHELL=/usr/bin/zsh", "zsh"],
|
cmdline: ["env", "SHELL=/usr/bin/zsh", "zsh"],
|
||||||
name: "Zsh",
|
name: "Zsh",
|
||||||
|
monacoLang: "shell",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -39,6 +39,13 @@ socket.addEventListener("message", (event) => {
|
||||||
}
|
}
|
||||||
term.write(message.output);
|
term.write(message.output);
|
||||||
return;
|
return;
|
||||||
|
case "setMonacoLanguage":
|
||||||
|
if (typeof message.monacoLanguage !== "string") {
|
||||||
|
console.error("Unexpected message from server:", message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
monaco.editor.setModelLanguage(editor.getModel(), message.monacoLanguage);
|
||||||
|
return;
|
||||||
default:
|
default:
|
||||||
console.error("Unexpected message from server:", message);
|
console.error("Unexpected message from server:", message);
|
||||||
return;
|
return;
|
||||||
|
@ -59,4 +66,9 @@ term.onData((data) =>
|
||||||
socket.send(JSON.stringify({ event: "terminalInput", input: data }))
|
socket.send(JSON.stringify({ event: "terminalInput", input: data }))
|
||||||
);
|
);
|
||||||
|
|
||||||
monaco.editor.create(document.getElementById("editor"));
|
const editor = monaco.editor.create(document.getElementById("editor"));
|
||||||
|
window.addEventListener("resize", () => editor.layout());
|
||||||
|
|
||||||
|
document.getElementById("runButton").addEventListener("click", () => {
|
||||||
|
socket.send(JSON.stringify({ event: "runCode", code: editor.getValue() }));
|
||||||
|
});
|
||||||
|
|
|
@ -30,6 +30,7 @@ module.exports = (_, argv) => ({
|
||||||
},
|
},
|
||||||
output: {
|
output: {
|
||||||
path: path.resolve(__dirname, "frontend/out"),
|
path: path.resolve(__dirname, "frontend/out"),
|
||||||
|
publicPath: "/js/",
|
||||||
filename: "app.js",
|
filename: "app.js",
|
||||||
},
|
},
|
||||||
performance: {
|
performance: {
|
||||||
|
|
Loading…
Reference in New Issue