#+options: num:nil

* Changelog

** Version 0.5.0 (2023-06-15)
:PROPERTIES:
:CUSTOM_ID: 0.5.0
:END:

*** Added

- Function =devil-set-key= to set a new Devil key and update the
  mode's keymap.
- Reinstate variable =devil-version= since it is useful in determining
  the source version conveniently.  It helps during troubleshooting
  the package when installed from MELPA which sets the package version
  to a version derived from the current date and time.
- Command =devil-describe-key= to describe Devil key sequences.
- Command =devil-toggle-logging= to toggle logging.
- Special key =, h , k= to execute =devil-describe-key=.
- Special key =, h , l= to execute =devil-toggle-logging=.

*** Changed

- Customising =devil-key= also updates the mode's keymap.
- When no binding exists for the translated key sequence, convert the
  key sequence to a fallback key sequence for terminal Emacs according
  to =local-function-key-map= and execute any command bound to the
  fallback key sequence.  For example, when the Devil key sequence =,
  x <tab>= is converted to =C-x <tab>=, since no command is bound to
  this key sequence, it is further translated to =C-x TAB= and the
  command =indent-rigidly= bound to it is executed.
- Format control sequence to show the Devil key sequence read by Devil
  has changed from =%k= to =%r=.
- The default special key sequences no longer merely insert literal
  characters into the buffer.  That behaviour was problematic in
  =isearch-mode= because typing special keys like =, ,= and =, SPC= in
  =isearch-mode= inserted the literal characters in the buffer as
  opposed to appending these characters to the search pattern.  The
  default special key sequences now invoke =devil-execute-key= instead
  which carefully look up the current binding for the current special
  key and executes it.  This produces the correct behaviour of special
  keys even in =isearch-mode=.

*** Fixed

- Fix special key sequence =, <return>= which was broken by the
  previous release of version 0.4.0.
- Fix special key =, ,= in =isearch-mode=.

** Version 0.4.0 (2023-05-27)
:PROPERTIES:
:CUSTOM_ID: 0.4.0
:END:

*** Added

- Customisable variable =devil-all-keys-repeatable= that makes all
  Devil key sequences repeatable when set to =t=.
- Key =, s= to the default list of repeatable keys.
- Key =, d= to the default list of repeatable keys.
- Key =, m m ^= to the default list of repeatable keys.
- Translate =m m= to =m= to support typing key sequences like =C-c m=.
- Translate =m z= to =M-= to support typing key sequences like =C-c
  M-m= and =C-M-m=.

*** Changed

- When a Devil key sequence translates to an Emacs key sequence with
  both the control key and an uppercase letter, the uppercase letter
  is further translated to its shifted form, e.g., =C-M-V= is
  translated to =C-M-S-v=.

*** Fixed

- Fix key translation when the Devil key is a key vector, e.g., =(kbd
  "<left>")=
- Fix key translation of key sequences involving function keys, e.g.,
  =, <tab>=, =, <backspace>=, etc.  For example, earlier =, <tab>=
  translated to =C-TAB= and caused "undefined" error even if there was
  a command bound to =C-<tab>=.  With this fix, =, <tab>= is now
  translated to =C-<tab>= and invokes the command bound to it, if any.


** Version 0.3.0 (2023-05-11)
:PROPERTIES:
:CUSTOM_ID: 0.3.0
:END:

*** Added

- Add customisation group =devil=.

*** Changed

- Move tests out to a separate file.

*** Fixed

- Fix spacing in documentation strings.
- Remove =devil-version= and =devil-show-version=.


** Version 0.2.0 (2023-05-09)
:PROPERTIES:
:CUSTOM_ID: 0.2.0
:END:

*** Added

- Key =, k= to the default list of repeatable keys.
- Key =, /= to the default list of repeatable keys.
- Key =, m m y= to the default list of repeatable keys.
- Command =devil-show-version= to display Devil version.

*** Changed

- Automatically detect the activation key and accumulate it in order to
  support =devil-mode-map= with multiple activation keys.

*** Fixed

- Remove a stray =message= call.
- Make the function =dev--tests= non-interactive.
- Translation issue that caused invalid Emacs key sequences on mapping
  =-=.  For example, mapping =-= to =C-x= and typing =- C-f= produced
  =C-x CC-xf=.  This has been fixed so that =- C-f= is now translated
  to =C-x C-f=.


** Version 0.1.0 (2023-05-07)
:PROPERTIES:
:CUSTOM_ID: 0.1.0
:END:

*** Added

- Devil global and local minor modes.
- Default Devil key set to the comma (=,=).
- Special key =, ,= to type a literal comma.
- Special key =, SPC= to type a comma followed by a space.
- Special key =, RET= to type a comma followed by return.
- Translation rules that translate =,= and =, z= to =C-=.
- Translation rules that translate =m= and =, m m= to =M-=.
- Translation rule that translates =, ,= to =,=.
- Repeatable key sequences for =, p=, =, n=, =, f=, =, b=, =, m m f=,
  =, m m b=, and =, m x o=.
- Key binding for =isearch-mode-map= to support Devil key sequences in
  incremental search.
- Key binding for =universal-argument-map= to support repeating the
  universal argument with =u=.
