# v2.4.3

## Summary (non exhaustive)

- Introduces a new layout type
- Improves application based remapping suport for wayland/X
- Adds `swap` support for toggled layers
- Adds support for chording
- Numerous bugfixes and stability improvements

## New Actions:

 - togglem (#270)
 - clear() (#253)
 - overloadt (#309)
 - overloadt2

## New Commands:

 - listen command (#294, #217)
 - reload
 - do
 - input

## New timeout and modifier knobs:

 - disable_modifier_guard (#257)
 - oneshot_timeout option
 - overload_tap_timeout
 - macro_sequence_timeout (#255)

See the manpage for details.


# v2.4.2

 - Add include directive to the config syntax
 - Ship includable common layouts
 - Allow comments in the ids section (#245)
 - Create virtual pointer on initialization (#249)
 - Misc bug fixes

# v2.4.1

 - Route button presses through the virtual keyboard (#162)
 - Improve mouse support
 - Fix VT repeat bug
 - Allow overload to accept an arbitrary action (#199)
 - Add support for full key serquences to swap()
 - Misc bugfixes

# v2.4.0

 - Fix macro timeouts
 - Allow timeouts to be used in conjunction with + (#181)
 - Add macro2() to allow for per-macro timeout values (#176)
 - Add command() to allow for command execution
 - Add [global] section
 - Improve unicode support
 - Add support for older kernels (#163)
 - Clear oneshot on click
 - Various bugfixes and enhancements

# v2.3.1-rc

 - Add unicode support
 - Add noop
 - Fix keyd-application-mapper hotswapping

# v2.3.0-rc

This is a **major release** which breaks **backward compatibility** with
non trivial configs. It is best to reread the man page. Minimal
breaking changes are expected moving forward.

 - Introduce composite layers
 - Add timeout()
 - Simplify layer model
 - Layer entries are now affected by active modifiers (current layer modifiers excepted)
 - Eliminate layer types
 - Eliminate -d

See [DESIGN.md](DESIGN.md) for a more thorough description of changes.

# v2.2.7-beta

 - Fix support for symlinked config files (#148)
 - Improve out of the box handling of alt and meta overloading (#128)
 - Add unicode support to keyd-application-mapper
 - Various bugfixes and stability improvements

# v2.2.5-beta

 - Eliminate udev as a dependency
 - Permit mapping to modifier key codes (still discouraged)
 - Support for nested swapping
 - Improve app detection
 - Various bug fixes

# v2.2.4-beta

  - Add support for application mapping by title
  - Fix macro timeouts
  - Forbid modifier keycodes as lone right hand values in favour of layers

# v2.2.3-beta

 - Enable hot swapping of depressed keybindings via -e
 - Improve support for application remapping

# v2.2.2-beta

 - Change panic sequence to `backspace+enter+escape` (#94)
 - Fix overload+modifer behaviour (#95)

# v2.2.1-beta

 - Move application bindings into ~/.config/keyd/app.conf.
 - Add -d to keyd-application-mapper.
 - Fix broken gnome support.

# v2.2.0-beta

 - Add a new IPC mechanism for dynamically altering the keymap (-e).
 - Add experimental support for app specific bindings.

# v2.1.0-beta

 NOTE: This might break some configs (see below)

 - Change default modifier mappings to their full names (i.e `control =
   layer(control)` instead of `control = layer(C)` in an unmodified key map)`.

 - Modifier names are now syntactic sugar for assigning both associated key
   codes.  E.G `control` corresponds to both `leftcontrol` and `rightcontrol`
   when assigned instead of just the former.  (Note: this also means it is no
   longer a valid right hand value)

 - Fixes v1 overload regression (#74)

# v2.0.1-beta

 - Add + syntax to macros to allow for simultaenously held keys.

# v2.0.0-beta

Major version update.

This breaks 1.x configs. The format may ~~change slightly~~ (see [2.3.0-rc](#v230-rc)) before leaving beta,
but once it does should remain backwards compatible for the foreseeable future.

A non exhaustive list of changes can be found below. It is best to forget
everything you know and read man page anew.

 - Eliminate layer inheritance in favour of simple types.
 (layouts are now defined with `:layout` instead of `:main`)
 - Macros are now repeatable.
 - Overload now accepts a hold threshold timeout.
 - Config files are now vendor/product id oriented.
 - SIGUSR1 now triggers a config reload.
 - Modifiers are layers by default and can be extended directly.
 - Config files now end in `.conf`.
 - `layert()` is now `toggle()`.
 - All layers are 'modifier layers' (terminological change)
 - Eliminate the dedicated modifer layout.
 - Modifiers no longer apply to key sequences defined within a layer.
   (Layer entries are now always executed verbatim.)

   The old behaviour was unintuitive and can be emulated using nested
   layers if necessary.

For most old configs transitioning should be a simple matter of changing
the file extension from `.cfg` to `.conf`, replacing `layert` with
`toggle`, changing `:main` to `:layout` and adding

```
[ids]

*

[main]
```

to the top of the file.

More involved configs may need additional changes, but should be possible
to replicate using the new rules. If not, please file an issue on
[github](https://github.com/rvaiya/keyd/issues).

# v1.1.1

- Make layert behaviour more intuitive when combined with oneshot() and layer().

# v1.1.0

- Add layert() to facilitate semipermanent-activation of occluding layers.
- Resolve layer conflicts by picking the one which was most recently activated.

# v1.0.0

Major version update:

- Introduce support for modifier layers.
- Simplify the config format.
- Improve consistency/expected key behaviour.
- Symbols can now be assigned directly place of their names (e.g `&` instead of `S-7`).
- Macro support.

*This breaks existing configs*. Moving forward the config format is expected to
remain backwards compatible.

Main Config Changes:

- Modifiers are now just treated as layers
- The default layer is now called main
- The modifier layout is distinct from the key layout

Config migration map:

```
mods_on_hold(C, esc)        = overload(C, esc)
layer_on_hold(layer, esc)   = overload(layer, esc)
layer_toggle(layer)         = layout(layer)
layer(layer)                = layer(layer)
oneshot(mods)               = oneshot(mods)
oneshot_layer(layer)        = oneshot(layer)
[dvorak:default]            = [dvorak:main]
```

See the [manpage](man.md) for details.
