Skip to content

The Desktop

The desktop is the same on both machines: a menu bar across the top, the wallpaper below it, and windows on top of that.

The desktop

The menu bar

Everything the system wants to tell you lives in this 13-pixel strip.

┌─────────────────────────────────────────────────────────────────────┐
│ Family mruby  ▪▪          137KB  A  B  ▂▄▆   08/07 21:04:11         │
└─────────────────────────────────────────────────────────────────────┘
  ↑             ↑           ↑      ↑  ↑  ↑     ↑
  |             |           |      |  |  |     clock
  |             |           |      |  |  Wi-Fi
  |             |           |      |  BLE
  |             |           |      kana
  |             |           RAM
  |             taskbar
  system menu

Family mruby

Click it for the system menu. See the list below.

Running apps (the taskbar)

Each running app gets a small square, in the order they started, immediately right of the title. This is the taskbar.

It is a list of windows, not of processes: a square is something you can click to bring to the front and type into. An app with no window — the service host, for one — has nothing to raise, so it is not listed. ps and the Monitor still show it.

  • The letter is the first character of the app's name
  • The colour is the language it runs on:

    Colour Language
    Red Ruby (mruby)
    Yellow MicroPython
    Green BASIC
    Blue Lua
    Gray Native C
  • A white border marks the app that currently has keyboard focus

  • Click a square to bring that app to the front and give it the keyboard
The left of the menu bar, enlarged: the title, then three small squares, the last with a white border
Three apps running. The white border is the one with the keyboard

An app parked by Ctrl + Tab (see below) stays in the taskbar while it is frozen, so you can always click your way back to it.

Free internal RAM

The figure on the right — 137KB in the example — is free internal RAM, not total free memory. App heaps come from PSRAM, which is plentiful, but each running app also costs about 25 KB of internal RAM, and that is what runs out first. So this is the number that answers "can I open one more app?".

The Linux simulator has no such limit and shows ---KB.

The right of the menu bar, enlarged: free RAM, the kana indicator, the BLE cell, the Wi-Fi bars and the clock
The right-hand end, enlarged. Free RAM, kana, BLE, Wi-Fi, clock

Kana input

A when you are typing ASCII, for hiragana, for katakana. Click it to step through the three. It is there from boot, in every language, because on a keyboard with no half-width/full-width key — or with no keyboard at all — that click is the way in. Ctrl + Space does the same thing from the keyboard.

BLE

Appearance Meaning
Nothing BLE is off
Gray box, white B BLE is on, waiting for something to connect
White box, inverted B A client is connected — the web console, typically

On Retro the system menu starts BLE and ble_auto_start in Config decides whether it comes up at boot; there is no way to stop it again short of a reboot. Modern has the same setting, and false there means nothing is advertised and nothing can connect — the link to the C6 still comes up, because Wi-Fi needs it.

Wi-Fi

Signal bars, just left of the clock.

Appearance Meaning
White bars Connected
Gray bars with a red slash Not connected
Nothing This build has no Wi-Fi

Click the bars to open the Network dialog, which shows the address the device was given. See Connecting to Wi-Fi.

Clock

Date and time. Set it from Set Clock; the timezone is a separate setting under Config.

The system menu

The system menu
Item What it does
Launcher The grid of installed apps
Editor The editor. It is built into the firmware, and heads the launcher grid with the Shell and the App Store
File Manager Browse the flash filesystem
Log Viewer The system log
Monitor Running tasks, memory and services
Set Clock Date and time
Config Language, keyboard layout, pointer speed, theme, wallpaper, timezone, Wi-Fi and BLE autostart, display margins
Storage Clear cached files
Network Wi-Fi state, address, hostname
BLE Start Retro only, and only when BLE did not start at boot
Shortcuts Every key that works here, in one list
About Version and chip information
Reset Reboot

Whatever Config changes is written back into /etc/system_conf.toml, keeping your comments and other settings intact. On hardware the dialog offers Save & Reboot for the settings that only take effect at startup.

