turbo-editors/turbo-jspublic Fork 0
v1.0.2
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-js.git
git clone ssh://git@rickub.com/turbo-editors/turbo-js.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

📦 Turbo JS 91999d1 · on v1.0.2 · k33g · 10h ago
menus.md · 162 lines · 9.4 KBmarkdown
Blame HistoryOpen raw

Reference: menus

Complete list of the menu bar's entries, with their shortcuts and the conditions under which they can be chosen.

An item marked needs a file is greyed out when no window is open.

The bar always holds File, Edit, Search, Run, Code, Options, Window, Snippets, Agent, JavaScript and Help, in that order:

 File  Edit  Search  Run  Code  Options  Window  Snippets  Agent  JavaScript  Help

A project's tools file can add menus of its own between JavaScript and Help; they are listed under Project menus below.

File

Item Shortcut Needs a file Effect
New F4 Open an empty untitled window
Open… F3 Open the file browser and open what is chosen
Save F2 yes Write the file; asks for a name if it has none
Save as… yes Ask for a name and write to it, adopting that path
Close Ctrl-W yes Close the current window, offering to save first
Exit Alt-X Leave the editor, offering to save each modified file

Edit

Item Shortcut Needs a file Effect
Undo Ctrl-Z yes Revert the last change
Redo Ctrl-R yes Re-apply the last undone change. Ctrl-Y used to do this; it deletes a line now, as it did in Turbo C.
Insert line Ctrl-N yes Open a blank line above the cursor, leaving the cursor on its own text
Delete line Ctrl-Y yes Remove the line the cursor is on. The cursor stays on the same line number, so holding the key deletes a run.
Cut Shift-Del yes Copy the selection to the clipboard and remove it
Copy Ctrl-Ins yes Copy the selection to the clipboard
Paste Shift-Ins yes Insert the clipboard, replacing the selection
Select all Ctrl-A yes Select the whole file

The clipboard is shared between every window of one editor session.

Item Shortcut Needs a file Effect
Find… Ctrl-F yes Ask for text and options, then jump to the first match
Find next F7 yes Jump to the next match, wrapping round the end of the file
Find previous Shift-F7 yes Jump to the previous match, wrapping round the start
Go to line… Ctrl-G yes Ask for a line number, counting from one

Run

Item Shortcut Needs a file Effect
Completion Ctrl-Space yes Open the completion list at the cursor
Language server status Show whether a language server is running, and what it is doing

Code

Everything the editor asks the language server about the symbol under the cursor. Nothing here needs a selection: almost every request in the protocol takes a position rather than a range, so there is nothing extra to say by selecting first.

Its hot key is Alt-C.

The menu is the same in every editor of the family; the last column says what typescript-language-server — TypeScript's own language service, tsserver, speaking the protocol — makes of each item. For plain JavaScript it answers every one of them.

Item Shortcut Needs a file Effect With typescript-language-server
Describe symbol F1 yes Show what the language server knows about the symbol under the cursor Answered: the signature of a builtin or an imported symbol; the JSDoc comment above a declaration of your own
Go to definition F12 yes Where the symbol is declared. One answer opens it; several offer the list. Answered
Go to type definition yes Where the type of the symbol is declared, which is a different question Answered: const shape = new Circle() leads to class Circle
Find implementations… yes What implements it Answered: the subclasses of a class
Find references… Shift-F12 yes Where it is used, counting its declaration Answered: the declaration and every call
Symbol in file… yes The file's own outline, indented, with each symbol's kind. Choosing one goes to it. Answered: functions and classes
Symbol in project… Ctrl-T no Ask for a name and search the whole project Answered
Problems… no Every problem the server has reported, for every file it has spoken about Syntax errors, which arrive unasked. A type error is reported only with // @ts-check at the top of the file or checkJs in a jsconfig.json

A list of places shows the file, the line, and the text of that line — twelve entries reading shapes.js:42 say nothing about which one you want. The text comes from an open window when there is one, so a file edited and not saved is listed as it now reads.

Three answers are told apart, and the difference matters: nothing found says so in the question's own words (No references found), the server is not ready shows what it is doing instead, and one answer simply takes you there without a dialog.

