diff --git a/buildroot-v86/board/v86/rootfs_overlay/root/bin/codemirror b/buildroot-v86/board/v86/rootfs_overlay/root/bin/codemirror
index baa6d76..381118b 100755
--- a/buildroot-v86/board/v86/rootfs_overlay/root/bin/codemirror
+++ b/buildroot-v86/board/v86/rootfs_overlay/root/bin/codemirror
@@ -1,3 +1,4 @@
#!/bin/sh
-cat lib/aframe/codemirror.js > /dev/browser/js
-echo '' >> /dev/browser/html
+source /etc/profile.sh
+require 'com/codemirror.js' # add to dom
+echo '' >> /dev/browser/html
diff --git a/buildroot-v86/board/v86/rootfs_overlay/root/bin/save b/buildroot-v86/board/v86/rootfs_overlay/root/bin/save
new file mode 100755
index 0000000..e27249c
--- /dev/null
+++ b/buildroot-v86/board/v86/rootfs_overlay/root/bin/save
@@ -0,0 +1,4 @@
+#!/bin/js
+const isoterminal = document.querySelector('[isoterminal]').components.isoterminal.isoterminal
+isoterminal.save()
+return "[OK] xrsh state saved\n"
diff --git a/buildroot-v86/board/v86/rootfs_overlay/root/bin/speech b/buildroot-v86/board/v86/rootfs_overlay/root/bin/speech
new file mode 100755
index 0000000..4714d93
--- /dev/null
+++ b/buildroot-v86/board/v86/rootfs_overlay/root/bin/speech
@@ -0,0 +1,4 @@
+#!/bin/sh
+source /etc/profile.sh
+require 'com/speech.js' # add to dom
+echo '' >> /dev/browser/html
diff --git a/buildroot-v86/board/v86/rootfs_overlay/root/lib/aframe/codemirror.js b/buildroot-v86/board/v86/rootfs_overlay/root/lib/aframe/codemirror.js
deleted file mode 100644
index d801b30..0000000
--- a/buildroot-v86/board/v86/rootfs_overlay/root/lib/aframe/codemirror.js
+++ /dev/null
@@ -1,120 +0,0 @@
-if( AFRAME.components.codemirror ) delete AFRAME.components.codemirror
-
-AFRAME.registerComponent('codemirror', {
- schema: {
- foo: { type:"string"}
- },
-
- init: function () {
- this.el.object3D.visible = false
- //this.el.innerHTML = ` `
- this.requireAll()
- },
-
- requireAll: async function(){
- let s = await AFRAME.utils.require(this.requires)
- setTimeout( () => this.el.setAttribute("dom",""), 300 )
- },
-
- requires:{
- window: "com/window.js",
- codemirror: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.58.1/codemirror.js",
- codemirrorcss: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/codemirror.css",
- cmtheme: "https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.35.0/theme/shadowfox.css"
- },
-
- dom: {
- scale: 0.5,
- events: ['click','keydown'],
- html: (me) => `
-
`,
-
- css: (me) => `.codemirror{
- width:100%;
- }
- .wb-body + .codemirror{ overflow:hidden; }
- .CodeMirror {
- margin-top:18px;
- }
- .cm-s-shadowfox.CodeMirror {
- background:transparent !important;
- }
- `
- },
-
- events:{
-
- // component events
- DOMready: function(e){
- console.log(`title: codemirror; uid: ${this.el.dom.id}; attach: #overlay; dom: #${this.el.dom.id};`)
- this.el.setAttribute("window", `title: codemirror; uid: ${this.el.dom.id}; attach: #overlay; dom: #${this.el.dom.id};`)
- this.editor = CodeMirror( this.el.dom, {
- value: "function myScript(){return 100;}\n",
- mode: "javascript",
- lineNumbers: true,
- styleActiveLine: true,
- matchBrackets: true,
- Tab: "indentMore",
- defaultTab: function(cm) {
- if (cm.somethingSelected()) cm.indentSelection("add");
- else cm.replaceSelection(" ", "end");
- }
- })
- this.editor.setOption("theme", "shadowfox")
- },
- },
-
-
- manifest: { // HTML5 manifest to identify app to xrsh
- "short_name": "Paste",
- "name": "Paste",
- "icons": [
- {
- "src": "https://css.gg/clipboard.svg",
- "type": "image/svg+xml",
- "sizes": "512x512"
- }
- ],
- "id": "/?source=pwa",
- "start_url": "/?source=pwa",
- "background_color": "#3367D6",
- "display": "standalone",
- "scope": "/",
- "theme_color": "#3367D6",
- "shortcuts": [
- {
- "name": "What is the latest news?",
- "cli":{
- "usage": "helloworld [options]",
- "example": "helloworld news",
- "args":{
- "--latest": {type:"string"}
- }
- },
- "short_name": "Today",
- "description": "View weather information for today",
- "url": "/today?source=pwa",
- "icons": [{ "src": "/images/today.png", "sizes": "192x192" }]
- }
- ],
- "description": "Paste the clipboard",
- "screenshots": [
- {
- "src": "/images/screenshot1.png",
- "type": "image/png",
- "sizes": "540x720",
- "form_factor": "narrow"
- }
- ],
- "help":`
-Helloworld application
-
-This is a help file which describes the application.
-It will be rendered thru troika text, and will contain
-headers based on non-punctualized lines separated by linebreaks,
-in above's case "\nHelloworld application\n" will qualify as header.
- `
- }
-
-});
-
diff --git a/buildroot-v86/board/v86/rootfs_overlay/root/manual.md b/buildroot-v86/board/v86/rootfs_overlay/root/manual.md
index 96c3342..e1d0494 100644
--- a/buildroot-v86/board/v86/rootfs_overlay/root/manual.md
+++ b/buildroot-v86/board/v86/rootfs_overlay/root/manual.md
@@ -26,6 +26,7 @@ Please hook up your (bluetooth) keyboard to use xrsh.
| usecase | command |
|-----------------------|--------------------------------------------------------|
+| require | adds javascript or CSS url to DOM |
| js run | js 'alert("hello")' |
| js console.log: | console document.baseURI |
| js inspect: | js "return document.baseURI" |
diff --git a/dist/v86-linux.iso b/dist/v86-linux.iso
index dd1c03c..1f8a641 100644
Binary files a/dist/v86-linux.iso and b/dist/v86-linux.iso differ
diff --git a/edit.sh b/edit.sh
index 9b78ec4..445eeeb 100755
--- a/edit.sh
+++ b/edit.sh
@@ -2,8 +2,9 @@
set -e
make BR2_EXTERNAL=/buildroot-v86 v86_defconfig
mkdir output/legal-info && touch output/legal-info/{host-licenses,licenses,buildroot.config}
+
make menuconfig
-make busybox-meuconfig
+make busybox-menuconfig
make linux-menuconfig
make savedefconfig
make linux-savedefconfig