133 lines
4.8 KiB
Markdown
133 lines
4.8 KiB
Markdown
XRSH Manual
|
||
===========
|
||
|
||
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
||
. . ____ _____________ ________. ._. ._. . . . . . . . .
|
||
. . _\ \/ /\______ \/ _____// | \. . . . . . . .
|
||
. . _ \ / | _/\_____ \/ ~ \ . . . . . . .
|
||
_ _ / \ | | \/ \ 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 |
|
||
|-----------------------|--------------------------------------------------------|
|
||
| require <URL> | adds javascript or CSS url to DOM |
|
||
| 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.term
|
||
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).
|
||
|
||
# Multiple terminals [GNU screen]
|
||
|
||
## From the cmdline
|
||
|
||
```
|
||
xrsh # screen –DR # list of detached screen
|
||
xrsh # screen –r PID # attach detached screen session
|
||
xrsh # screen –dmS Myses # start a detached screen session
|
||
xrsh # screen –r MySes #attach screen session with name MySession
|
||
```
|
||
|
||
## Basics
|
||
|
||
```
|
||
ctrl a c -> create new window
|
||
ctrl a A -> set window name
|
||
ctrl a w -> show all window
|
||
ctrl a 1|2|3|… -> switch to window n
|
||
ctrl a " -> choose window
|
||
ctrl a ctrl a -> switch between window
|
||
ctrl a d -> detach window
|
||
ctrl a ? -> help
|
||
ctrl a [ -> start copy, move cursor to the copy location, press ENTER, select the chars, press ENTER to copy the selected characters to the buffer
|
||
ctrl a ] -> paste from buffer
|
||
```
|
||
|
||
## Advanced
|
||
|
||
```
|
||
ctrl a S -> create split screen
|
||
ctrl a TAB -> switch between split screens
|
||
ctrl a Q -> Kill all regions but the current one.
|
||
ctrl a X -> remove active window from split screen
|
||
ctrl a O -> logout active window (disable output)
|
||
ctrl a I -> login active window (enable output)
|
||
```
|