What happens before the desktop

Power-on shows the logo and plays a short jingle, and then the desktop comes up. That ceremony is boot_splash in /etc/system_conf.toml; setting it to false skips both and saves about 2.7 seconds, which is worth having on a machine built to run one thing. Nothing else changes — the cursor, the status LED and the startup app all happen either way.

startup_app beside it names one app to open as soon as the desktop is ready, by the same path the launcher uses. Empty means the ordinary desktop. A fullscreen app named there takes the screen without the desktop showing first. Neither setting is in the Config dialog: edit the file in the Editor.

The launcher

The launcher

Double-click an icon to start an app. Arrow keys move the selection and Enter starts it.

The list is built once, at boot

The launcher scans the filesystem when the desktop starts. After you add an app, right-click inside the launcher window to rescan — otherwise your new app will not appear until the next reboot.

Windows

Action How
Move Drag the title bar
Focus Click anywhere in the window, or click its taskbar square
Close The button in the title bar, or Ctrl + Q
Resize Drag the corner — only for apps that declare resizable

A click is decided on release, with a small movement tolerance, so a slightly shaky press does not turn into a drag.

Scrolling

The mouse wheel scrolls the editor, the shell, the log viewer, the launcher and the file dialogs. It goes to the window that has the keyboard, not to the one under the pointer, so it behaves like a key rather than like a click.

In the simulator, in Studio and over the remote desktop it needs nothing. On a board a USB mouse has to be named in /etc/hid_devices.toml before its wheel does anything — plug the mouse in and the log prints the line to add.

Keys

Always

Key Effect
Ctrl + Q Close the app in the foreground, including a fullscreen one
Ctrl + Tab Switch between the desktop and the running apps
Ctrl + , The same thing. A browser keeps Ctrl + Tab for its own tabs, so Studio needs this one; it works on the boards too
Ctrl + Space Turn kana input on and off

These are handled before the event reaches any app, so they work even when a fullscreen app has the whole screen.

On the desktop

With no app focused and no dialog open, a single letter starts an app:

Key Starts
L Launcher
S Shell
E Editor
N NSF player
I HID Inspector — see HID Device Config

That list is the [[shortcuts]] section of /etc/system_conf.toml. Add your own by naming the app's path. The Shortcuts entry in the system menu shows the list a machine actually has, read from its own configuration.

The menu bar answers to the keyboard too:

Key Effect
F10 Open the system menu with the first entry picked
Home End Move the selection. It wraps at both ends
Enter Run the entry
Esc or F10 Close the menu

The highlight is the same one the mouse moves, so the two ways of driving the menu cannot disagree about what is selected.

Switching between apps

Ctrl + Tab does one of two things, depending on what is in front.

Windowed apps: cycle

It moves round-robin through the desktop and the running apps — the desktop first, then the apps in the order they started. Whatever it lands on comes to the front and takes the keyboard, so you can Ctrl + Tab from the editor to your app, type into it, and Ctrl + Tab back to keep editing.

The desktop is a stop on that ring because its menu bar and its letter shortcuts only answer while it holds the keyboard. Without it, starting one app meant the menu could only be reached with the mouse. While a fullscreen app is up the desktop is suspended and drops out of the ring.

A fullscreen app: park it

Pressing Ctrl + Tab inside a fullscreen app parks it: the app freezes where it is, its canvas is hidden, and the desktop comes back. Its state and canvas are kept, so cycling round to it again — or clicking its taskbar square — restores the screen it had, without a redraw and without losing your place.

An app has to opt in

Only an app that declares fullscreen_switchable = 1 in its .app.toml can be parked. Others ignore Ctrl + Tab while fullscreen.

The declaration means "it is fine to freeze me mid-run". An app that leaves the sound chip playing should not declare it: frozen or not, the sound keeps going.

The bundled presentation tool, PicoRabbit, declares it — so you can leave a slide, go do something else, and come back to the same slide.