Skip to main content

Release Notes for 0.29.0

Published Aug 2, 2024

Preamble​

Welcome to the last pre-1.0 Cursorless release notes! The last 11 months have flown by since our last 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 so we can afford the legal bills when Netflix sues me for the Witcher 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" to be part of this one.

The subject at hand​

Since the last release notes, we've merged 405 PRs from 18 authors (including a whopping 141 from @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 🎬)

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, 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 with 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 🎬)

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. 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 and @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 hat shapes we shipped late last year (#1868) would make fantastic examples for the Wikipedia page on bike-shedding. 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 🎬); 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 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", "chuck line", etc etc etc nbd πŸ™„)

Cursorless sidebar​

Rumour has it (video 🎬)

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 for the near term; we're getting close

After that, see our medium- and long-term roadmaps, including:

  • Cursorless on vscode.dev / other VSCode web clients (#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)
  • Bookmarking targets to allow more complex commands, even across multiple files (#46)
  • Changes that will enable more fluent chaining, such asΒ modifying the target of a bring in a single phrase (#414)
  • More videos (#506)
  • And so much more!

We'd like to end with a massive thank you to our sponsors πŸŽ‰, without whom Cursorless development would not be possible!