Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
- 2026-08-30: Overhauled the user documentation with generated and grouped action, modifier, and scope reference pages, richer descriptions and examples, dedicated paired-delimiter and target guides, and a streamlined landing page. ([#3303](https://github.com/cursorless-dev/cursorless/pull/3303); [#3304](https://github.com/cursorless-dev/cursorless/pull/3304); [#3305](https://github.com/cursorless-dev/cursorless/pull/3305); [#3306](https://github.com/cursorless-dev/cursorless/pull/3306); [#3307](https://github.com/cursorless-dev/cursorless/pull/3307); [#3308](https://github.com/cursorless-dev/cursorless/pull/3308); [#3309](https://github.com/cursorless-dev/cursorless/pull/3309); [#3310](https://github.com/cursorless-dev/cursorless/pull/3310); [#3311](https://github.com/cursorless-dev/cursorless/pull/3311); [#3312](https://github.com/cursorless-dev/cursorless/pull/3312); [#3313](https://github.com/cursorless-dev/cursorless/pull/3313); [#3314](https://github.com/cursorless-dev/cursorless/pull/3314); [#3315](https://github.com/cursorless-dev/cursorless/pull/3315); [#3316](https://github.com/cursorless-dev/cursorless/pull/3316))
- 2026-05-03: Add support for if and for statements in Talon-script. [`#3274`](https://github.com/cursorless-dev/cursorless/pull/3274)
- 2026-03-12: Added `userColor3` and `userColor4` as additional user-configurable hat colors. They are disabled by default until you enable and name them. ([#3206](https://github.com/cursorless-dev/cursorless/pull/3206))
- 2026-03-11: Moved scope tests out of VSCode so they can run as regular unit tests with faster local and CI feedback. ([#3210](https://github.com/cursorless-dev/cursorless/pull/3210))
- 2026-03-11: Moved scope tests out of VS Code so they can run as regular unit tests with faster local and CI feedback. ([#3210](https://github.com/cursorless-dev/cursorless/pull/3210))
- 2026-03-11: Git actions can now stage and unstage entire files, not just partial selections. ([#3209](https://github.com/cursorless-dev/cursorless/pull/3209))
- 2026-03-01: Greatly expanded scope fixtures and supported scope facets across many languages, including C, C++, C#, Dart, Go, Java, Kotlin, PHP, Rust, Scala, and TypeScript. This work added missing coverage for type aliases, interface methods, enum arguments and argument lists, lambda returns, resources, and more. ([#3198](https://github.com/cursorless-dev/cursorless/pull/3198))
- 2026-02-28: Added missing scope facets for Clojure and Dart, continuing the 2026 scope-coverage expansion. ([#3197](https://github.com/cursorless-dev/cursorless/pull/3197); [#3196](https://github.com/cursorless-dev/cursorless/pull/3196))
Expand Down Expand Up @@ -48,7 +48,7 @@
- 2024-08-12: Updated `drop`, `float`, and `puff` so they behave like `drink` and `pour` for non-line targets, including inserting spaces or delimiters as needed. ([#2646](https://github.com/cursorless-dev/cursorless/pull/2646))
- 2024-08-11: Updated `head` and `tail` so that inside a surrounding pair they expand only to the pair interior instead of the whole line. Use `"head line"` or `"tail line"` for the old behavior. ([#2652](https://github.com/cursorless-dev/cursorless/pull/2652))
- 2024-08-11: Updated `join token` so `"join two tokens air"` removes the whitespace between the tokens instead of joining their lines. ([#2651](https://github.com/cursorless-dev/cursorless/pull/2651))
- 2024-06-14: Added `user.cursorless_create_destination` to the public API. See the [Talon-side API docs](https://www.cursorless.org/docs/user/customization#public-talon-actions) for details. ([#2402](https://github.com/cursorless-dev/cursorless/pull/2402))
- 2024-06-14: Added `user.cursorless_create_destination` to the public API. See the [Talon-side API docs](https://www.cursorless.org/docs/user/public-talon-api#public-talon-actions) for details. ([#2402](https://github.com/cursorless-dev/cursorless/pull/2402))
- 2024-05-25: Added the public `user.cursorless_reformat` action to the Cursorless API. Example: `user.cursorless_reformat(cursorless_target, "ALL_CAPS")`. ([#2358](https://github.com/cursorless-dev/cursorless/pull/2358))
- 2024-04-21: Added support for using community snippets for wrapping and Cursorless insertion instead of snippets defined in Cursorless. ([#1998](https://github.com/cursorless-dev/cursorless/pull/1998))
- 2024-03-25: Added the `every` / spread ordinal and relative modifier, which turns ordinal and relative range modifiers into multiple target selections instead of a contiguous range. ([#2254](https://github.com/cursorless-dev/cursorless/pull/2254))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Command server

This directory contains a minified version of a `command-server`, which enables us to communicate with node from Talon. It is based on [command-server we use for VSCode](https://github.com/pokey/command-server/), but modified to run in a Neovim node subprocess. It can be built by following the instructions from https://github.com/hands-free-vim/command-server/tree/neovim#build
This directory contains a minified version of a `command-server`, which enables us to communicate with node from Talon. It is based on [command-server we use for VS Code](https://github.com/pokey/command-server/), but modified to run in a Neovim node subprocess. It can be built by following the instructions from https://github.com/hands-free-vim/command-server/tree/neovim#build
19 changes: 16 additions & 3 deletions packages/app-web-docs/sidebarItemsGenerator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ const items: (Group | string)[] = [
"Cursorless",
{
label: "Getting started",
items: ["Installation", "Learning resources", "How-to guides"],
items: [
"Installation",
"Recommendations",
"Learning resources",
"How-to guides",
"Troubleshooting",
],
},
{
label: "Reference",
Expand All @@ -29,7 +35,14 @@ const items: (Group | string)[] = [
"Supported languages",
{
label: "Customization",
items: ["Customization", "Hat assignment", "Visual Accessibility"],
items: [
"Customization",
"Hat assignment",
"Visual Accessibility",
"Custom IDE actions",
"Custom regex scopes",
"Public Talon API",
],
},
{
label: "Tools",
Expand All @@ -42,7 +55,7 @@ const items: (Group | string)[] = [
},
{
label: "Advanced",
items: ["Unicode support", "Experimental features"],
items: ["Talon dependencies", "Unicode support", "Experimental features"],
},
{
label: "Project",
Expand Down
34 changes: 17 additions & 17 deletions packages/app-web-docs/src/docs/contributing/CONTRIBUTING.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import TabItem from "@theme/TabItem";

# Contributing

Welcome! So glad you've decided to help make Cursorless better. You'll want to start by getting [set up](#initial-setup) and learning how to [run / test a local copy of the extension](#running--testing-extension-locally). You may also find the [VSCode API docs](https://code.visualstudio.com/api) helpful to learn about VSCode extension development.
Welcome! So glad you've decided to help make Cursorless better. You'll want to start by getting [set up](#initial-setup) and learning how to [run / test a local copy of the extension](#running--testing-extension-locally). You may also find the [VS Code API docs](https://code.visualstudio.com/api) helpful to learn about VS Code extension development.

## Initial setup

Expand All @@ -12,13 +12,13 @@ Welcome! So glad you've decided to help make Cursorless better. You'll want to s
- [Git](https://git-scm.com/)
- [Node.js](https://nodejs.org/en/)
- [Corepack](https://nodejs.org/api/corepack.html) or [pnpm](https://pnpm.io/installation)
- [VSCode](https://code.visualstudio.com/) or [VSCodium](https://vscodium.com/)
Both VSCode and VSCodium will be referred to as VSCode except when instructions differ between the editors.
- [VS Code](https://code.visualstudio.com/) or [VSCodium](https://vscodium.com/)
Both VS Code and VSCodium will be referred to as VS Code except when instructions differ between the editors.

### Steps

1. Clone [`cursorless`](https://github.com/cursorless-dev/cursorless) locally. Note that it doesn't matter where you clone it, as long as you _**do not**_ clone it into your Talon user directory.
2. Open the newly created `cursorless` directory in VSCode. If you're on Windows, don't use WSL (see [#919](https://github.com/cursorless-dev/cursorless/issues/919) for discussion / workaround).
2. Open the newly created `cursorless` directory in VS Code. If you're on Windows, don't use WSL (see [#919](https://github.com/cursorless-dev/cursorless/issues/919) for discussion / workaround).
3. Run the following in the terminal:

```bash
Expand All @@ -29,7 +29,7 @@ Welcome! So glad you've decided to help make Cursorless better. You'll want to s

<Tabs groupId="vsx">

<TabItem value="vscode" label="VSCode" default>
<TabItem value="vscode" label="VS Code" default>

```bash
code --profile=cursorlessDevelopment
Expand All @@ -47,13 +47,13 @@ Welcome! So glad you've decided to help make Cursorless better. You'll want to s

</Tabs>

and then close the window that opens (eg say `"window close"`). This step is necessary to create the [VSCode settings profile](https://code.visualstudio.com/updates/v1_72#_settings-profiles) that acts as a sandbox containing a specific set of VSCode extensions that will be run alongside Cursorless when you launch Cursorless in debug or test mode. Once https://github.com/microsoft/vscode/issues/172046 is resolved, we will be able to remove this step, as the profile can then automatically be created.
and then close the window that opens (eg say `"window close"`). This step is necessary to create the [VS Code settings profile](https://code.visualstudio.com/updates/v1_72#_settings-profiles) that acts as a sandbox containing a specific set of VS Code extensions that will be run alongside Cursorless when you launch Cursorless in debug or test mode. Once https://github.com/microsoft/vscode/issues/172046 is resolved, we will be able to remove this step, as the profile can then automatically be created.

5. Run the following in the terminal:

<Tabs groupId="vsx">

<TabItem value="vscode" label="VSCode">
<TabItem value="vscode" label="VS Code">

```bash
pnpm init-vscode-sandbox
Expand Down Expand Up @@ -83,11 +83,11 @@ Welcome! So glad you've decided to help make Cursorless better. You'll want to s

</Tabs>

Said command adds extensions to the aforementioned settings profile that acts as a sandbox containing a specific set of VSCode extensions that will be run alongside Cursorless when you launch Cursorless in debug or test mode. This approach is [suggested](https://code.visualstudio.com/updates/v1_72#_extension-debugging-in-a-clean-environment) by the VSCode documentation. If you need to update any of the extension dependencies in the sandbox, you can add `--force` to the command. If you'd like to use additional extensions when debugging locally, you can use the following command:
Said command adds extensions to the aforementioned settings profile that acts as a sandbox containing a specific set of VS Code extensions that will be run alongside Cursorless when you launch Cursorless in debug or test mode. This approach is [suggested](https://code.visualstudio.com/updates/v1_72#_extension-debugging-in-a-clean-environment) by the VS Code documentation. If you need to update any of the extension dependencies in the sandbox, you can add `--force` to the command. If you'd like to use additional extensions when debugging locally, you can use the following command:

<Tabs groupId="vsx">

<TabItem value="vscode" label="VSCode">
<TabItem value="vscode" label="VS Code">

```bash
code --profile=cursorlessDevelopment --install-extension some.extension
Expand All @@ -109,7 +109,7 @@ Welcome! So glad you've decided to help make Cursorless better. You'll want to s

Note that you do not need to install the Cursorless extension into the `cursorlessDevelopment` profile. A local development version of Cursorless will be automatically installed there every time you debug the extension, as described below.

Also note that if you are adding support for a new language that isn't in the default list of [language identifiers](https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers) supported by VSCode, you may need to add an extension dependency. See [Adding a new language](./adding-a-new-language.md#2-ensure-file-type-is-supported-by-vscode) for more details.
Also note that if you are adding support for a new language that isn't in the default list of [language identifiers](https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers) supported by VS Code, you may need to add an extension dependency. See [Adding a new language](./adding-a-new-language.md#2-ensure-file-type-is-supported-by-vs-code) for more details.

6. Copy / symlink [`cursorless-talon-dev`](../../cursorless-talon-dev) into your Talon user directory for some useful voice commands for developing Cursorless.

Expand All @@ -118,16 +118,16 @@ Welcome! So glad you've decided to help make Cursorless better. You'll want to s
In order to test out your local version of the extension or to run unit tests
locally, you need to run the extension in debug mode. To do so you need to do the following:

1. Open the Cursorless repository in VSCode (with your regular default profile, _**not**_ with the `cursorlessDevelopment` profile)
1. Open the Cursorless repository in VS Code (with your regular default profile, _**not**_ with the `cursorlessDevelopment` profile)
2. Say `"debug extension"` to run the extension. If you want to run the tests instead, say `"debug test"`.

If you don't have the `cursorless-talon-dev` files in your Talon user directory as described in step 6 above, then you instead need to run the `workbench.action.debug.selectandstart` command in VSCode and then select either "Run extension" or "Extension tests".
If you don't have the `cursorless-talon-dev` files in your Talon user directory as described in step 6 above, then you instead need to run the `workbench.action.debug.selectandstart` command in VS Code and then select either "Run extension" or "Extension tests".

### Running a subset of tests

The entire test suite takes a little while to run (1-2 mins), so you may want to run just a subset of the tests.

To specify the set of tests to run, say `"debug generate subset"`, or if you haven't installed the cursorless-talon-dev files, run the VSCode task "Generate test subset file". To do this, choose "Tasks: Run Task" from the command palette.
To specify the set of tests to run, say `"debug generate subset"`, or if you haven't installed the cursorless-talon-dev files, run the VS Code task "Generate test subset file". To do this, choose "Tasks: Run Task" from the command palette.

To run the specified subset of tests, say `"debug test subset"` (or use the "Extension tests (subset)" launch config).

Expand All @@ -151,15 +151,15 @@ Run the `workbench.action.debug.selectandstart` command and then select

See [test-case-recorder.md](./test-case-recorder.md).

It is also possible to write manual tests. When doing so, we have a convention that any test that must be run within a VSCode context (eg because it imports `"vscode"`), should be placed in a file with the suffix `.vscode.test.ts`. All other tests should end with just `.test.ts`. This allows us to run non-VSCode tests locally outside of VSCode using `pnpm test`. The non-VSCode tests run much faster than the full VSCode test suite.
It is also possible to write manual tests. When doing so, we have a convention that any test that must be run within a VS Code context (eg because it imports `"vscode"`), should be placed in a file with the suffix `.vscode.test.ts`. All other tests should end with just `.test.ts`. This allows us to run non-VS Code tests locally outside of VS Code using `pnpm test`. The non-VS Code tests run much faster than the full VS Code test suite.

## Parse tree support

### Adding a new programming language

See [docs](./adding-a-new-language.md).

### Testing Cursorless with a local version of the VSCode parse tree extension
### Testing Cursorless with a local version of the VS Code parse tree extension

First bundle the parse tree extension into a `.vsix`, using something like the following:

Expand All @@ -171,7 +171,7 @@ vsce package -o bundle.vsix
Once you have your package then you can install it into the sandbox using the following command:

<Tabs groupId="vsx">
<TabItem value="vscode" label="VSCode">
<TabItem value="vscode" label="VS Code">

```bash
code --profile=cursorlessDevelopment --install-extension bundle.vsix
Expand Down Expand Up @@ -206,7 +206,7 @@ cli](https://cli.github.com/). For example:
pnpm -F @cursorless/app-vscode install-from-pr 1281
```

To uninstall the local build and revert to production cursorless, run the following command:
To uninstall the local build and revert to production Cursorless, run the following command:

```bash
pnpm -F @cursorless/app-vscode uninstall-local
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Adding a new programming language

So you want cursorless to support a new language? Great! Here's how to do it:
So you want Cursorless to support a new language? Great! Here's how to do it:

## 1. Add support to the [vscode-parse-tree](https://github.com/pokey/vscode-parse-tree) extension

Expand All @@ -9,9 +9,9 @@ of a document. See the
[docs](https://github.com/pokey/vscode-parse-tree/#adding-a-new-language) there
for how to add support for a new parser

## 2. Ensure file type is supported by VSCode
## 2. Ensure file type is supported by VS Code

If you are adding support for a new language that isn't natively detected by VSCode, you will need to add the appropriate extension to the list of dependencies. The list of languages officially supported by VSCode is listed [in the VSCode docs](https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers). If your language is in that list, you can skip this step and proceed to step 3. If your language is not in that list, you need to find a VSCode extension that adds support for your language, and add the id of the given extension to [`packages/lib-common/src/extensionDependencies.ts`](../../../../../packages/lib-common/src/extensionDependencies.ts) and then re-run `pnpm init-vscode-sandbox` to ensure it is installed. If you do not do this you will encounter errors when attempting to execute cursorless commands in the next step. See [#1895](https://github.com/cursorless-dev/cursorless/issues/1895) for more info.
If you are adding support for a new language that isn't natively detected by VS Code, you will need to add the appropriate extension to the list of dependencies. The list of languages officially supported by VS Code is listed [in the VS Code docs](https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers). If your language is in that list, you can skip this step and proceed to step 3. If your language is not in that list, you need to find a VS Code extension that adds support for your language, and add the id of the given extension to [`packages/lib-common/src/extensionDependencies.ts`](../../../../../packages/lib-common/src/extensionDependencies.ts) and then re-run `pnpm init-vscode-sandbox` to ensure it is installed. If you do not do this you will encounter errors when attempting to execute Cursorless commands in the next step. See [#1895](https://github.com/cursorless-dev/cursorless/issues/1895) for more info.

## 3. Register your language with Cursorless

Expand Down
Loading
Loading