Karya, built on 2018-02-23T20:23:55 (patch cf8565b7ac832266878af99a942555d139065f12)

Safe HaskellNone



The default keyboard layout.

I group cmds by their function. Overlapping keys will be detected and show up in the log as a warning on startup.

Some global cmds also have a command-key version, so you can invoke them even when kbd entry is on.

Track-specific cmds are bound in Track.

Global generic cmds:

  1. State level operations, like load, save, undo. Set timestep mode, set edit mode. Play, stop. Move the selection.
  2. Modify text independent attributes, like start position and duration. This includes copy and paste, remove, modify duration, nudge, ...

Track-specific cmds are looked up in Cmd.Track.

  1. Track specific event operations, possibly affecting all events in the selection: transposition, etc. These are active regardless of EditMode, and are found in Cmd.*TrackKeymap.
  2. Track specific event editing, which modifies a single event. E.g., input notes and note text, pitches in a certain scale, control values, etc. This is enabled by edit mode, and will shadow printable keys, depending on the track type and edit mode. Found in Cmd.*Track.
  3. Kbd entry, if on, will hijack the letter keys and turn them into NoteOns.

Then there's midi recording: (TODO which is theoretical since it's not implemented)

In record mode, the block is played while recording midi msgs and their timestamps, which are later passed to the integrator to convert into events.



pure_cmds :: [Msg.Msg -> Cmd.CmdId Cmd.Status] Source #

Cmds that don't use IO. Exported from the module for the responder.

io_cmds :: [Msg.Msg -> Cmd.CmdT IO Cmd.Status] Source #

Cmds that use IO. This should be a limited to the small set of cmds that need it.

all_cmd_map :: Keymap.CmdMap (Cmd.CmdT Identity) Source #

This is not useful for execution since the cmds themselves have been stripped of their code, but it's still useful to find keymap collisions and print a global keymap. They're stripped to make them all the same type, so they can all go into the same CmdMap, so collision detection and documentation doesn't have to care about pure_cmds vs io_cmds.