Symbol in file has no shortcut on purpose. The obvious one is Ctrl-Shift-O, and a terminal cannot tell that from Ctrl-O — the shift is lost before the editor sees it.

Options

Item Needs a file Effect
Theme… List every loadable theme and apply the one chosen, immediately. With a project settings file present, also writes the choice into it.
Line numbers yes Show or hide the gutter in the current window
Create project settings Write .turbo-js/settings.toml with the theme in use, and open it. Greyed out once the project has one.
Project settings… Open .turbo-js/settings.toml. Greyed out until the project has one.

Window

Item Shortcut Needs a file Effect
Next F6 yes Bring the window behind the current one forward
New terminal F8 no Open a window running a shell, in the directory of the file in front
Project tree F9 no Open a window showing the project's files; brings the existing one forward when there is one
Tile yes Lay every window out in a grid, none overlapping
Cascade yes Stack the windows offset, every title visible
Maximise yes Give the current window the whole desktop, or put it back where it was if it already has it. The same toggle as the [■] box on the window's own frame.
List… Alt-0 yes List the open windows and bring the chosen one forward

Snippets

Built from .turbo-js/snippets.toml and your own snippets file each time it opens. Its hot key is Alt-N, because Search already answers to S.

Item Needs a file Effect
One submenu per group Insert the chosen snippet at the cursor; the items need a file open
Create snippets file no Write .turbo-js/snippets.toml with worked examples — seven JavaScript constructs, a JSON one, a general one and a Markdown one — then open it. Greyed out once the project has one.
Open snippets file no Open .turbo-js/snippets.toml. Greyed out until the project has one. Always the project's file, never your own.

See Snippets.

Agent

Built from .turbo-js/acp.toml and your own agents file. Its hot key is Alt-A. Its items are listed in Agents and ACP.

JavaScript

Built from .turbo-js/tools.toml each time it opens. Its hot key is Alt-J.

Item Effect
One line per tool that names no menu Run that command, showing its output where the tool asked: a popup, a terminal window, or an editing window
Create tools file Write .turbo-js/tools.toml with the starter commands — Install, Format, Lint, Test, Run and Start in this menu, and an Echo in a menu called Tools — then open it. Greyed out once the project has one.
Open tools file Open .turbo-js/tools.toml. Greyed out until the project has one.

See JavaScript tools.

Project menus

Not fixed: one menu per menu name in .turbo-js/tools.toml, in the order the names first appear there, between JavaScript and Help. A project with no tools file, or whose tools all stay in JavaScript, has none; the starter tools file makes one, called Tools.

Item Effect
One line per tool naming that menu Run that command, showing its output where the tool asked

Their hot keys are assigned rather than fixed, so that a name from a file can never take a letter one of the menus above already answers to. The rules are in JavaScript tools.

Help

Item Effect
Keyboard Show the keys worth knowing
About Show the version, the commit and build date when the build recorded them, and the current theme. See the version number.

Status bar

The hints along the bottom are clickable and run the same actions.

Hint Action
F1 Describe Code ▸ Describe symbol
F2 Save File ▸ Save
F3 Open File ▸ Open…
F6 Window Window ▸ Next
F7 Next Search ▸ Find next
F10 Menu Open the menu bar
Alt-X Exit File ▸ Exit

The right-hand end shows, in this order: the cursor as line:column, then either the first error the language server reported for this file (prefixed ) or the language server's state — LSP: starting…, LSP: ready, LSP: off, or LSP: no typescript-language-server — npm install -g typescript-language-server typescript@6 when the server cannot be found.

  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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# Reference: menus

> Complete list of the menu bar's entries, with their shortcuts and the conditions under which they can be chosen.

An item marked **needs a file** is greyed out when no window is open.

The bar always holds File, Edit, Search, Run, Code, Options, Window, Snippets, Agent, JavaScript and Help, in that order:

```
 File  Edit  Search  Run  Code  Options  Window  Snippets  Agent  JavaScript  Help
```

A project's tools file can add menus of its own between JavaScript and Help; they are listed under [Project menus](#project-menus) below.

## File

