turbo-golo
A Turbo C-style editor for Golo, written in Go.
Built on turbo-core, the library every Turbo editor shares. What is in this repository is the command, the profile that says this editor is for Golo, and the Golo scanner — about a thousand lines, comments and all. Everything else lives in the library.
A full-screen terminal IDE with the Borland furniture — a menu bar with hot keys, movable windows that cast shadows, modal dialogs, a clickable status bar — and the things a Golo editor needs: syntax colouring written against GoloScript's own lexer, loadable colour themes, completion and diagnostics from golo lsp, shell windows, per-project settings, a project tree, snippets, and the GoloScript toolchain a menu away.
File Edit Search Run Code Options Window Snippets Golo Help
╔═[x]═════════════════════════════ hello.golo ══════════════════════════════1═[■]╗
║ 1 module hello.World ▲║
║ 2 ▓║
║ 3 # Greet someone several times ░║
║ 4 struct Greeting = { name, times } ░║
║ 5 ░║
║ 6 function greet = |g| { ░║
║ 7 foreach i in range(1, g: times() + 1) { ░║
║ 8 println("Hello, " + g: name() + "! (" + i + ")") ░║
║ 9 } ▼║
║◄▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░►║
╚════════════════════════════════════════════════════════════════════════════════╝
F1 Describe F2 Save F3 Open F6 Window F7 Next F10 Menu 1:1 LSP: ready
Getting started
make install
That builds the editor, puts it where your shell looks for commands, and reports what it found — the Go version it built with, where the binary went, whether that directory is on your PATH, and whether golo is installed. Then, from any directory of Golo scripts:
turbo-golo main.golo
To build without installing, make build leaves the binary in bin/turbo-golo. From the module proxy instead of a checkout: go install rickub.com/turbo-editors/turbo-golo@latest.
For completion and diagnostics, install GoloScript as well — the editor works without it, and says so on the status bar. The language server is the interpreter itself, in golo lsp mode, so there is nothing separate to install: a machine that can run Golo can complete Golo. Precompiled binaries are on the release page; the install guide covers them, building from source, and how to check the editor really found it.
The tutorial walks through a first session in about ten minutes, and demos/ holds three Golo programs to open in it — a small one, one with tests, and a tour of every construct the scanner colours.
Features
- Every build knows what it is —
turbo-golo -versionand Help ▸ About name the version, the commit and the build date, stamped in by the linker fromgit describerather than read from a constant somebody forgot to bump - Turbo Vision interface — menu bar with
Alt-letter hot keys, overlapping movable and resizable windows, modal dialogs, mouse support throughout - Syntax colouring for nine languages — Golo by a hand-written scanner that follows GoloScript's lexer:
#and----comments, strings carried to their closing quote wherever it is,"""multi-line strings, character literals, theLandFsuffixes, the rule that keeps1..3an integer and a range, and names made of any Unicode letter or emoji. Plus TOML, YAML, Markdown, JavaScript, HTML, XML, Dockerfiles and shell scripts from turbo-core - Types by convention — a capitalised name is a struct, a union or a variant, because that is how Golo writes them;
Some,None,OkandErrare types here and not constants, because in Golo they are variants of ordinary unions fromgololang.Errors - Themes in TOML, eleven embedded — Borland navy, dark grey, paper white, espresso, Catppuccin Frappé and Latte, cobalt, Darcula and IntelliJ Light, and a hueless monochrome in both polarities — and any number of your own, with inheritance between files and between style keys. Every shipped theme is held to its contrast by tests
- Per-project settings in
.turbo-golo/settings.toml— pin a theme, turn on automatic saving — created from a menu item, never by itself, and re-read on every save so a change takes effect without a restart - Completion, hover, go-to-definition, references, symbols and diagnostics from
golo lsp, entirely optional. The server is the interpreter, looked for onPATHand in/usr/local/bin, where GoloScript's installer puts it. It does not answer type definitions, and the editor says so rather than pretending - Terminal windows —
F8opens a real shell in a window, with its own VT/ANSI emulator, scrollback and job control (Linux, macOS and Windows) - Project tree —
F9shows the project's files in a window; walk it with the arrows and press Enter to open one - Snippets — a
Snippetsmenu built from.turbo-golo/snippets.toml, grouped into submenus and filtered by the file you are in; the chosen text is inserted at the cursor and re-indented to match - The GoloScript toolchain a menu away —
Alt-Gruns the script, the tests, the debugger, the REPL,golo new,gogolo buildandwagolo buildfrom.turbo-golo/tools.toml, each showing its output where the tool asked: a popup that fills in as it goes, a terminal window, or an editing window to search. Golo has no manifest, so six of the eight commands ask which file they are for before they run — and a tool naming amenuof its own gets that menu on the bar - Editing with word movement, block indent, a shared clipboard, and undo that merges a run of typing into one step
- Faithful files — line endings and the trailing newline are preserved, and saving is atomic
- Automatic saving, off by default, writing a short while after you stop typing
Commands
| Command | What it does |
|---|---|
make install |
Build and install onto your PATH |
make build |
Compile into bin/turbo-golo |
make test |
Run the whole test suite |
make check |
fmt, vet, then the tests — what a commit should pass |
make run FILE=x.golo |
Build and start the editor on a file |
make help |
List every target |
turbo-golo [-theme name] [-no-lsp] [file...]
turbo-golo -list-themes
Documentation
Full documentation in English and French, organised by the Diátaxis method:
| Tutorial | Your first Golo program in Turbo Golo |
| How-to | install the editor · install GoloScript · run the tests · enable completion · write a theme · move around a file · ask about code · use a terminal · configure a project · browse a project · use snippets · run Golo commands · make a release |
| Reference | command line · keyboard · menus · theme format · terminal windows · project settings · project tree · languages · snippets · Golo tools · the version number |
| Explanation | architecture · design decisions · colouring and completion · terminal windows · project settings · project tree · snippets · Golo tools |
The library's packages each carry their own README.md beside the code, in turbo-core.
Where the code is
main.go |
flags, the terminal, the wiring |
internal/gololang |
the profile, the Golo scanner, the three starter files |
demos/ |
three Golo programs to open in the editor; each runs under golo |
| everything else | turbo-core |
The dependency graph is drawn in docs/diagrams/packages.drawio, checked against go list by diagram_test.go.
Design in one line
Two dependencies — tcell/v2 and BurntSushi/toml — and everything else from the standard library, including the scanner toolkit and the Language Server Protocol client. Both come through turbo-core; this repository adds none of its own. The design decisions page explains why.
Requirements
Go 1.26 or later to build it — the editor is written in Go even though it is an editor for Golo. A terminal with mouse reporting, which is all of them. GoloScript is optional, and is what completion, the error marks and the Golo menu's commands need.
Licence
See LICENSE.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
|