如何让jQuery Terminal终端提示符保存到Local Storage并正常加载?
问题描述
我想实现以下功能:通过自定义命令custprmt设置终端提示符,同时将其保存到Local Storage;页面加载时读取保存的提示符并设置,若未保存则使用默认的guest$ 。但页面加载代码无法加载已保存的提示符,尝试过set_prompt、this.set_prompt、prompt:等方式均无效,请求协助解决。
相关代码
自定义命令代码
custprmt: function(pstr, ifbold) { if(ifbold === '-makebold') { localStorage.setItem('myNEWprompt', pstr); this.set_prompt('[[b;var;]' + pstr +' ') } else { localStorage.setItem('myNEWprompt', pstr); this.set_prompt(pstr +' ') } },
页面加载代码
$(document).ready(function () { if (myNEWprompt) { set_prompt(myNEWprompt) } else { set_prompt('guest$ ') } });
问题分析与修复
核心问题
- 未正确读取Local Storage数据:页面加载代码直接使用
myNEWprompt变量,但该变量并未从Local Storage中获取值,必须通过localStorage.getItem('myNEWprompt')读取。 - 缺少终端实例引用:
set_prompt是终端实例的方法,不能全局直接调用,需要像自定义命令里那样,通过终端实例对象调用。
修复后的页面加载代码
$(document).ready(function () { // 替换为你实际的终端实例变量名(比如初始化时创建的term对象) const terminalInstance = window.yourTerminalInstance; const savedPrompt = localStorage.getItem('myNEWprompt'); if (savedPrompt) { terminalInstance.set_prompt(savedPrompt + ' '); } else { terminalInstance.set_prompt('guest$ '); } });
进阶优化(保留加粗状态)
如果需要保留提示符的加粗格式,建议在Local Storage中同时存储格式信息:
修改自定义命令代码
custprmt: function(pstr, ifbold) { const isBold = ifbold === '-makebold'; // 序列化对象存储格式与文本 const promptData = JSON.stringify({ text: pstr, isBold: isBold }); localStorage.setItem('myNEWprompt', promptData); const promptStr = isBold ? '[[b;var;]' + pstr +' ' : pstr + ' '; this.set_prompt(promptStr); },
对应页面加载代码
$(document).ready(function () { const terminalInstance = window.yourTerminalInstance; const savedPromptData = localStorage.getItem('myNEWprompt'); if (savedPromptData) { const { text, isBold } = JSON.parse(savedPromptData); const promptStr = isBold ? '[[b;var;]' + text +' ' : text + ' '; terminalInstance.set_prompt(promptStr); } else { terminalInstance.set_prompt('guest$ '); } });
额外注意
确保页面加载时终端实例已经完成初始化,如果终端是异步创建的,需要把读取设置的代码放在终端初始化完成的回调函数中执行。
内容的提问来源于stack exchange,提问作者NotHim
相关产品推荐
相关产品推荐