| Item | Shortcut | Needs a file | Effect |
| --- | --- | --- | --- |
| New | `F4` | | Open an empty untitled window |
| Open… | `F3` | | Open the file browser and open what is chosen |
| Save | `F2` | yes | Write the file; asks for a name if it has none |
| Save as… | | yes | Ask for a name and write to it, adopting that path |
| Close | `Ctrl-W` | yes | Close the current window, offering to save first |
| Exit | `Alt-X` | | Leave the editor, offering to save each modified file |

## Edit

| Item | Shortcut | Needs a file | Effect |
| --- | --- | --- | --- |
| Undo | `Ctrl-Z` | yes | Revert the last change |
| Redo | `Ctrl-R` | yes | Re-apply the last undone change. **`Ctrl-Y` used to do this**; it deletes a line now, as it did in Turbo C. |
| Insert line | `Ctrl-N` | yes | Open a blank line above the cursor, leaving the cursor on its own text |
| Delete line | `Ctrl-Y` | yes | Remove the line the cursor is on. The cursor stays on the same line number, so holding the key deletes a run. |
| Cut | `Shift-Del` | yes | Copy the selection to the clipboard and remove it |
| Copy | `Ctrl-Ins` | yes | Copy the selection to the clipboard |
| Paste | `Shift-Ins` | yes | Insert the clipboard, replacing the selection |
| Select all | `Ctrl-A` | yes | Select the whole file |

The clipboard is shared between every window of one editor session.

## Search

| Item | Shortcut | Needs a file | Effect |
| --- | --- | --- | --- |
| Find… | `Ctrl-F` | yes | Ask for text and options, then jump to the first match |
| Find next | `F7` | yes | Jump to the next match, wrapping round the end of the file |
| Find previous | `Shift-F7` | yes | Jump to the previous match, wrapping round the start |
| Go to line… | `Ctrl-G` | yes | Ask for a line number, counting from one |

## Run

| Item | Shortcut | Needs a file | Effect |
| --- | --- | --- | --- |
| Completion | `Ctrl-Space` | yes | Open the completion list at the cursor |
| Language server status | | | Show whether a language server is running, and what it is doing |

## Code

Everything the editor asks the language server about the symbol **under the cursor**. Nothing here needs a selection: almost every request in the protocol takes a position rather than a range, so there is nothing extra to say by selecting first.

Its hot key is `Alt-C`.

The menu is the same in every editor of the family; the last column says what `typescript-language-server` — TypeScript's own language service, tsserver, speaking the protocol — makes of each item. For plain JavaScript it answers every one of them.

| Item | Shortcut | Needs a file | Effect | With `typescript-language-server` |
| --- | --- | --- | --- | --- |
| Describe symbol | `F1` | yes | Show what the language server knows about the symbol under the cursor | Answered: the signature of a builtin or an imported symbol; the JSDoc comment above a declaration of your own |
| Go to definition | `F12` | yes | Where the symbol is declared. One answer opens it; several offer the list. | Answered |
| Go to type definition | | yes | Where the *type* of the symbol is declared, which is a different question | Answered: `const shape = new Circle()` leads to `class Circle` |
| Find implementations… | | yes | What implements it | Answered: the subclasses of a class |
| Find references… | `Shift-F12` | yes | Where it is used, counting its declaration | Answered: the declaration and every call |
| Symbol in file… | | yes | The file's own outline, indented, with each symbol's kind. Choosing one goes to it. | Answered: functions and classes |
| Symbol in project… | `Ctrl-T` | no | Ask for a name and search the whole project | Answered |
| Problems… | | no | Every problem the server has reported, for every file it has spoken about | Syntax errors, which arrive unasked. A type error is reported only with `// @ts-check` at the top of the file or `checkJs` in a `jsconfig.json` |

A list of places shows the file, the line, and the text of that line — twelve entries reading `shapes.js:42` say nothing about which one you want. The text comes from an open window when there is one, so a file edited and not saved is listed as it now reads.

Three answers are told apart, and the difference matters: **nothing found** says so in the question's own words (`No references found`), **the server is not ready** shows what it is doing instead, and **one answer** simply takes you there without a dialog.

*Symbol in file* has no shortcut on purpose. The obvious one is `Ctrl-Shift-O`, and a terminal cannot tell that from `Ctrl-O` — the shift is lost before the editor sees it.

## Options

