将提示更改为:(''),然后在 jquery 终端上按 Enter 键后返回上一个提示

问题描述 投票:0回答:1

我有一个 JQuery 终端,我正在尝试使其与 MacOS 终端类似。当使用MacOS终端时,我注意到每当你按下回车键时,提示符就会消失一秒钟,然后很快就会重新出现。我试图找出如何在我的 Jquery 终端中做同样的事情,但工作就像它一样,但没有我遇到的任何问题,这是到目前为止的代码:

<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/jquery"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery.terminal/js/jquery.terminal.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery.terminal/css/jquery.terminal.min.css"/>
</head>
<body>
<script>
$('body').terminal({
    echo: function(...args) {
        this.echo(args.join(" "))
    }
}, {

keydown: function(e) {
    
    if(e.key === 'Enter' || e.keyCode === 13) {
         
    var checkit = this.get_prompt();
         
                setTimeout(() => {
                    this.set_prompt('')         
                }, 10);
         
                setTimeout(() => {
                    this.set_prompt(checkit)
                }, 200);
  
}   else {
             
    }
},
    greetings: '',
    checkArity: false,
    prompt: 'MyNormalPrompt>'
    
});
</script>
</body>
</html>

问题:正如您所看到的,如果您尝试演示,提示确实消失,然后按照我想要的方式重新出现,但是如果您尝试按回车太快,或者按住它,提示将完全消失。

我尝试过的:我看了一下这个:Detect Long Press on Enter/OK Key on a caph-list Item它提供了如何在javascript中检测长按回车键的信息,以及在实现一些时我的 jquery 终端上的代码,它有点帮助,但仍然不会使提示停止消失。

javascript html jquery keypress jquery-terminal
1个回答
0
投票

您可以使用暂停/恢复:

echo: function(...args) {
    term.pause();
    this.echo(args.join(" "))
    setTimeout(() => {
       this.resume();
    }, 200);
}

暂停/恢复与返回承诺并在延迟后解决相同:

const delay = time => new Promise(resolve => setTimeout(resolve, time));

echo: async function(...args) {
    this.echo(args.join(" "))
    await delay(200);
}
© www.soinside.com 2019 - 2024. All rights reserved.