Version 0.6.0 of package Devil has just been released in NonGNU ELPA. You can now find it in M-x list-packages RET.
Devil describes itself as: ======================================== Minor mode for translating key sequences ======================================== More at https://elpa.nongnu.org/nongnu/devil.html ## Summary: 1 Devil Mode ════════════ [file:https://melpa.org/packages/devil-badge.svg] [file:https://stable.melpa.org/packages/devil-badge.svg] [file:https://elpa.nongnu.org/nongnu/devil.svg] [file:https://img.shields.io/badge/mastodon-%40susam-%2355f.svg] ## Recent NEWS: Changelog ═════════ Version 0.6.0 (UNRELEASED) ────────────────────────── Changed ╌╌╌╌╌╌╌ • Devil key sequence `, m' now translates to `M-' instead of `C-M-'. • Devil key sequence `, m z' now translates to `M-' instead of `C-M-'. • Devil key sequence `, m ,' now translates to `M-,' instead of `C-M-,'. • Devil key sequence `, m m' now translates to `C-M-' instead of `M-'. • Repeatable key sequence `, m m f' changed to `, m f'. • Repeatable key sequence `, m m b' changed to `, m b'. • Repeatable key sequence `, m m y' changed to `, m y'. • Repeatable key sequence `, m m ^' changed to `, m ^'. Removed ╌╌╌╌╌╌╌ • Devil key translation from `m z' to `M-'. • Devil key translation from `m m' to `m'. • Devil key translation from `m' to `M-'. Version 0.5.0 (2023-06-15) ────────────────────────── 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) ────────────────────────── 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. … …