In the last post I changed what hotkeys mean in the context of mouse modifiers.

Now I need to think about what they mean in the context of hotkeys.

Currently using REAPER 6.18

Contents

Modifiers

To start this out I’d like to discuss the fact that we use keyboards with Modifiers: Control, Alt/Option, Command/Win and Shift (and possibly others!)

These are keys that allow us to use a single key for up to 16 different commands. That means your average keyboard can execute well over 1,000 commands without issue. If we differentiate between left and right modifiers, then nearly 4,500 commands are possible! Include the number pad and we’re north of 5,500.

That might sound incredible, but it presents a problem: remembering 1,000+ things is hard. Can we reduce the cognitive load? Assign consistent meanings to modifiers.

Let’s take shift. If adding shift to a key always does the same thing, then that’s 1/4 (or 1/8 if we’re splitting L/R variants) the number of things we need to remember. If I know that shift always means adjusting/changing/creating a selection then I know that for all key-presses with shift, I’m doing some sort of action on a selection.

This is a bidirectional extension of knowledge. If I know that x crossfades somehow, but I don’t remember what it crossfades, then I can reason that it will not crossfade a selection, because shift-x would do that. Knowing that shift has a specific meaning allows me to make sense of commands which I lack knowledge, or to apply my “shift does selection things” knowledge to commands.

Before thinking about what modifiers might “mean”, I need to know what I need. What classes of modifications might I do in the software, and how can I generalize them?

Somewhat anachronistically, I already did this work ‘offscreen’ while writing the last post. Let’s present and refine it.

Needs

A brain dump of variations of things that I might do in audio software:

  • Select something
  • Deselect something
  • Change something in its own context
  • Ignore a dimension of freedom (enforce a constraint)
  • Change the size of something
  • Duplicate something
  • Reset a value to default
  • Move something
  • Create something
  • Use a variation of a function
  • Bi-lateral distinction (left/right? in/out? up/down? previous/next?)
  • Increase or Decrease something
  • Access another layer of function
  • Combine functions
  • Link things
  • Lock/Unlock things

Layout

Many of these are similar or mutually exclusive or non-independent, so they can be grouped together:

  • Shift - Selecting things
    • Select something
    • Deselect something
    • Link things
    • Lock/Unlock things
  • Control Changing scope of things
    • Change something in its own context
    • Change the size of something
    • Increase or Decrease something
  • Option Ignoring things 1
    • Use a variation of a function
    • Access another layer of function
    • Bi-lateral distinction (left/right? in/out? up/down? previous/next?)
      • Default command is left/in/up/previous, adding option is right/out/down/next.
        • Alternatively, utilizing Left-Option and Right-Option to distinguish? REAPER doesn’t do this though.
    • Ignore a dimension of freedom (enforce a constraint)
    • Ignore a constraint
  • Command Creating or uncreating (not deleting!) things
    • Duplicate something
    • Reset a value to default
    • Move something
    • Create something
  • Combine Modifiers Use multiple together
    • Combine functions

These mostly fall in line with how my preferred OS (macOS) works, and these are what I’ll be using.

Letters

Vim

I use the best version of Vim when working on anything textual. This means that I’m used to the keys that it provides, and I’m used to modal editing.

REAPER doesn’t have proper modal editing (yet, though I recall a script or two that was close). However I will still use some basic VIM hotkey concepts in my hotkey layout.

You will find some of these in the REAPER listings with a REAPER command, but here are the VIM meanings for them. (Note, capitalization matters!)

  • h - cursor left
  • l - cursor right
  • j - cursor down
  • k - cursor up
  • i - insert
  • a - append
  • I - insert at beginning of line
  • A - append at end of line
  • w - beginning of word, moving forward
  • b - beginning of word, moving backward
  • e - end of word
  • ^ - cursor to first non-blank character
  • $ - cursor to end of line
  • r - replace character
  • u - undo
  • control-r - redo
  • v - start visual selection mode
  • V - start visual selection mode, marking lines
  • d - delete selected text
  • Control-d - scroll down half a screen
  • Control-u - scroll up half a screen
  • o - insert line and begin inserting text
  • O - insert line above and begin inserting text
  • u - selected text to lowercase
  • U - selected text to uppercase
  • c - change…
  • y - yank (copy)
  • x - kill (cut)
  • p - put (paste)
  • / - search forward
  • ? - search backward
  • > - shift text right
  • < - shift text left
  • = - format text
  • t - to character
  • T - to character backwards
  • f - onto character
  • F - onto character backwards
  • s - sentence
  • w - word
  • p - paragraph
  • b - block
  • t - tag
  • ! - run selection through external program and replace contents
  • - jump to mark
  • zo - open fold (only using ‘z’ for folding)

