Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 0.29.0 #2621

Merged
merged 4 commits into from
Aug 2, 2024
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
version: "0.29.0"
releaseDate: "2024-08-02"
---

# Release Notes for 0.29.0

## Preamble

Welcome to the last pre-1.0 Cursorless release notes! As you may or may not already know, Cursorless is all-in on continuous delivery, so you get features as soon as they hit `main`. But to keep up the 🙌🎉🎸 around releases and to give you that which you already have but do not know, we now do release notes. If you like what we've been up to, consider [sponsoring the project](https://github.com/sponsors/pokey) so we can afford the legal bills when Netflix sues me for the Law of Surprise reference above.

Given we don't actually have "releases" (cf continuous delivery above), we're arbitrarily considering everything merged since [the last "release"](./0.28.0.md) to be part of this one.

## The subject at hand

Since the last release notes, we've merged [405 PRs from 18 authors](https://github.com/cursorless-dev/cursorless/pulls?q=is%3Apr+is%3Amerged+merged%3A2023-09-02..2024-08-02+sort%3Aupdated-asc+) (including a whopping [141](https://github.com/cursorless-dev/cursorless/pulls?q=is%3Apr+is%3Amerged+merged%3A2023-09-02..2024-08-02+sort%3Aupdated-asc+author%3AAndreasArvidsson) from [@AndreasArvidsson](https://github.com/sponsors/AndreasArvidsson)!), so let's get to it 🏎️

### Next-gen all day

Welcome to the next-gen. We've now migrated all scopes for nearly every language to our new, more powerful next-gen scope engine, enabling next-gen inference (eg `"every funk air past bat"`), scope visualization, scope tree view, etc.

We've also migrated many of our globally available text-based scopes, including surrounding pairs, so you can now say things like `"copy next round"`, `"chuck two strings"`, etc. Surrounding pair scopes also form the basis for other scopes, such as `"short paint"`, which is like `"paint"` (expand till you hit whitespace), but stops when it hits a closing bracket. This enabled us to easily add a new scope called `"short block"` ([video 🎬](https://youtu.be/GEFJKOSiAPQ))

