Manual · 9

Themes and languages

Every colour in VCSIDE has a name and a purpose, so a theme can change the whole program, or just one thing, and can be shared as a small file.

The built-in themes

View → Theme switches between Dark, Light, Solarized Light and Solarized Dark, plus any of yours.

VCSIDE with the Light theme
Light.
VCSIDE with the Solarized Light theme and shaded indentation levels
Solarized Light, with a shade per indentation level.
The graphics editor with the Solarized Dark theme
Solarized Dark, on the graphics editor.
VCSIDE with the Dark theme
Dark, the default.

The colours of the 2600 itself, in the graphics editor's palette, never change with the theme.

Roles

Each colour is a role with a name, in groups:

GroupWhat it colours
ui.*The interface: background, panels, text, buttons, borders, the accent colour...
editor.*The code editor: background, current line, selection, line numbers, cycle column, indentation guides...
syntax.*Instructions, illegal opcodes, directives, registers, labels, numbers, strings, comments...
messages.*Errors, warnings and notes.
space.*The bars of the space report.
graphics.*The graphics editor's grid, frames and hatching.
dialog.*Dialogs: the title band with its three stripes, the border, the main button and the others.
files.*The project tree: rows, guides and a colour for each type of file.

The rest of the interface's colours are worked out from the ui.* roles, and a theme can still set any one of them by name.

Editing themes

View → Theme → Edit themes... opens a window with all the themes, the palette, the roles in their groups with a search box, the indentation levels and any problems. Changes show at once and are saved by themselves in your themes folder.

The Themes window with the built-in themes, the palette and the groups of roles
The Themes window, on the Dark theme's palette.

The built-in themes can't be changed. New, based on this one makes an empty theme that follows it, and Duplicate makes a full copy. Both ask for the new theme's name first.

The theme file

A theme is a .vcstheme file, in JSON. This is the whole of Solarized Dark:

{
  "vcstheme": 1,
  "name": "Solarized Dark",
  "base": "solarized-light",
  "palette": {
    "bg": "$base03",
    "bgHi": "$base02",
    "fg": "$base0",
    "fgEm": "$base1",
    "dim": "$base01"
  },
  "colours": {
    "ui.modalDim": "#00000060"
  },
  "indent": [ "$yellow/12", "$green/12", "$red/10", "$blue/10" ]
}
base
The theme it takes everything else from. A theme based on another keeps only its differences, and follows the changes in its base.
palette
Named colours.
colours
The roles.
indent
A colour for each indentation level in the editor. An empty list means no shading.
imgui
Any single colour of the interface, by its name.

A colour can be written as:

References are resolved after the bases are merged, so changing one palette entry, or ui.accent, changes everything that refers to it. That's how Solarized Dark above is Solarized Light with five entries swapped. A problem, such as a role without a colour, a reference that doesn't exist or a loop, shows in magenta and is listed in the Themes window.

Sharing

Share... exports a theme to a file or copies it as text; importing reads a file or pastes a theme. An exported theme carries its bases inside, except the built-in ones, so whoever imports it only needs VCSIDE. Importing never overwrites a theme: if the name is taken, the new one gets another.

Languages

The interface is in English and Spanish; choose it in the Language menu (in the application menu on macOS, in Settings elsewhere). A language is one file in data/i18n/, keyed by the English text. A file can be partial: anything missing appears in English. Adding a language is adding a file, and a script in the source lists what each one still lacks.