These are not all VIM commands, nor are they even the ones that I use the most. They are familiar to me and may crossover into a REAPER hotkey context, so I’ve listed them here. You can look up VIM cheatsheets or browse the Vim documentation to learn more. (I actually learned a few things, not listed here, while double checking some content here!)

I don’t use QWERTY or similar, I primarily type on a colemak layout keyboard. I use the default VIM layout and not some funky Colemak layout. Staying with the defaults allows me to switch between my bespoke Emacs+Evil setup and using Vim or Vim-Mode on any other editor.

Many of these could be substituted with arrow keys, home/end, pgup/dn, etc…

I will mark VIM commands with a ✓

Spelling

My preference is to use VIM-like keys where possible, since that’s my primary method of interacting with the computer outside a DAW (and has been for a long time).

Where that is inappropriate, I will instead use the first letter of the command-type or a letter that’s a substantial part of the sound of the word.

  • velocity
  • pitch

These may not correlate directly to commands below. Simply an example of the concept.

Index

Here’s the hotkeys being used, without any modification, and the command they correspond to.

  • 1-0 - Change grid

Main Context

These are in the “Main” section in the Action List (? default shortcut)

I’ve attempted to list the categories here in order of how often they will be used (as a whole for the section).

Many of these have changed since my last hotkey design post. I am now implementing these as of this post.

Scripts

  • F12 Script: neutronic_Quick Adder 2.lua

Playhead/Edit cursor movement

  • h View: Move cursor left to grid division
  • l View: Move cursor left to grid division
  • a Move edit cursor to start of current measure
  • e Move edit cursor forward one measure
  • shift-a Transport: Go to start of project
  • shift-e Transport: Go to end of project
  • option-l Item navigation: Move cursor right to nearest item edge
  • option-h Item navigation: Move cursor left to nearest item edge
  • tab Item navigation: Move cursor to next transient in items
  • shift-tab Item navigation: Move cursor to previous transient in items

Play State

  • command-r Transport: Toggle repeat

Grid

  • NUM1 Grid: Set to 1
  • NUM2 Grid: Set to 1/2
  • NUM4 Grid: Set to 1/4
  • NUM5 Grid: Set to 1/6 (1/4 triplet)
  • NUM8 Grid: Set to 1/8
  • NUM9 Grid: Set to 1/12 (1/8 triplet)
  • NUM6 Grid: Set to 1/16
  • NUM7 Grid: Set to 1/24 (1/16 triplet)
  • NUM3 Grid: Set to 1/32

CUA (ironically)

  • x Edit: Cut
  • y Edit: Copy items/tracks/envelope points (depending on focus) ignoring time selection
  • p Edit: Paste
  • shift-y Edit: Copy items/tracks/envelope points (depending on focus) within time selection, if any (smart copy)
  • shift-x Edit: Cut items/tracks/envelope points (depending on focus) within time selection, if any (smart cut)
  • command-p Item: Insert time on tracks and paste items

Change Focus

  • F1 SWS/BR: Focus arrange
  • F2 SWS/BR: Focus tracks
  • option-F1 SWS/SN: Focus MIDI editor
  • option-F2 FocusTrackManager.lua- see script

Project State

  • u Edit: Undo
  • control-r Edit: Redo

Zoom

  • z - View: Zoom time selection
  • command-z View: Restore previous zoom level
  • control-z SWS: Horizontal zoom to selected items
  • + View: Zoom in horizontal
  • - View: Zoom out horizontal
  • command-control-z - Zoom to full project custom action:
    • Track: Select all tracks
    • Item: Select all items in track
    • SWS: Vertical zoom to selected tracks
    • SWS: Horizontal zoom to selected items
    • Track: Unselect all tracks
    • Item: Unselect all items
  • option-+ View: Increase selected track heights
  • option– View: Decrease selected track heights
  • NONE View: Scroll horizontally (MIDI CC relative/mousewheel)
  • shift-mousewheel View: Scroll horizontally reversed (MIDI CC relative/mousewheel)