In addition to migrating old scopes, we added a couple new languages: yaml and lua. So now that Cursorless understand the [arcane vagaries of yaml](https://noyaml.com/), you're free to spend time on the big things, like wondering what you did wrong in a past life to end up writing yaml all day.

### New modifiers

Everyone loves `"take two tokens"`, `"chuck next two lines"`, and `"bring air to every instance two tokens bat"` (maybe that last one is just me?). What everyone doesn't love is saying `"pre two lines air"` and wondering why you end up with one cursor at the start of line `"air"`. Well allow me to introduce you to the new, more powerful `"every"` modifier. You can now put an `"every"` in front of any modifier that refers to multiple scopes, and instead of constructing a range from the first to the last, Cursorless will let you target them individually. So `"take every two tokens"` will give you two selections, `"pre every two lines air"` will give you cursors at the start of those two lines, and `"ski wrap every three strings air"` is how I wrapped the first three commands in this paragraph backticks when I realised I forgot to give them styling.

### Interactive tutorials

Yep, they're here. I'll let myself speak for myself here ([video 🎬](https://youtu.be/5XLbfzcyTvs))

### Cursorless everywhere

We're taking those first wobbly, beautiful steps out of VSCode 🐣🥲. We have now shipped very early, experimental support for [Cursorless in Neovim](https://github.com/hands-free-vim/cursorless.nvim). It's still missing hats and a parse tree, but the engine is there. We've landed; now we'll expand. Big shout-out to the dream team, [@saidelike](https://github.com/saidelike) and [@fidgetingbits](https://github.com/fidgetingbits), for the long hours and shower of tears as this came together. This one shipped with continuous delivery, because we're psycho about CD, so any improvements to Cursorless will automatically make their way into Neovim using the confusingly-named Lazy package manager 🤔

We also have an internal experiment with a version of Cursorless that runs literally anywhere, using accessibility APIs. This one is so experimental that I'll probably get in trouble for even mentioning it. So definitely don't heckle @AndreasArvidsson and @phillco to tell you how to play with this completely not-ready-for-primetime early experiment.

### New hat shapes

It's unfortunate that we don't record our Discord sessions, because the discussions about the new hat shapes would make fantastic examples for the Wikipedia page on [bike-shedding](https://en.wikipedia.org/wiki/Law_of_triviality). I'm really happy with how they turned out. Except for fox. Such a shame about that pixel.

### Strange Loop 2023

ICYMI Cursorless went to Strange Loop. The talk was so wild that they had to close Strange Loop forever. Sorry. I really liked Strange Loop too. Here's the talk ([video 🎬](https://youtu.be/NcUJnmBqHTY)); I think it's a nice way to understand the concepts underlying Cursorless -- its platonic form, if you will. (And I really hope that you will.)

### Improved Talon-side API

We beefed up our Talon-side API to allow you to build your own grammars on top of Cursorless. See the [talon-side api docs](https://www.cursorless.org/docs/user/customization/#public-talon-actions) for more.

We also have an undocumented, secret action that has a built-in parser for building arbitrarily powerful custom commands on the fly. You should also definitely not heckle @AndreasArvidsson and @phillco to tell you how to use this one either.

### Experimental keyboard interface

The keyboard interface continues to grow and is getting close to feature-parity with our spoken grammar, but is still very much in the experimental phase. We're looking for feedback on this one, so if you're interested in trying it out, come find us on Slack or Discord.

### Falling back

You know when you're in a text box or the VSCode integrated terminal and you're like "Man, I wish I could bring that line right to my cursor"? Do it. Go on. `"bring line air"`. You can also use some hatless Cursorless commands on your cursor in that text box (`"quad wrap token"`, `"copy two tokens backward"`, `"chuck third previous paint"`, etc etc etc nbd 🙄)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think two tokens or ordinals work in our fallback code.


### Cursorless sidebar

Rumour has it ([video 🎬](https://youtu.be/4LKxAeWXpOA))

### Other stuff

- New `"grand"` modifier that takes the scope one bigger than regular-old containing. Eg if you're trapped in a `"round"` and can't get to the bigger `"round"`, `"take grand round"` has your back 🤝
- New `"break"` and `"join"` actions to break and join lines, respectively.
- New `"increment"` and `"decrement"` modifiers. Living that 0 to 1 mindset

## 📈 What's next?

Have a look at our [1.0 milestone](https://github.com/cursorless-dev/cursorless/milestone/11) for the near term; we're getting close

After that, see our [medium-](https://github.com/cursorless-dev/cursorless/milestone/10) and [long-term roadmaps](https://github.com/cursorless-dev/cursorless/milestone/8), including:

- Cursorless on vscode.dev / other VSCode web clients ([#1023](https://github.com/cursorless-dev/cursorless/issues/1023)). We're a lot closer to this one now, having already completely abstracted all node references from our core engine.
- Cursorless for more IDEs, such as JetBrains, emacs, etc
- Cursorless everywhere using accessibility comes out of secret mode
- Vastly expanded Talon-side API comes out of secret mode ([#494](https://github.com/cursorless-dev/cursorless/issues/494))
- Bookmarking targets to allow more complex commands, even across multiple files ([#46](https://github.com/cursorless-dev/cursorless/issues/46))
- Changes that will enable more fluent chaining, such as modifying the target of a bring in a single phrase ([#414](https://github.com/cursorless-dev/cursorless/issues/414))
- More videos ([#506](https://github.com/cursorless-dev/cursorless/discussions/506))
- And so much more!

We'd like to end with a massive thank you to [our sponsors 🎉](https://github.com/sponsors/pokey), without whom Cursorless development would not be possible!
2 changes: 1 addition & 1 deletion packages/cursorless-vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"description": "Tests"
}
],
"version": "0.28.0",
"version": "0.29.0",
"publisher": "pokey",
"license": "MIT",
"repository": {
Expand Down
Loading