| Item | Needs a file | Effect |
| --- | --- | --- |
| Theme… | | List every loadable theme and apply the one chosen, immediately. With a project settings file present, also writes the choice into it. |
| Line numbers | yes | Show or hide the gutter in the current window |
| Create project settings | | Write `.turbo-js/settings.toml` with the theme in use, and open it. **Greyed out once the project has one.** |
| Project settings… | | Open `.turbo-js/settings.toml`. **Greyed out until the project has one.** |

## Window

| Item | Shortcut | Needs a file | Effect |
| --- | --- | --- | --- |
| Next | `F6` | yes | Bring the window behind the current one forward |
| New terminal | `F8` | no | Open a window running a shell, in the directory of the file in front |
| Project tree | `F9` | no | Open a window showing the project's files; brings the existing one forward when there is one |
| Tile | | yes | Lay every window out in a grid, none overlapping |
| Cascade | | yes | Stack the windows offset, every title visible |
| Maximise | | yes | Give the current window the whole desktop, or put it back where it was if it already has it. The same toggle as the `[■]` box on the window's own frame. |
| List… | `Alt-0` | yes | List the open windows and bring the chosen one forward |

## Snippets

Built from `.turbo-js/snippets.toml` and your own snippets file each time it opens. Its hot key is `Alt-N`, because Search already answers to S.

| Item | Needs a file | Effect |
| --- | --- | --- |
| One submenu per group | | Insert the chosen snippet at the cursor; the items need a file open |
| Create snippets file | no | Write `.turbo-js/snippets.toml` with worked examples — seven JavaScript constructs, a JSON one, a general one and a Markdown one — then open it. **Greyed out once the project has one.** |
| Open snippets file | no | Open `.turbo-js/snippets.toml`. **Greyed out until the project has one.** Always the project's file, never your own. |

See [Snippets](snippets.md).

## Agent

Built from `.turbo-js/acp.toml` and your own agents file. Its hot key is `Alt-A`. Its items are listed in [Agents and ACP](acp.md#the-agent-menu).

## JavaScript

Built from `.turbo-js/tools.toml` each time it opens. Its hot key is `Alt-J`.

| Item | Effect |
| --- | --- |
| One line per tool that names no `menu` | Run that command, showing its output where the tool asked: a popup, a terminal window, or an editing window |
| Create tools file | Write `.turbo-js/tools.toml` with the starter commands — Install, Format, Lint, Test, Run and Start in this menu, and an Echo in a menu called Tools — then open it. **Greyed out once the project has one.** |
| Open tools file | Open `.turbo-js/tools.toml`. **Greyed out until the project has one.** |

See [JavaScript tools](javascript-tools.md).

## Project menus

Not fixed: one menu per `menu` name in `.turbo-js/tools.toml`, in the order the names first appear there, between JavaScript and Help. A project with no tools file, or whose tools all stay in JavaScript, has none; the starter tools file makes one, called **Tools**.

| Item | Effect |
| --- | --- |
| One line per tool naming that menu | Run that command, showing its output where the tool asked |

Their hot keys are assigned rather than fixed, so that a name from a file can never take a letter one of the menus above already answers to. The rules are in [JavaScript tools](javascript-tools.md#hot-keys).

## Help

| Item | Effect |
| --- | --- |
| Keyboard | Show the keys worth knowing |
| About | Show the version, the commit and build date when the build recorded them, and the current theme. See [the version number](versioning.md). |

## Status bar

The hints along the bottom are clickable and run the same actions.

| Hint | Action |
| --- | --- |
| `F1 Describe` | Code ▸ Describe symbol |
| `F2 Save` | File ▸ Save |
| `F3 Open` | File ▸ Open… |
| `F6 Window` | Window ▸ Next |
| `F7 Next` | Search ▸ Find next |
| `F10 Menu` | Open the menu bar |
| `Alt-X Exit` | File ▸ Exit |

The right-hand end shows, in this order: the cursor as `line:column`, then either the first error the language server reported for this file (prefixed `⚠`) or the language server's state — `LSP: starting…`, `LSP: ready`, `LSP: off`, or `LSP: no typescript-language-server — npm install -g typescript-language-server typescript@6` when the server cannot be found.