xrsh-buildroot/buildroot-v86/board/v86/rootfs_overlay/root/manual.md

133 lines
4.8 KiB
Markdown
Raw Normal View History

2024-09-11 14:58:31 +02:00
XRSH Manual
===========
2024-09-15 11:18:36 +02:00
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . ____ _____________ ________. ._. ._. . . . . . . . .
. . _\ \/ /\______ \/ _____// | \. . . . . . . .
. . _ \ / | _/\_____ \/ ~ \ . . . . . . .
_ _ / \ | | \/ \ Y / _ _ _ _ _ _ _
. . /___/\ \ |____|_ /_______ /\___|_ /. . . . . . . .
. . . . . .\_/. . . . \/ . . . .\/ . . _ \/ . . . . . . . .
▬▬▬▬ https://xrsh.isvery.ninja ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Open, local-first, polyglot, unix hackable & selfcontained XR apps.
Using worlds first WebXR linux distro.
credits: NLnet | @nlnet@nlnet.nl https://nlnet.nl/project
all FOSS devs | copy.sh (v86) aframe.io (AFRAME)
Leon van Kammen | @lvk@mastodon.online
Fabien Benetou | @utopiah@mastodon.pirateparty.be
# Getting started
Please hook up your (bluetooth) keyboard to use xrsh.
> tip use ctrl+a+0/1/2/3/.. to switch (GNU) screen terminals (and ctrl+a+c to create new ones)
| usecase | command |
|-----------------------|--------------------------------------------------------|
2024-09-17 19:02:07 +02:00
| require <URL> | adds javascript or CSS url to DOM |
2024-09-15 11:18:36 +02:00
| js run | js 'alert("hello")' |
| js console.log: | console document.baseURI |
| js inspect: | js "return document.baseURI" |
# Polyglot environment
Currently the following languages are supported:
* shellscript (busybox sh)
* awk (busybox awk v1.33.0)
* python (micropython)
* javascript (via your browser)
* lua (5.3.6)
> TIP: type `ls -la ~/hook.d/alert/*` for examples
# Editors
* vi (busybox vi)
* nano (busybox nano)
* mg (microemacs)
# Boot sequence
The following files are loaded during boot (via `/etc/profile`)
| file | info |
|-----------------------|---------------------------------------------------|
| /etc/profile.xrsh | sets up xrsh environment |
| /etc/profile.sh | global shellscript functions |
| /etc/profile.js | global javascript functions |
| /mnt/profile.browser | environment vars set by browser (`echo $HOSTNAME`)|
| /root/.profile | user shellscript functions/settings |
| /root/.profile.js | user javascript functions |
| /root/.screenrc | GNU screen initialisations |
| https://.../#ls | URI fragment is executed as command in own screen |
> TIP: to keep things portable with future versions of XRSH: modify files in `/root/*`
# Calling terminal from javascript
```javascript
const term = document.querySelector('[isoterminal]').components.isoterminal.isoterminal
term.exec("ls -la")
```
# Calling javascript from terminal
Various options:
1. Just add the `#!/bin/js` shebang to the top of a javascript file (+ chmod +x)
2. Run `js "alert('hello')"` in the shell
3. Run `jsh alert hello` in the shell
4. Run `jsh` to start an interactive shell
# Hybrid Terminal/Browser Events
Events are automatically triggering scripts in `/root/hook.d/{eventname}/*`
> They can be triggered by the following ways
1. from shellscript: `hook myevent` (will trigger **executable** files in /root/hook.d/myevent)
2. from javascript: `isoterminal.exec("hook myevent")` (idem)
3. via jsh: `jsh alert hello` (will trigger **executable** files in /root/hook.d/alert)
These are various ways to enable hybrid eventing between browser and terminal (languages).
2024-09-11 14:58:31 +02:00
# Multiple terminals [GNU screen]
## From the cmdline
```
xrsh # screen DR # list of detached screen
xrsh # screen r PID # attach detached screen ses­sion
xrsh # screen dmS Myses # start a detached screen ses­sion
xrsh # screen r MySes #attach screen ses­sion with name MySession
```
## Basics
```
ctrl a c -> create new window
ctrl a A -> set win­dow name
ctrl a w -> show all win­dow
ctrl a 1|2|3|… -> switch to win­dow n
ctrl a " -> choose win­dow
ctrl a ctrl a -> switch between win­dow
ctrl a d -> detach win­dow
ctrl a ? -> help
ctrl a [ -> start copy, move cur­sor to the copy loca­tion, press ENTER, select the chars, press ENTER to copy the selected char­ac­ters to the buffer
ctrl a ] -> paste from buffer
```
## Advanced
```
ctrl a S -> cre­ate split screen
ctrl a TAB -> switch between split screens
ctrl a Q -> Kill all regions but the cur­rent one.
ctrl a X -> remove active win­dow from split screen
ctrl a O -> logout active win­dow (dis­able out­put)
ctrl a I -> login active win­dow (enable output)
```