turbo-editors/turbo-jspublic Fork 0
v1.0.0
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.

menus.md · 162 lines · 9.4 KBmarkdown Blame HistoryRaw
📦 Turbo JS 91999d1 k33g 11h ago1# Reference: menus
2
3> Complete list of the menu bar's entries, with their shortcuts and the conditions under which they can be chosen.
4
5An item marked **needs a file** is greyed out when no window is open.
6
7The bar always holds File, Edit, Search, Run, Code, Options, Window, Snippets, Agent, JavaScript and Help, in that order:
8
9```
10 File Edit Search Run Code Options Window Snippets Agent JavaScript Help
11```
12
13A project's tools file can add menus of its own between JavaScript and Help; they are listed under [Project menus](#project-menus) below.
14
15## File
16
17| Item | Shortcut | Needs a file | Effect |
18| --- | --- | --- | --- |
19| New | `F4` | | Open an empty untitled window |
20| Open… | `F3` | | Open the file browser and open what is chosen |
21| Save | `F2` | yes | Write the file; asks for a name if it has none |
22| Save as… | | yes | Ask for a name and write to it, adopting that path |
23| Close | `Ctrl-W` | yes | Close the current window, offering to save first |
24| Exit | `Alt-X` | | Leave the editor, offering to save each modified file |
25
26## Edit
27
28| Item | Shortcut | Needs a file | Effect |
29| --- | --- | --- | --- |
30| Undo | `Ctrl-Z` | yes | Revert the last change |
31| 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. |
32| Insert line | `Ctrl-N` | yes | Open a blank line above the cursor, leaving the cursor on its own text |
33| 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. |
34| Cut | `Shift-Del` | yes | Copy the selection to the clipboard and remove it |
35| Copy | `Ctrl-Ins` | yes | Copy the selection to the clipboard |
36| Paste | `Shift-Ins` | yes | Insert the clipboard, replacing the selection |
37| Select all | `Ctrl-A` | yes | Select the whole file |
38
39The clipboard is shared between every window of one editor session.
40
41## Search
42
43| Item | Shortcut | Needs a file | Effect |
44| --- | --- | --- | --- |
45| Find… | `Ctrl-F` | yes | Ask for text and options, then jump to the first match |
46| Find next | `F7` | yes | Jump to the next match, wrapping round the end of the file |
47| Find previous | `Shift-F7` | yes | Jump to the previous match, wrapping round the start |
48| Go to line… | `Ctrl-G` | yes | Ask for a line number, counting from one |
49
50## Run
51
52| Item | Shortcut | Needs a file | Effect |
53| --- | --- | --- | --- |
54| Completion | `Ctrl-Space` | yes | Open the completion list at the cursor |
55| Language server status | | | Show whether a language server is running, and what it is doing |
56
57## Code
58
59Everything 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.
60
61Its hot key is `Alt-C`.
62
63The 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.
64
65| Item | Shortcut | Needs a file | Effect | With `typescript-language-server` |
66| --- | --- | --- | --- | --- |
67| 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 |
68| Go to definition | `F12` | yes | Where the symbol is declared. One answer opens it; several offer the list. | Answered |
69| 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` |
70| Find implementations… | | yes | What implements it | Answered: the subclasses of a class |
71| Find references… | `Shift-F12` | yes | Where it is used, counting its declaration | Answered: the declaration and every call |
72| Symbol in file… | | yes | The file's own outline, indented, with each symbol's kind. Choosing one goes to it. | Answered: functions and classes |
73| Symbol in project… | `Ctrl-T` | no | Ask for a name and search the whole project | Answered |
74| 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` |
75
76A 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.
77
78Three 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.
79
80*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.
81
82## Options
83
84| Item | Needs a file | Effect |
85| --- | --- | --- |
86| Theme… | | List every loadable theme and apply the one chosen, immediately. With a project settings file present, also writes the choice into it. |
87| Line numbers | yes | Show or hide the gutter in the current window |
88| Create project settings | | Write `.turbo-js/settings.toml` with the theme in use, and open it. **Greyed out once the project has one.** |
89| Project settings… | | Open `.turbo-js/settings.toml`. **Greyed out until the project has one.** |
90
91## Window
92
93| Item | Shortcut | Needs a file | Effect |
94| --- | --- | --- | --- |
95| Next | `F6` | yes | Bring the window behind the current one forward |
96| New terminal | `F8` | no | Open a window running a shell, in the directory of the file in front |
97| Project tree | `F9` | no | Open a window showing the project's files; brings the existing one forward when there is one |
98| Tile | | yes | Lay every window out in a grid, none overlapping |
99| Cascade | | yes | Stack the windows offset, every title visible |
100| 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. |
101| List… | `Alt-0` | yes | List the open windows and bring the chosen one forward |
102
103## Snippets
104
105Built 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.
106
107| Item | Needs a file | Effect |
108| --- | --- | --- |
109| One submenu per group | | Insert the chosen snippet at the cursor; the items need a file open |
110| 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.** |
111| Open snippets file | no | Open `.turbo-js/snippets.toml`. **Greyed out until the project has one.** Always the project's file, never your own. |
112
113See [Snippets](snippets.md).
114
115## Agent
116
117Built 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).
118
119## JavaScript
120
121Built from `.turbo-js/tools.toml` each time it opens. Its hot key is `Alt-J`.
122
123| Item | Effect |
124| --- | --- |
125| 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 |
126| 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.** |
127| Open tools file | Open `.turbo-js/tools.toml`. **Greyed out until the project has one.** |
128
129See [JavaScript tools](javascript-tools.md).
130
131## Project menus
132
133Not 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**.
134
135| Item | Effect |
136| --- | --- |
137| One line per tool naming that menu | Run that command, showing its output where the tool asked |
138
139Their 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).
140
141## Help
142
143| Item | Effect |
144| --- | --- |
145| Keyboard | Show the keys worth knowing |
146| About | Show the version, the commit and build date when the build recorded them, and the current theme. See [the version number](versioning.md). |
147
148## Status bar
149
150The hints along the bottom are clickable and run the same actions.
151
152| Hint | Action |
153| --- | --- |
154| `F1 Describe` | Code ▸ Describe symbol |
155| `F2 Save` | File ▸ Save |
156| `F3 Open` | File ▸ Open… |
157| `F6 Window` | Window ▸ Next |
158| `F7 Next` | Search ▸ Find next |
159| `F10 Menu` | Open the menu bar |
160| `Alt-X Exit` | File ▸ Exit |
161
162The 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.