Dorico 3 - Keyboard shortcuts for microtonal accidentals?

You can bind shortcuts for these manually if you’re prepared to edit your keycommands.json file manually.

Warnings first:
Do use a decent text editor (BBEdit, Sublime Text, SciTE etc.)
Do backup your keycommands file somewhere safe before you edit it
Do close Dorico before you edit your keycommands file
Do ensure you match the existing syntax of the JSON file exactly, and run the whole thing through www.jsonlint.com and hit Validate (and ensure you get a green result) before you save and reload Dorico.
When assigning shortcuts, type “Ctrl” if you want to use “Cmd” on mac, type “Alt” if you want to use “Opt” on mac and type “Meta” if you want to use “Control” on mac. Note that “Meta” is often problematic and is best avoided

The way to uncover the underlying functions is

  1. Select a note.
  2. Go Script > Start Recording Macro.
  3. Add the accidental manually.
  4. Go Script > End Recording Macro.
  5. Go to your user folder ( %appdata%\Steinberg\Dorico 2 or Dorico 3 on Windows, /Users/your-username/Library/Application Support/Steinberg/Dorico 2 or Dorico 3 on mac) and open the resulting Script Plug-ins\Usermacro.lua file in a text editor.

You should see something like this (I clicked through a few microtonal accidentals here):

local app=DoApp.DoApp()
app:doCommand([[UI.InvokePaletteButton?PaletteIndicatorID=kKeySigPanel.accidental.24et.western.triple-flat.gould&PaletteSectionID=kKeySigAccidentalsPanel&PropertyButton=false&SetOldValue=false&Set=true&UseLocalOverride=0]])
app:doCommand([[NoteInput.SetAccidental?AccidentalDefinitionID=accidental.24et.western.triple-flat.gould]])
app:doCommand([[UI.InvokePaletteButton?PaletteIndicatorID=kKeySigPanel.accidental.24et.western.double-flat-down.gould&PaletteSectionID=kKeySigAccidentalsPanel&PropertyButton=false&SetOldValue=false&Set=true&UseLocalOverride=0]])
app:doCommand([[NoteInput.SetAccidental?AccidentalDefinitionID=accidental.24et.western.double-flat-down.gould]])
app:doCommand([[UI.InvokePaletteButton?PaletteIndicatorID=kKeySigPanel.accidental.24et.western.double-flat.gould&PaletteSectionID=kKeySigAccidentalsPanel&PropertyButton=false&SetOldValue=false&Set=true&UseLocalOverride=0]])
app:doCommand([[NoteInput.SetAccidental?AccidentalDefinitionID=accidental.24et.western.double-flat.gould]])

Now get your keycommands_en.json file loaded in a text editor and add in each of the commands that start “NoteInput.SetAccidental”, ensuring you match the existing syntax of the JSON. You’ll need to allocate shortcuts that you’re not using elsewhere. For ease of understanding, I make a point of using the kGlobal context (at the top of the JSON file), though I guess if you want to use the same shortcuts for different things in different modes you’d want to use the kWriteMode context for these. Just by way of example, you should end up with something that looks like the middle line of this, for each accidental:

Note: this use of Dorico’s (currently rather limited) script recording can get you access to pretty much anything in the properties panel and much of the stuff in the right panel, at least in Write mode. If something doesn’t work initially, you’re either reusing a keyboard shortcut that’s already in use, or you’ll need to try stripping some of the arguments out.

Now go and read those warnings again.

1 Like