const term = new xterm.default.Terminal({ cursorBlink: true });
const fitAddon = new xtermAddonFit.FitAddon();
term.loadAddon(fitAddon);
term.open(document.getElementById('term'));
term.writeln('Terminal: ');
term.writeln('');
term.prompt = function () {
term.write('\r\n' + '$: ');
};
term.prompt();
term.onKey(function (key, ev) {
console.log(ev)
var printable = (
!ev.altKey && !ev.altGraphKey && !ev.ctrlKey && !ev.metaKey
);
if (ev.keyCode == 13) {
term.prompt();
} else if (ev.keyCode == 8) {
// Do not delete the prompt
if (term.x > 2) {
term.write('\b \b');
}
} else if (printable) {
term.write(key);
}
});
term.paste('paste', function (data, ev) {
term.write(data);
});
const socket = new WebSocket('ws://localhost:8000/')
term.loadAddon(attachAddon);
const attachAddon = new attachAddon(socket)
fitAddon.fit();
์๋ฌด ๋ฒํผ์ด๋ ๋๋ฅผ ๋ ์ถ๋ ฅ:
๋ฌด์์ด ๋ฌธ์ ์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
onKey
์๋ 2๊ฐ์ ๋งค๊ฐ๋ณ์๊ฐ ์๋๋ผ ์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ฒด๊ฐ ์์ต๋๋ค.
๋์ ๋ค์์ ์ํํ์ญ์์ค.
term.onKey(function (ev) {
console.log(ev.key);
console.log(ev.domEvent)
๋ด onKey ๊ธฐ๋ฅ์ ์ด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
term.onKey(function (ev) {
var printable = (
!ev.altKey && !ev.altGraphKey && !ev.ctrlKey && !ev.metaKey
);
if (ev.keyCode == 13) {
term.prompt();
} else if (ev.keyCode == 8) {
// Do not delete the prompt
if (term.x > 2) {
term.write('\b \b');
}
} else if (printable) {
term.write(ev.key);
}
});
๊ทธ๋ฌ๋ ๋ช
๋ น์ ์์ฑํ๊ณ Enter ํค๋ฅผ ๋๋ฅด๋ฉด ์ถ๋ ฅ์ ์ ์ค์ด ์์ฑ๋์ง ์์ต๋๋ค.
๋๋ term.writeln(''); if (ev.Keycode == 13)
๋ฐฑ์คํ์ด์ค์ ๋์ผ(keyCode 8)..
๋ค๋ฅธ ๊ฒ๋ค์ ์ ์๋ํฉ๋๋ค.
ํฐ๋ฏธ๋์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐ๊ณ ์ถ๋ค๋ฉด ์ง๋ ฌํ๋ ํค ์
๋ ฅ์ ํฌํจํ๋ ๋ฌธ์์ด์ ์ ๊ณตํ๋ onData
๋์ ์์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์คํ ์ค๋ฒํ๋ก๋ ์ด๋ฌํ ์ข
๋ฅ์ ์ง๋ฌธ์ ๋ ์ ํฉํฉ๋๋ค.