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
على كائن باعتباره المعلمة الأولى ، وليس معلمتين.
افعل هذا بدلاً من ذلك:
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);
}
});
ولكن عندما أكتب أمرًا واضغط على إدخال ، فإنه لا ينشئ سطرًا جديدًا في الإخراج.
حاولت إضافة term.writeln ('') ؛ إلى إذا (ev.Keycode == 13)
نفس الشيء مع مسافة للخلف (keyCode 8) ..
أشياء أخرى تعمل بشكل جيد.
إذا كنت ترغب في كتابة أشياء على المحطة ، فإن الطريقة الموصى بها للاستماع إلى onData
بدلاً من ذلك والتي تمنحك سلسلة تحتوي على ضغطات مفاتيح متسلسلة. سيكون Stack Overflow مكانًا أفضل لهذه الأنواع من الأسئلة.