FX

  • F11 View: Show FX browser window
  • control-F11 Track: View FX chain for current/last touched track
  • **control-option-F11 Track: View FX chain for master track

Metronome

  • q Options: Enable metronome
  • option-q Options: Disable metronome

Selection

Time Selection

  • i Time selection: Set start point
  • o Time selection: Set end point
  • shift-i Time selection: Set time selection to items
  • option-i Time selection: Remove time selection

Markers

  • command-‘ Markers: Insert and/or edit marker at current position
  • 1 Markers: Go to marker 01 1-10
  • Markers: Go to next marker/project end
  • option-‘ Markers: Go to previous marker/project start
  • ✓ *command-‘** Markers: Renumber all markers in timeline order
  • control-‘ Markers: Remove all markers from time selection

Item Selection

  • shift-v Item: Select all items in track
  • control-shift-v Item: Select all items on selected tracks in current time selection
  • v - Item navigation: Select and move to next item
  • option-v - Item navigation: Select and move to previous item
  • cmd-option-enter - Xenakios/SWS: Select items under edit cursor on selected tracks

Track Selection

  • option-j Track: Go to next track
  • option-k Track: Go to previous track
  • option-shift-j Xenakios/SWS: Select next tracks, keeping current selection
  • option-shift-k Xenakios/SWS: Select previous tracks, keeping current selection

Item Editing

  • / Item: Split items at edit cursor (no change selection)
  • unused Xenakios/SWS: Split items at transients
    • Substitute option-s Item: Dynamic split items...
      • Command-S is used universally for “Save”, so I’m deviating slightly here.
  • [ Item edit: Trim left edge of item to edit cursor
  • ] Item edit: Trim right edge of item to edit cursor
  • option-[ Item edit: Move left edge of item to edit cursor
  • option-] Item edit: Move right edge of item to edit cursor
  • k Item: Nudge items volume +1dB
  • j Item: Nudge items volume -1dB

Moving Items

  • command-b SWS: Move selected item(s) left edge to edit cursor
  • command-e SWS: Move selected item(s) right edge to edit cursor
  • c Item edit: Move contents of item to edit cursor
  • command-↓ Item navigation: Select and move to item in next track
  • command-↑ Item navigation: Select and move to item in previous track

Crossfades and fades

  • command-f Item: Fade items in to cursor
  • command-shift-f Item: Fade items out from cursor
  • f Item: Cycle through fade-in shapes
  • shift-f Item: Cycle through fade-out shapes
  • option-f Item: Remove fade in
  • option-shift-f Item: Remove fade out
  • command-x Item: Crossfade any overlapping items
  • shift-command-x Item: Cycle through crossfade shapes

Automation

  • shift-4 Envelope: Insert 4 envelope points at time selection
  • option-a Envelope: Add/edit envelope point value at cursor
  • option-a Delete automation in time selection custom action
    • Envelope: Select points in time selection
    • Envelope: Delete all selected points in time selection

Pitch editing

  • w Item: Add stretch marker at cursor

Takes

  • t Take: Switch items to next take
  • option-t Take: Switch items to previous take
  • control-t Take: Delete active take from items
  • command-t Take: Crop to active take in items

Track Management

  • r Track: Toggle record arm for selected tracks
  • s Track: Toggle solo for selected tracks
  • m Track: Toggle mute for selected tracks

Screensets

  • F3 Screenset: Load window set #01
  • F4 Script: RecordScreenset.lua
  • F5 Screenset: Load window set #03
  • F6 Screenset: Load window set #04
  • shift-F3 Screenset: Save window set #01
  • shift-F4 Screenset: Save window set #02
  • shift-F5 Screenset: Save window set #03
  • shift-F6 Screenset: Save window set #04

Recording

  • ` - Transport: Record
  • option-` - Undo recording custom action
    • Transport: Stop (DELETE all recorded media)
    • Transport: Record

MIDI Context

I want to start this off by complaining. It’s irritating that the MIDI Editor context has different names for actions that do the exact same thing, but in the MIDI editor.

Ugh.

Playhead/Edit cursor movement

  • h Navigate: Move edit cursor right by grid
  • l Navigate: Move edit cursor left by grid
  • a Navigate: Move edit cursor to start of measure
  • e Navigate: Move edit cursor to start of next measure

