talonhub / community

Voice command set for Talon, community-supported.
MIT License
643 stars 783 forks source link

Add terse mode #1221

Open pokey opened 1 year ago

pokey commented 1 year ago

The problem

The solution

We propose the following:

Alternative solutions

knausj85 commented 1 year ago

I'd be more tempted to redesign the grammar from the ground up based on current best practices and improved compatibility/consistency with key things like cursorless.

.talon-lists together with .talon and will make it much easier for folks to customize.

Perhaps it's also time to get serious about versioning to move the needle forward.

bjaspan commented 1 year ago

I initiated the (most recent iteration of the) discussion that led to this PR. I'm still quite new here and I know that I do not yet have a good intuition for how things do or should work, so I do not have high confidence in my opinions.

That said, the primary point I was trying to make is that it would be great if we could figure out a consistent recommended set of spoken forms, particularly for the most common things for coding (like delimiters) so that we can document a straightforward onboarding path for new coding users. The goal would be not to encourage users to learn something that they will have to change later as they get more proficient; we should require them to learn the minimum necessary to get started, but everything they learn they should be able to keep and build on as they gain experience.

My initial reaction to terse_mode is that it is the opposite of that. Unless we tell people to enable terse_mode as soon as they start, they would be learning the non terse way to say things and then have to relearn the terse way later. If we do tell people to enable terse_mode when they start, then we are bifurcating the recommended spoken forms for Talon users; all docs, blog posts, videos, etc. will have to pick one and be incomprehensible to people using the other, etc.

So, +1 to @knausj85's comment to rethink from scratch.

rntz commented 1 year ago

Ideally I think we want a way to evolve our command grammar that is:

  1. default for new users
  2. opt-in for existing users, so that they don't get commands changed out under them
  3. reasonably granular, so old users can opt-in to some grammar changes without committing to everything
  4. backward compatible - ideally requiring no change management in Python files at all
pokey commented 1 year ago

@rntz I agree with all of your points. In terms of implementation, how do we go about distinguishing new from existing users?

Fwiw we recently had to solve the problem of distinguishing new from existing users for the Cursorless VSCode extension, in order to show release notes to existing users, but not new users. The way we did that was to push a version of the extension that leaves a value in their VSCode key-value store, tracking the current installed version, and then indicating to VSCode that it should sync this value with the cloud if they have that enabled. We then waited a week, and anyone who didn't have that setting at that point was treated as a new user, so didn't get the release notes shown.

Dropping a piece of state somewhere (like we did above) is one way to do it, but keep in mind that can break if they then go install on a new computer if that state isn't somehow synced. We've had users get confused by that sort of situation in their cursorless-talon files, which don't have any kind of syncing mechanism. Specifically, when the user first installs cursorless, we "eject" the default spoken forms at that moment into csvs (which is one version of dropping state somewhere). That way if we update default spoken forms, they'll still keep their existing ones. I believe there's a similar mechanism in knausj. The problem is that if they then later install on a new machine, after we've changed default spoken forms, they'll get those new ones, and be confused as to why the spoken forms have changed

We could drop the state somewhere in their clone of community so that there's a chance they'll check it in and get it again when they clone on a new computer, but not sure how much we can rely on that

I'm not sure we can solve every problem here; we might have to accept that things may break down slightly if they're running on two computers, and just at least have an easy way for them to patch things up if so (eg an easy way to migrate the state from one computer to another)

pokey commented 9 months ago

Ok so it sounds like everyone here is pushing for the terser command set to be the default. I think that makes sense. Couldn't we just deprecate the existing verbose commands using our deprecation mechanism, and just add the new ones? I also don't think this all needs to happen in one go. We could go piece-by-piece

knausj85 commented 9 months ago

My only concern with just adding a bunch of new commands + deprecation is that would probably increase command recognition rates for newbs and they could run away.

Alternatively, we could pursue a strategy such as:

pokey commented 9 months ago

That seems reasonable to me