{"_id":"@b52405/webterminal","_rev":"14-25791f70db7d024bce2ca039f7ca99ce","name":"@b52405/webterminal","dist-tags":{"latest":"1.2.2"},"versions":{"1.0.7":{"name":"@b52405/webterminal","version":"1.0.7","keywords":["command","terminal","web","browser","vue","JavaScript"],"author":{"name":"B-52405"},"_id":"@b52405/webterminal@1.0.7","maintainers":[{"name":"b52405","email":"b18349276@gmail.com"}],"dist":{"shasum":"f961d7ae0d62295ab7dc27df8ca2c2e22896334a","tarball":"https://registry.npmjs.org/@b52405/webterminal/-/webterminal-1.0.7.tgz","fileCount":7,"integrity":"sha512-Z8vnAulb7h6NenXWJ4PtL7yw1FEBTarSuNebnUX9tUB0UXUamy6Y3j1Jrtu6ItsuveRH4HuAuh3GHp5Dle61Gg==","signatures":[{"sig":"MEUCIQDqlNtY1AKi1YxvE+iOO2DRZcfd3D0sgQ8jtMPz/sQhlQIgVPLcK5zYvTJWHjXF2yutyuuPUXzkevHqpDDFFZvg3CE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56252},"main":"dist/webterminal.umd.js","type":"module","style":"dist/style.css","module":"dist/webterminal.es.js","gitHead":"6635d917b83e3fb6e73a12bc2c74786fb17b9709","scripts":{"dev":"vite","page":"vite build --config vite.config.page.js","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"b52405","email":"b18349276@gmail.com"},"licenese":"MIT","_npmVersion":"8.19.4","description":"一个基于 Vue 编写的前端组件，可以在浏览器中实现一个终端程序","directories":{},"_nodeVersion":"16.20.2","dependencies":{"vue":"^3.2.47","path":"^0.12.7","clone-deep":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.2.0","@vitejs/plugin-vue":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/webterminal_1.0.7_1716804406120_0.18860537938270183","host":"s3://npm-registry-packages"}},"1.0.8":{"name":"@b52405/webterminal","version":"1.0.8","keywords":["command","terminal","web","browser","vue","JavaScript"],"author":{"name":"B-52405"},"_id":"@b52405/webterminal@1.0.8","maintainers":[{"name":"b52405","email":"b18349276@gmail.com"}],"dist":{"shasum":"ffc282863c20563b9f267d24b8d0ddda569bda0c","tarball":"https://registry.npmjs.org/@b52405/webterminal/-/webterminal-1.0.8.tgz","fileCount":7,"integrity":"sha512-LUhVVpZG6l4At31KTYtG8ymxdOkjs1xjU5PCcDzu9Achcfokdja8RDAdlsXD6hujhcUuiAoZ6/6LwH4xxf0ZBA==","signatures":[{"sig":"MEYCIQDEfuis2lgKjZHUsBQgsZzi8ZU3ijjBd//3bvLIP4oRlwIhAPF5c1nMMqWSlvXAWuRYz/L9DkuyH/lBFGjmUSJPNvoB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56321},"main":"dist/webterminal.umd.js","type":"module","style":"dist/style.css","module":"dist/webterminal.es.js","gitHead":"b35bbe5d548ca2abc3adfb8ac1da497c2e424f2a","scripts":{"dev":"vite","page":"vite build --config vite.config.page.js","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"b52405","email":"b18349276@gmail.com"},"licenese":"MIT","_npmVersion":"8.19.4","description":"一个基于 Vue 编写的前端组件，可以在浏览器中实现一个终端程序","directories":{},"_nodeVersion":"16.20.2","dependencies":{"vue":"^3.2.47","path":"^0.12.7","clone-deep":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.2.0","@vitejs/plugin-vue":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/webterminal_1.0.8_1716804980119_0.10390480183342432","host":"s3://npm-registry-packages"}},"1.0.9":{"name":"@b52405/webterminal","version":"1.0.9","keywords":["command","terminal","web","browser","vue","JavaScript"],"author":{"name":"B-52405"},"_id":"@b52405/webterminal@1.0.9","maintainers":[{"name":"b52405","email":"b18349276@gmail.com"}],"dist":{"shasum":"8fa5d46d884873d161d9fec485441cdf7609ad11","tarball":"https://registry.npmjs.org/@b52405/webterminal/-/webterminal-1.0.9.tgz","fileCount":8,"integrity":"sha512-FEmbcHrbgWO8GuOqFDNDsIxCD/EqZuuNIQ7h4G7L0rKwq4E3tHHXdB7846TYyOB0Iu/lh7lOnBLNCG93YWBAbw==","signatures":[{"sig":"MEYCIQC09xTDQiwqB5Pku6nfwjjNL007pYv7cwVjfCb2gc4XuwIhAJ8BHApLEh1sbx/LsrlzRVH30gWHrIGQRW1pjrtyD1sV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63782},"main":"dist/webterminal.umd.js","type":"module","style":"dist/style.css","module":"dist/webterminal.es.js","gitHead":"0d167c27146053c433d922099624183eae0b1595","scripts":{"dev":"vite","page":"vite build --config vite.config.page.js","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"b52405","email":"b18349276@gmail.com"},"licenese":"MIT","_npmVersion":"8.19.4","description":"一个基于 Vue 编写的前端组件，可以在浏览器中实现一个终端程序","directories":{},"_nodeVersion":"16.20.2","dependencies":{"vue":"^3.2.47","path":"^0.12.7","clone-deep":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.2.0","@vitejs/plugin-vue":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/webterminal_1.0.9_1716807265062_0.8765159733377976","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@b52405/webterminal","version":"1.1.0","keywords":["command","terminal","web","browser","vue","JavaScript"],"author":{"name":"B-52405"},"_id":"@b52405/webterminal@1.1.0","maintainers":[{"name":"b52405","email":"b18349276@gmail.com"}],"dist":{"shasum":"2f30d3458017f241caeb828b88bc4938413ada32","tarball":"https://registry.npmjs.org/@b52405/webterminal/-/webterminal-1.1.0.tgz","fileCount":8,"integrity":"sha512-u9x1xhjwl/D6d7F7Yt8O9SE2fBOoyXPuwkk6bsMF06GR5tunFFGBxnCoUDimosSHWUCDWSN0ldXGcpAzu0NV4g==","signatures":[{"sig":"MEUCID3V2LZvUkkOWlwF+/tBBodksrDrrF0xwlMN5D3Od37oAiEAn3R02SGbkSORnnwJ2f4eVWMWWbs5ETCWlGOewPTqYbI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":63705},"main":"dist/webterminal.umd.js","type":"module","style":"dist/style.css","module":"dist/webterminal.es.js","gitHead":"dc9df8be4e95625d288407a3b50b400a16f357e6","scripts":{"dev":"vite","page":"vite build --config vite.config.page.js","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"b52405","email":"b18349276@gmail.com"},"licenese":"MIT","_npmVersion":"8.19.4","description":"一个基于 Vue 编写的前端组件，可以在浏览器中实现一个终端程序","directories":{},"_nodeVersion":"16.20.2","dependencies":{"vue":"^3.2.47","path":"^0.12.7","clone-deep":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.2.0","@vitejs/plugin-vue":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/webterminal_1.1.0_1716808754634_0.4723258435804749","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@b52405/webterminal","version":"1.2.0","keywords":["command","terminal","web","browser","vue","JavaScript"],"author":{"name":"B-52405"},"_id":"@b52405/webterminal@1.2.0","maintainers":[{"name":"b52405","email":"b18349276@gmail.com"}],"dist":{"shasum":"3359b7a6da28fb51deca5c7c468cd50be21a3085","tarball":"https://registry.npmjs.org/@b52405/webterminal/-/webterminal-1.2.0.tgz","fileCount":7,"integrity":"sha512-MsyIONbdvqlRIEJwMF+ZjhHNr4GQ70g3MoibKCEy1pFL9cuK0p51UJxVqWIXK6sWfEq67EyqWW/rWSTEOSYuGQ==","signatures":[{"sig":"MEYCIQCBDn4Adeo7ghMWxoiNfFxLzft2EdL1Wm6MiDEeV7KCZQIhAKz/T7HUOMvdP+GaBjF5Gp4cXjlx65KZsF+2ayAd1Yuc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":60302},"main":"dist/webterminal.umd.js","type":"module","style":"dist/style.css","module":"dist/webterminal.es.js","gitHead":"8dbe0fdcb4c2edf4713b4bcdf1f2b93faf8a447f","scripts":{"dev":"vite","page":"vite build --config vite.config.page.js","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"b52405","email":"b18349276@gmail.com"},"licenese":"MIT","_npmVersion":"8.19.4","description":"一个基于 Vue 编写的前端组件，可以在浏览器中实现一个终端程序","directories":{},"_nodeVersion":"16.20.2","dependencies":{"vue":"^3.2.47","path":"^0.12.7","clone-deep":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.2.0","@vitejs/plugin-vue":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/webterminal_1.2.0_1717487531068_0.2280569441093685","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"@b52405/webterminal","version":"1.2.1","keywords":["command","terminal","web","browser","vue","JavaScript"],"author":{"name":"B-52405"},"_id":"@b52405/webterminal@1.2.1","maintainers":[{"name":"b52405","email":"b18349276@gmail.com"}],"dist":{"shasum":"1e93f4f1d7d441720f3cee5440d3a57f2060f785","tarball":"https://registry.npmjs.org/@b52405/webterminal/-/webterminal-1.2.1.tgz","fileCount":7,"integrity":"sha512-xk1++3A3htG0Gl7jTUo7Zd+UUvA9dnMLBPUJfuwayDgf2lyBOddsju01m8G/Qb3/U/cimBYdw2cpdGbpA9YVHQ==","signatures":[{"sig":"MEYCIQCs9kzkrfd/n7HpJkCzaTNuqtbh9eHg8dVJ+6vCjXu0TgIhAJnbJMAUSpEHnJPeWMwdy8/7Hl29GSOq8bNRF/D0yPRt","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62730},"main":"dist/webterminal.umd.js","type":"module","style":"dist/style.css","module":"dist/webterminal.es.js","gitHead":"028dbed909db37429c3fa4a6b17aad9a8bc9f7ed","scripts":{"dev":"vite","page":"vite build --config vite.config.page.js","build":"vite build","preview":"vite preview"},"_npmUser":{"name":"b52405","email":"b18349276@gmail.com"},"licenese":"MIT","_npmVersion":"10.7.0","description":"一个基于 Vue 编写的前端组件，可以在浏览器中实现一个终端程序","directories":{},"_nodeVersion":"20.14.0","dependencies":{"vue":"^3.2.47","path":"^0.12.7","clone-deep":"^4.0.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^4.2.0","@vitejs/plugin-vue":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/webterminal_1.2.1_1717674651688_0.7420895472288962","host":"s3://npm-registry-packages"}},"1.2.2":{"name":"@b52405/webterminal","description":"一个基于 Vue 编写的前端组件，可以在浏览器中实现一个终端程序","version":"1.2.2","author":{"name":"B-52405"},"type":"module","main":"dist/webterminal.umd.js","module":"dist/webterminal.es.js","style":"dist/style.css","keywords":["command","terminal","web","browser","vue","JavaScript"],"scripts":{"dev":"vite","build":"vite build","page":"vite build --config vite.config.page.js","preview":"vite preview"},"licenese":"MIT","dependencies":{"clone-deep":"^4.0.1","path":"^0.12.7","vue":"^3.2.47"},"devDependencies":{"@vitejs/plugin-vue":"^4.1.0","vite":"^4.2.0"},"_id":"@b52405/webterminal@1.2.2","gitHead":"6935f1ffd16a92a9b7d4cb296cd2ef88c23b98ee","_nodeVersion":"20.15.1","_npmVersion":"10.7.0","dist":{"integrity":"sha512-ZvetjZhmwmS7wv1d9UP40XYdDxF8hSla/7MMHlM5pXnek93/SsEiT1SzXkZ+7iKlO3M4331EsAeyF7DlRW/khw==","shasum":"c58e28cc4d11be9370db5ef9c16da1c375f44968","tarball":"https://registry.npmjs.org/@b52405/webterminal/-/webterminal-1.2.2.tgz","fileCount":7,"unpackedSize":64746,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIECxgrPhQqK7jD6B12hQTGA+iDOkYjcXOGCq8ZXe15O9AiEAxVqE2jC52QND6OXCOuw2BBdZDCYcG/hKcnr/RaXRYgM="}]},"_npmUser":{"name":"b52405","email":"b18349276@gmail.com"},"directories":{},"maintainers":[{"name":"b52405","email":"b18349276@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/webterminal_1.2.2_1722362457240_0.1470058489032693"},"_hasShrinkwrap":false}},"time":{"created":"2024-05-27T10:06:46.034Z","modified":"2024-07-30T18:00:57.599Z","1.0.0":"2024-05-26T11:59:34.001Z","1.0.1":"2024-05-26T14:59:59.086Z","1.0.2":"2024-05-26T15:39:42.901Z","1.0.4":"2024-05-26T17:12:36.149Z","1.0.5":"2024-05-26T17:24:39.576Z","1.0.6":"2024-05-26T17:54:44.216Z","1.0.7":"2024-05-27T10:06:46.322Z","1.0.8":"2024-05-27T10:16:20.250Z","1.0.9":"2024-05-27T10:54:25.232Z","1.1.0":"2024-05-27T11:19:14.808Z","1.2.0":"2024-06-04T07:52:11.226Z","1.2.1":"2024-06-06T11:50:51.839Z","1.2.2":"2024-07-30T18:00:57.423Z"},"author":{"name":"B-52405"},"keywords":["command","terminal","web","browser","vue","JavaScript"],"description":"一个基于 Vue 编写的前端组件，可以在浏览器中实现一个终端程序","maintainers":[{"name":"b52405","email":"b18349276@gmail.com"}],"readme":"<img src=\"https://unpkg.com/@b52405/webterminal/dist/webterminal.png\" alt=\"WebTerminal\" style=\"height: 200px\">\n\n# WebTerminal\n\nWebTerminal 是一个基于 Vue 编写的前端组件，可以在浏览器中实现一个终端程序，并允许用户使用纯 JavaScript 编写在其上运行的控制台应用。\n\n# 说明\n\n* WebTerminal 并非可以下载并在计算机上运行的应用程序，它更像是一个网页上的终端模拟器，它模仿了真正的终端的行为，使用户编写的JS程序像普通的控制台应用一样运行。\n* WebTerminal 为了更好地模拟终端的各种输出，实现了一个自己的命令解析接口：`Commander`，跟一个很厉害的命令解析库同名。不用担心，这个接口的使用十分简单，如果你曾经使用过类似的库，那么一瞬间就能上手。\n* WebTerminal 并非真正的终端，它只能运行用户自己编写的，使用 `Commander` 注册了的 JavaScript 程序。\n\n# 开始使用\n\n推荐的使用方式是 Vite + Vue。 \n\n* 安装 WebTerminal :\n\n```\n// npm\nnpm install @b52405/webterminal\n\n// yarn\nyarn add @b52405/webterminal\n\n// ES6 见下方示例\n```\n\n* WebTerminal 像所有其他 Vue 组件一样使用。 \n\n```JavaScript\nimport { createApp } from 'vue'\nimport { Terminal } from \"@b52405/webterminal\"\nimport \"@b52405/webterminal/dist/style.css\"\n\ncreateApp(Terminal).mount('#web_terminal_app')\n```\n\n* 也可以通过CDN方式引入:\n\n```HTML\n<!DOCTYPE html>\n<html>\n\n<head>\n    <title>Web Terminal</title>\n    <link rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"https://unpkg.com/@b52405/webterminal/dist/webterminal.png\">\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/@b52405/webterminal/dist/style.css\">\n    <style>\n        body {\n            margin: 0;\n        }\n\n        #web_terminal_app {\n            box-sizing: border-box;\n            height: 100vh;\n        }\n    </style>\n</head>\n\n<body>\n    <div id=\"web_terminal_app\"></div>\n    <script type=\"module\">\n        import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.prod.js'\n        import { Terminal, Commander, terminal } from 'https://unpkg.com/@b52405/webterminal/dist/webterminal.es.js'\n\n        Commander\n            .Command(\"hello\")\n            .Description(\"Say hello to the world.\")\n            .Param({ name: \"ending\", type: \"String\", default: \"!\", description: \"Punctuation.\" })\n            .Option({ name: \"hide\", type: \"Boolean\", short: \"h\", description: \"Whether to display punctuation marks.\" })\n            .Action(async (ending, hide) => {\n                terminal.log(\" \")\n                const name = await terminal.input(\"  name: \")\n                terminal.log(`  hello ${name}${hide ? \"\" : ending}`)\n                terminal.log(\" \")\n            })\n\n        createApp(Terminal).mount(\"#web_terminal_app\")\n    </script>\n</body>\n\n</html>\n```\n\n# 定义自己的命令\n\nWebTerminal 自带三个命令：`help` , `clear` 和 `color`。你可以使用 `help` 命令查看他们的用法。例如:\n\n```\nWebTerminal> help color\n```\n\n显然，原生命令的功能极其有限，因而需要用户自定义命令。上文提到的 `Commander` 提供了足够普通需求使用的自定义选项。\n\n### 使用 `Commander`\n\n```JavaScript\nimport { terminal, Commander } from \"@b52405/webterminal\"\n\nCommander\n    //命令名\n    .Command(\"hello\")\n\n    //命令说明，help命令会打印各个命令的说明\n    .Description(\"Say hello to the world.\")\n\n    //每个命令可以有多个参数\n    //声明参数时，name，type，default是必选项\n    //name不能带有空格\n    //type必须是String，Number，Float的其中一种\n    .Param({ name: \"name\", type: \"String\", default: \"world\", description: \"Say hello to who\" })\n\n    //每个命令可以有多个选项\n    //声明非Boolean选项时，name，type，default是必选项\n    //声明Boolean选项时，name，type是必选项\n    //name不能带有空格\n    //type必须是String，Number，Float，Boolean的其中一种\n    .Option({ name: \"ending\", type: \"String\", default: \"!\", short: \"e\", description: \"Punctuation\" })\n    .Option({ name: \"show\", type: \"Boolean\", short: \"s\", description: \"Whether to display punctuation marks\" })\n\n    //命令的行为函数\n    //所有形参的顺序必须和之前声明的参数和选项的顺序一致\n    .Action((name, ending, show) => {\n        terminal.log(`hello ${name}${show ? ending : \"\"}`)\n    })\n\ncommanding\n    //可以删除无用命令\n    .Remove(\"hello\")\n    .Remove(\"color\")\n```\n\n# 定义命令的输出\n\n命令行为函数可以通过 WebTerminal 提供的 `terminal.log` 接口向终端打印内容。此外， WebTerminal 提供的 `Clause` API 允许用户以终端输出的字符串的片段为单位，自定义每个片段的样式和点击事件。\n\n### 试用 `terminal.log`\n\n只建议用户在命令行为函数内部使用 `terminal.log` 。\n\n```JavaScript\nimport { terminal, Clause } from \"@b52405/webterminal\"\n\n//命令行为函数示例\nasync function example_command_action() {\n    //terminal.log会将每个实参打印为终端中的一行\n    terminal.log(\"line\")\n    //在终端中会打印成三行\n    terminal.log(\"line1\", \"line2\", \"line3\")\n    //既不是string也不是Clause数组的参数会被解析为JSON字符串\n    //这个例子中终端会打印：{\"data\":\"something\"}\n    terminal.log({ data: \"something\" })\n\n    //此外WebTerminal还提供了一个terminal.finish接口，用于主动结束打印并将控制权交还给终端\n    //这一接口的推荐使用场景是：\n    //命令行为函数可以在所有输出都已经结束，但还需要执行复杂计算等耗时操作时，主动调用terminal.finish\n    //WebTerminal会拒绝terminal.finish之后的所有terminal.log\n    terminal.finish()\n\n    //不产生输出的耗时操作放在terminal.finish之后\n    await setTimeout(() => { }, 1000)\n}\n```\n\n### 使用 `Clause`\n\nClause本质上是用于输出到终端的字符串片段，多个Clause共同组成终端输出中的一行。在定义命令的行为函数时，返回值中每一个字符串都可以用等价的Clause数组代替。\n\n* Clause 基础功能\n\n```JavaScript\nimport { terminal, Clause } from \"@b52405/webterminal\"\n\n//命令行为函数示例\nfunction example_command_action(){\n    //等价于 return \"hello world!\"\n    //等价于 return [new Clause(\"hello \"), new Clause(\"world!\")]\n    //等价于 return [new Clause(\"hello world!\")]\n    terminal.log([new Clause(\"hello\"), \" \", new Clause(\"world\")])\n}\n```\n\n* 自定义 Clause\n\n```JavaScript\nimport { terminal, Clause } from \"@b52405/webterminal\"\n\n//命令行为函数示例\nfunction example_command_action() {\n    const clause = new Clause(\"hello\")\n        //为文本添加一个css类\n        .Cls(\"example_css_class\")\n\n        //设置多个css类\n        //Clss方法会使所有在这之前设置的css类无效\n        .Clss([\"example_css_class_1\", \"example_css_class_2\"])\n\n        //添加一个内联样式\n        .Property(\"background-color\", \"blue\")\n\n        //设置多个内联样式\n        //Style方法会使所有在这之前设置的内联样式无效\n        .Style({ \"background-color\": \"red\", color: \"blue\" })\n\n        //添加点击事件的响应\n        .Click(() => {\n            console.log(\"click\")\n        })\n\n    //命令的行为函数的返回值不能是单个Clause，可以是Clause数组\n    //对于终端来说，Clause数组相当于一个string\n    terminal.log([clause])\n}\n\nfunction example_command_action2() {\n\n    //Clause自带三种预设\n    //分别是Warning，Error和Button\n    //三种预设分别表现为橙色，红色和浅绿色按钮\n    const warning = new Clause(\"warning\").Warning()\n    const error = new Clause(\"error\").Error()\n    const button = new Clause(\"button\").Button(\n        //Button预设需要将一个Clause被点击时的处理函数作为参数\n        () => { console.log(\"click button\") }\n    )\n\n    //命令的行为函数的返回值不能是单个Clause，可以是Clause数组\n    //对于终端来说，Clause数组相当于一个string\n    terminal.log([warning, error, button])\n}\n```\n\n# 终端设置\n\n终端本身的设置选项包括：\n* prompt：提示符\n* prompt_visibility：提示符可见性\n* background_color：终端背景颜色\n* font_color：字体颜色\n* logging_interval：打印每一行的时间间隔，单位：ms\n* mounted：终端加载后自动调用的回调函数\n* banner: 终端加载后自动打印的内容\n* timeout: 无操作一段时间后自动登出，单位：ms\n\n### 设置终端\n\n```JavaScript\nimport { terminal } from \"@b52405/webterminal\"\n\nterminal.setting.prompt = \"WebTerminal> \"\nterminal.setting.prompt_visibility = true\nterminal.setting.background_color = \"gray\"\nterminal.setting.font_color = \"white\"\nterminal.setting.logging_interval = 24\nterminal.setting.mounted = () => { console.log(\"Terminal is ready.\") }\nterminal.setting.banner = [\"Welcome to WebTerminal.\", \" \"]\nterminal.setting.timeout = 300000\n```\n\n# 读取用户输入\n\nWebTerminal 允许在命令在执行的过程中主动要求读取用户在终端输入的字符串。其表现类似于C++中的cin。这一功能通过 `terminal.input` 接口实现。\n\n```JavaScript\nimport { terminal } from \"@b52405/webterminal\"\n\n//命令行为函数示例\nasync function example_command_action() {\n\n    //终端会另起一行，显示\"input message: \"并等待用户输入\n    //用户的输入会以string的形式返回\n    const message = await terminal.input(\"input message: \")\n\n    //将第二个参数设置为true可以隐藏用户输入内容\n    const secret = await terminal.input(\"secret message: \", true)\n\n    terminal.log(message)\n}\n```","readmeFilename":"README.md"}