Big rename part 2: 'config' etc. to 'mapping.
Implement equality checks for Targets. Don't consider equal targets as conflicting when importing.
Post active mapping changes through notification center rather than to the application delegate directly. Don't listen for application switch notifications unless the mappings are active.
Harden importing.
Nicer function to present the error.
I had no idea you could use class property access like this it's the best thing ever.
Use a sheet rather than a dialog for some parts of import/export.
Simplify config removal since it's always the active config removed.
Save after deleting a config. Reset target to no-op when deleting its config, rather than to the default config.
Re-import exported files.
Allow JSON export of configurations.
Rename from Enjoy/Enjoy2 to 'Enjoyable'. While I'm mucking in the project file, enable a bunch of warnings and fixes for those warnings.
Fix a variety of issues with incorrect / unexpected / unfriendly first responder status.
Clean up a bunch of properties; remove unused ones, use automatic ones where possible, bypass them internally for serialization for speed.
Better constructor for Config.
Clean up save/restore. Write preferences immediately but continue relying on automatic/exit flush for disk persistence. Remember active configuration on exit.
Replace hacky target stringification with structured serialization.
Remove project headers from the prefix header; having everything in the prefix header file defeats the point of it.
Use a weak reference for TargetConfig configurations to avoid a circular reference, and to auto-nil them when the chosen config is deleted.
Clean up manual (previously 'neutral') vs. automatic (i.e. process-driven) configuration switching.