这是解决方案:
$.terminal.defaults.formatters.unshift([
/(^|[^\x08]|[\r\n]{2}|&[^;]+;)\x08|[^\r\n]+\r\x1B(?:\[|[)K/g, '', {loop: true}
]);
除了最后一个,它几乎可以工作,]
因为正则表达式之前删除\b
了字符而不移动光标。
(?:\[|[)K
需要,因为命令行接受带有 html 实体的第一个编码输入,因此您不能键入格式。
options 是 1.18.0 版的新功能,在循环中替换,直到它与正则表达式不匹配。
var term = $('body').terminal();
$.terminal.defaults.formatters.unshift([
/(^|[^\x08]|[\r\n]{2}|&[^;]+;)\x08|[^\r\n]+\r\x1B(?:\[|[)K/g, '', {loop: true}
]);
var str = 'Checking current state.\t[ ]\b\b\b\b\b-\r\u001B[KChecking current state.\t[ ]\b\b\b\b\bFAIL\n\r\u001B';
term.insert(str).echo(str);
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script><script src="https://rawgit.com/jcubic/leash/master/lib/wcwidth.js"></script><script src="https://unpkg.com/jquery.terminal/js/jquery.terminal.js"></script><script src="https://rawgit.com/inexorabletash/polyfill/master/keyboard.js"></script><script src="https://unpkg.com/jquery.terminal/js/unix_formatting.js"></script><script src="https://unpkg.com/prismjs@1.8.1/prism.js"></script><script src="https://unpkg.com/jquery.terminal/js/less.js"></script><script src="https://unpkg.com/jquery.terminal/js/prism.js"></script><link rel="stylesheet prefetch" href="https://unpkg.com/prismjs/themes/prism-coy.css"><link rel="stylesheet prefetch" href="https://unpkg.com/jquery.terminal/css/jquery.terminal.css">
编辑
具有更好过度输入的修复在 unix_formatting 文件的 devel 分支中,但它需要更多的工作才能使其现在与命令行一起使用,它只与 echo 一起使用。
var term = $('body').terminal();
var str = 'Checking current state.\t[ ]\b\b\b\b\b-\r\u001B[KChecking current state.\t[ ]\b\b\b\b\bFAIL\r\n';
term.insert(str).echo(str);
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script><script src="https://rawgit.com/jcubic/leash/master/lib/wcwidth.js"></script><script src="https://rawgit.com/jcubic/jquery.terminal/devel/js/jquery.terminal.js"></script><script src="https://rawgit.com/inexorabletash/polyfill/master/keyboard.js"></script><script src="https://rawgit.com/jcubic/jquery.terminal/devel/js/unix_formatting.js"></script><script src="https://unpkg.com/prismjs@1.8.1/prism.js"></script><script src="https://unpkg.com/jquery.terminal/js/less.js"></script><script src="https://unpkg.com/jquery.terminal/js/prism.js"></script><link rel="stylesheet prefetch" href="https://unpkg.com/prismjs/themes/prism-coy.css"><link rel="stylesheet prefetch" href="https://unpkg.com/jquery.terminal/css/jquery.terminal.css">
这个函数已经在替换 unix_formatting 中过度类型化的幼稚版本。但是为了完全工作,我需要更新 API 以允许从函数格式化程序返回字符串和位置,就像用于可以更改字符串长度的正则表达式格式化程序的 tracking_replace 实用程序一样,如果没有这个,当你将它插入时你将没有正确的位置终端(使用复制/粘贴或使用插入功能),但它适用于回声。