Xterm.js: altKey๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 04์›” 11์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: xtermjs/xterm.js

2655

                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();

์•„๋ฌด ๋ฒ„ํŠผ์ด๋‚˜ ๋ˆ„๋ฅผ ๋•Œ ์ถœ๋ ฅ:
Snรญmka obrazovky z 2020-04-11 14-12-17

๋ฌด์—‡์ด ๋ฌธ์ œ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

typquestion

๋ชจ๋“  3 ๋Œ“๊ธ€

onKey ์—๋Š” 2๊ฐœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/xtermjs/xterm.js/blob/1913e9512c048e3cf56bb5f5df51bfff6899c184/typings/xterm.d.ts#L641

๋Œ€์‹  ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

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 ๋Œ€์‹  ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์งˆ๋ฌธ์— ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