Grid

  • NUM1 Grid: Set to 1
  • NUM2 Grid: Set to 1/2
  • NUM4 Grid: Set to 1/4
  • NUM5 Grid: Set to 1/6 (1/4 triplet)
  • NUM8 Grid: Set to 1/8
  • NUM9 Grid: Set to 1/12 (1/8 triplet)
  • NUM6 Grid: Set to 1/16
  • NUM7 Grid: Set to 1/24 (16 triplet)
  • NUM3 Grid: Set to 1/32

CUA

  • x Edit: Cut
  • y Edit: Copy
  • p Edit: Paste

Note Editing

Note Creation

  • NUMenter Edit: Insert note at edit cursor
  • a Edit: Insert note at nearest A
  • control-b Edit: Insert note at nearest A#/Bb
  • b Edit: Insert note at nearest B
  • c Edit: Insert note at nearest C
  • control-d Edit: Insert note at nearest C#/Db
  • d Edit: Insert note at nearest D
  • control-e Edit: Insert note at nearest D#/Eb
  • e Edit: Insert note at nearest E
  • f Edit: Insert note at nearest F
  • option-g Edit: Insert note at nearest F#/Gb
  • g Edit: Insert note at nearest G
  • control-a Edit: Insert note at nearest G#/Ab

Note Movement

  • command-j Edit: Move notes down one semitone ignoring scale/key
  • command-k Edit: Move notes up one semitone ignoring scale/key
  • command-control-j Edit: Move notes down one octave
  • command-control-k Edit: Move notes up one octave

Note Velocity

  • option-k Edit: Note velocity +01
  • option-j Edit: Note velocity -01
  • control-option-k Edit: Note velocity +10
  • control-option-j Edit: Note velocity -10

Split

  • / Edit: Split notes
  • d Item: Dynamic split items...

Length

  • [ Edit: Trim left edge of note to edit cursor
  • ] Edit: Trim right edge of note to edit cursor
  • option-2 Edit: Set note length to 1/2
    • Other divisions etc… follow grids + option

Pitch Cursor

  • k Edit: Increase pitch cursor one semitone
  • j Edit: Increase pitch cursor one octave
  • ctrl-k Edit: Decrease pitch cursor one semitone
  • ctrl-j Edit: Decrease pitch cursor one octave

  • shift-a Edit: Move pitch sursor to nearest A
  • shift-control-b Edit: Move pitch sursor to nearest A#/Bb
  • shift-b Edit: Move pitch sursor to nearest B
  • shift-c Edit: Move pitch sursor to nearest C
  • shift-control-d Edit: Move pitch sursor to nearest C#/Db
  • shift-d Edit: Move pitch sursor to nearest D
  • shift-control-e Edit: Move pitch sursor to nearest D#/Eb
  • shift-e Edit: Move pitch sursor to nearest E
  • shift-f Edit: Move pitch sursor to nearest F
  • shift-control-g Edit: Move pitch sursor to nearest F#/gb
  • shift-g Edit: Move pitch sursor to nearest G
  • shift-control-a Edit: Move pitch sursor to nearest G#/Ab

Selection

  • shift-v Edit: Select all notes at pitch cursor
  • control-shift-v Edit: Select all notes in time selection

Zoom

  • + View: Zoom in horizontally
  • - View: Zoom out horizontally
  • h View: Zoom in vertically
  • option-h View: Zoom out vertically
  • control-z View: Zoom to selected notes/CC

Scroll

  • control-u View: Scroll view up
  • control-d View: Scroll view down
  • control-option-u View: Scroll view right
  • control-option-d View: Scroll view left

Step Input

  • m Options: MIDI inputs as step input mode

Common unbound keys

I am fine using a menu (menu search, not mouse/cursor!) for these commands.

  • Track: Insert new track

These commands I have no clue what I’m doing yet! I’m sure this list will grow over time as well.

  • Track: Toggle track volume envelope visible
  • Track: Toggle track pan envelope visible
  • SWS/S&M: Toggle show FX chain windows for selected tracks
  • SWS: Make folder from selected tracks
  • Item: Show FX chain for item take

Conclusion

I undoubtedly forgot many things, and created collisions I’ve yet to experience.

This is a first draft, and subject to change. Soon I’ll update my REAPER Config page with more information.

Meta

This post took:

  • 32 hours to write. What a struggle, and that’s a tiny % of actions in REAPER!
  1. I will also be using option instead of command-... when it is taken by a well-known OS shortcut, such as command-s for save.