Varje ord i källkoden tilldelas en hatt som står över ett av tecknen i det ordet. Varje ord går därmed att referera till genom att säga formen på hatten, färgen på hatten och det fonetiska namnet på bokstaven som hatten står över. Tillsammans bildar dessa tre ordets så kallade mål. Till exempel så har bokstaven g i ordet global
en röd cirkel över sig och kan därmed refereras till genom att säga red gust
. (gust
är det fonetiska namnet på bokstaven g när man använder Community-konfigurationen.) Den runda hattformen har inget namn, så det utelämnas. På samma sätt kan man referera till ordet subprocess
genom att säga fox sun
. (fox
är formen på hatten, sun
är det fonetiska ordet för s och den grå färgen har inget namn så det utelämnas.) Som sista exempel så kan man referera till vänsterparantesen efter action_class
på första raden genom att säga blue curve paren
. (Hatten har både en färg och form.)
De vanligaste Cursorless-kommandon man använder är av formen {action} {mål}
. Till exempel chuck red gust
. chuck
i detta fallet är det talade ordet för att ta bort, och red gust
är det vi vill ta bort. I exemplet ovan så skulle detta innebära att ordet global
tas bort. Exempel på andra actions är bring ... to ...
(skriv över ett mål med ett annat), pre
(placera pekaren innan målet så att du kan skriva ny text där), define
(navigera till definitonen av målet). Listan är mer än 50 actions lång, men man behöver bara använda sig av en handfull av dem i normala fall för att göra de mest vanliga redigeringarna.
Den stora styrkan hos Cursorless visar sig när man börjar diskutera vad Cursorless callar för scopes. Med hjälp av scopes kan du utvidga varje mål till att innefatta syntaktiska element som målet ingår i. Till exempel så refererar red fine
till ordet if
i exemplet. Genom att säga chuck if state red fine
tar man inte bara bort ordet if
utan hela if-satsen. chuck arg green odd
kommer ta bort hela argumentet actions.user.clear_subtitles
på näst sista raden även om green odd
bara refererar till ordet actions
. chuck arg green odd and its previous arg
åstadkommer samma sak men tar även bort argumentet innan. Det är nu som man börjar inse att Cursorless inte bara är några korta kommandon för att redigera ord, Cursorless i sig är ett domänspecifikt talat programmeringsspråk för att modellera källkodsredigering. Detta öppnar upp för ett helt annat tankesätt kring själva handlingen att redigera källkod, och det är något som jag numera finner mig själv sakna när jag inte har tillgång till Cursorless och röstprogrammering.
Som sista exempel på hur uttrycksfullt Cursorless kan vara har vi följande två kodrader: